资源预览内容
第1页 / 共7页
第2页 / 共7页
第3页 / 共7页
第4页 / 共7页
第5页 / 共7页
第6页 / 共7页
第7页 / 共7页
亲,该文档总共7页全部预览完了,如果喜欢就下载吧!
资源描述
设备驱动程序的开发流程进行嵌入式 Linux 系统的开发,很大的工作量是为各种设备编写驱动程序。在 ARM 平台上 开发嵌入式 Linux 的设备驱动程序与在其他平台上开发是一样的。总的来说,实现一个嵌 入式 Linux 设备驱动的大致流程如下: (1)查看原理图,理解设备的工作原理 (2)定义主设备号 (3)在驱动程序中实现驱动的初始化。如果驱动程序采用模块的方式,则要实现模块初始化。(4)设计所要实现的文件操作,定义 file_operations 结构。(5)实现中断服务(中断并不是每个设备驱动所必须的) (6)编译该驱动程序到内核中,或者用 insmod 命令加载(7)测试该设备 3.2 linux 下字符设备的驱动开发实例-LED 驱动 (可参考 FS2410P 实验指导手册 v2.1.2.pdf,302-313) (1)实验内容:4个 LED 灯轮流闪烁 本节要求实现在一个字符设备驱动里面实现对 GPIO 端口的操作。 在模块加载的时候跑马灯运行起来 模块卸载的时候,跑马灯停止。 FS2410P 上的4个 LED 指示灯由4个 I/O 口控制,它们分别是:GPF4GPF7,输出低电平时候, 相应的 LED 指示灯亮。 (2)LED 的原理图 FS2410P 带有4个用户可编程 I/O 方式 LED,下表为 LED 对应的 I/O 口。 表1 用户指示灯占用 CPU 资源列表序号 名字 CPU 端口资源1 LED1 GPF42 LED2 GPF53 LED3 GPF6 LED4 GPF7 图1 LED 原理图 (3)LED 驱动源代码及说明 在/s3c2410下新建一个目录:gpiodrv#mkdir/s3c2410/gpiodrv #cd/s3c2410/gpiodrv 在/s3c2410/gpiodrv 目录下用 vi 编辑器编写符合上面功能的驱动源程序gpiodrv.c #cd/s3c2410/gpiodrv #vi gpiodrv.c #include #include #include #include #include #include#include #include #include #include#include #include #include #define IOPORT_MAJOR 220 int magic_leds_open(struct inode*inode,struct file*filp); int magic_leds_ioctl(struct inode*inode,struct file*filp,unsigned int cmd,unsignedlong arg); int magic_leds_release(struct inode*inode,struct file*filp); static struct file_operations magic_leds_fops= ioctl:magic_leds_ioctl, open:magic_leds_open, release:magic_leds_release, ; #define LED1_ON()(GPFDAT void LedSet(int led) ledStatus=led; if(ledStatus else LED1_OFF(); if(ledStatus else LED2_OFF(); if(ledStatus else LED3_OFF(); if(ledStatus else LED4_OFF(); void LedDisy(void) LedSet(0x08); udelay(0x500000); LedSet(0x04); udelay(0x500000); LedSet(0x02); udelay(0x500000);LedSet(0x01); udelay(0x500000); LedSet(0x02); udelay(0x500000); LedSet(0x04); udelay(0x500000); LedSet(0x08); udelay(0x500000); static int_init magic_leds_init(void) int result=0; printk(“magic_leds_initn“); result=register_chrdev(IOPORT_MAJOR,“gpio“, if(result #include #include #include #include#include #include int main(int argc,char*argv) int i; int fd;fd=open(“/dev/gpio“,0); if(fdnetload#./down 或是双击 down 批处理文件,选择在终端运行,可以看到内核映像下载到了开发板。 传输完后,再输入命令“nfprog”,然后回车,然后输入“2”选择第 二个区块,输入“Y”确认将文件烧写到 nandflash 中。重复操作(3) , (4) , (5) , (6) ,可看到实验结果。
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号