




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、UT-S3C6410 ARM11 Linux 下的LED驱动 在李人东老师的要求下,让我把基于Linux下ARM的初级驱动开发流程在这里演示一遍,为了不枉费李人东老师的一片心血,和对ARM还没有入门苦苦探索的亲们,给你们开启一扇窗户,少走一些弯路,废话少说,现在开始:一 、实验环境 操作系统:ubuntu 9.0 或以上 交叉编译环境:arm-Linux-gcc 6410板子内核源码路径在:/s3c6410/l
2、inux-v1.0/硬件平台:UT-S3C6410开发板(其他类型的开发板也可以注意配置GPIO)注:交叉编译环境一定要装好,一般的开发板给的配套资料中都会有,安装过程也都有详细的过程,),泪奔支持你们。二 、实验原理 控制LED是最简单的一件事情,就像学C语言时候写的“hello world”程序一样,是一个入门的程序。 首先来了解一下相关的硬件知识:
3、0; UT-S3C6410 LED原理图
4、; UT-S3C6410 LED外部引脚图 从上面的原理图可以得知,LED与CPU引脚的连接方法如下,高电平点亮。 LED1
5、;-GPM0 LED2 -GPM1 LED3 -GPM2 LED4 -GPM3 从数据手册可以找到相应的控制方法。这里我们以LED1为例,介绍一下LED1的操作方法,其他的类似,请大家自行分析。通过上面可以得知,需要先将GPM0设置为输出方式。将寄存器GPMCON低四位配置成0001。然后将GPMDAT寄存器的第0位置1灯亮,置LED0灯亮,开发板上有四个
6、LED所以要对GPMDAT的低四位进行操作,就可以实现对灯的亮灭操作了。三、实验步骤1、编写驱动程序driver_led.c #include <linux/module.h> #include <linux/kernel.h> #include <linux/fs.h> #include <asm/uaccess.h> /* copy_to_user,copy_from_user */ #include <linux/miscdevice.h> #include <linux/pci.h> #include &
7、lt;mach/map.h> #include <plat/regs-gpio.h> #include <plat/gpio-bank-m.h> #include <plat/gpio-cfg.h> #define LED_MAJOR 240 int led_open (struct inode *inode,struct file *filp) unsigned tmp; tmp = readl(S3C64XX_GPMCON); tmp = (tmp & (0xffffU)|(0x1111U); writel(tmp, S3C64XX_GPM
8、CON); printk("#open GPMCON#n"); return 0; ssize_t led_read (struct file *filp, char _user *buf, size_t count,loff_t *f_pos) printk("#read#n"); return count; ssize_t led_write (struct file *filp, const char _user *buf, size_t count,loff_t *f_pos) char wbuf10; unsigned tmp; printk(
9、"#write LED#n"); copy_from_user(wbuf,buf,count); switch(wbuf0) case 0: /on tmp = readl(S3C64XX_GPMDAT); tmp |= (0xfU); writel(tmp, S3C64XX_GPMDAT); break; case 1: /off tmp = readl(S3C64XX_GPMDAT); tmp &= (0xfU); writel(tmp, S3C64XX_GPMDAT); break; default : break; return count; int led
10、_release (struct inode *inode, struct file *filp) printk("#release#n"); return 0; struct file_operations led_fops = .owner = THIS_MODULE, .open = led_open, .read = led_read, .write = led_write, .release = led_release, ; int _init led_init (void) int rc; printk ("Test led devn");
11、rc = register_chrdev(LED_MAJOR,"led",&led_fops); if (rc <0) printk ("register %s char dev errorn","led"); return -1; printk ("ok!n"); return 0; void _exit led_exit (void) unregister_chrdev(LED_MAJOR,"led"); printk ("module exitn"); r
12、eturn ; module_init(led_init); module_exit(led_exit); Makefile文件Makefileobj-m:=driver_led.oKDIR:=/s3c6410/urbetter-linux-v1.0all:make -C $(KDIR) M=$(shell pwd) modulescp driver_led.ko /home/fusq/nfs_shareclean:make -C $(KDIR) M=$(shell pwd) clean2、编写测试程序test.c #include <stdio.h> #include
13、<sys/types.h> #include <sys/stat.h> #include <fcntl.h> int main (void) int fd; char buf10=0,1; fd = open("/dev/my_led",O_RDWR); if (fd < 0) printf ("Open /dev/my_led file errorn"); return -1; while(1) write(fd,&buf0,1); sleep(1); write(fd,&buf1,1); sl
14、eep(1); close (fd); return 0; 3、编译驱动程序与测试程序 3.1编译驱动程序 #make 编译成驱动文件driver_led.ko并自动拷贝到了/home/fusq/nfs_share注:要注意Makefile要符合Linux下的文本格式,如果出现不执行,请在Linux下vi或vim重新编辑一下。如果出现头文件找不到,请找到该头文件的具体位置一般都在(urbetter-linux-v1.0)文件夹下
15、,将该头文件最后路径的文件夹名字填到程序头文件调用中。 3.2编译测试程序 #arm-linux-gcc test.c -o test 将测试程序也放到/home/fusq/nfs_share共享文件夹下 #cp test /home/fusq/nfs_share 4、将程序下载到开发板
16、 将开发板的IP地址修改,与主机在同一个网段,并修改PC机上Linux下/etc/exports网络配置文件的IP与开发板的一致。确保PC机上Linux已经安装了NFS服务器,网络共享文件夹在/home/fusq/nfs_share。 在开发板的Linux下挂载nfs网络共享文件夹:rooturbetter /# mount -t nfs -o nolock 192.168.1.80:/home/fusq/nfs_share /
17、mnt/nfs 挂载到/mnt/nfs下。注:如果没有安装NFS服务器,为了完成实验,可以用串口将或是USB等设备将driver_led.ko和test文件拷贝到开发板的Linux工作目录下效果是一样的。 5、测试5.1加载驱动 #insmod /mnt/nfs/driver_led.ko网络有点小不稳定,亲们要耐心等待,不过还是成功了!5.2 创建设备文件 #mknod /dev/my_led c 240 05.3测试 ./test rooturbetter /# ./test注:此时可以看到UT-S3C6410板子上的LED0-3
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 养猪专业试题及答案
- 养殖专业试题及答案
- 财务相关专业试题及答案
- 绿化专业面试题及答案
- 甘肃省金太阳2026届高三9月开学联考(26-1002C)物理(含答案)
- 飞机多学科优化设计MDO提纲
- 火电燃料专业试题及答案
- 湖南省百师联盟2024-2025学年高二上学期1月期末检测生物学试卷(含答案)
- 河北省石家庄高新区外国语学校2025-2026学年八年级上学期开学测试英语试卷(含答案)
- 福建省泉州市安溪县2024-2025学年高二上学期11月期中考试语文试卷(含答案)
- 班组长管理技能提升修改
- 幼儿园消防安全教育课件:《玩火很危险》
- 酒精性肝病诊疗指南
- 学习解读《调查研究的重要论述》专题PPT
- 领导干部个人有关事项报告表(模板)
- 《中国近现代史纲要》 课件 第十一章 中国特色社会主义进入新时代
- EN61238-1额定电压36kV电力电缆用压接和机械连接器 试验方法和要求
- 专利法全套ppt课件(完整版)
- 自动插件机操作指导书
- 培智三年级上册生活数学全册教案
- 高考作文卷面书写
评论
0/150
提交评论