资源描述:
《Arm驱动程序设计--LED灯驱动》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、Arm驱动程序设计LED灯驱动任务要求要求:对开发板上的LED灯点亮实现:两部分1、驱动设计(在linux内核中加入LED驱动)2、应用程序实现(应用程序调用驱动实现点亮)硬件原理图驱动编写第一步:解压源码我们要编写的驱动是对应于LED第二步:进入drivers目录cddriversLED属于字符设备cdchar进入char目录第三步:编写led-test.c驱动源程序geditled-test.c第一步、编写驱动包括6部分1头文件2注册函数3卸载函数找一个类似的驱动打开,编写首先把头文件全部copy4定义设备名#defineDEVICE_NAME"leds“5硬件引脚定
2、义6模块信息#include#include#include#include#include#include#include#include#include#include#include#include#incl
3、ude#include#include#include#include#include#include1加入硬件引脚staticunsignedlonggpio_table[]={S3C2410_GPB5,S3C2410_GPB6,S3C2410_GPB7,S3C2410_GPB8,};staticintleds_init(void){}staticvoidleds_exit
4、(void){}2编写注册函数3编写卸载函数4加入模块信息module_init(leds_init);module_exit(leds_exit);MODULE_LICENSE("GPL");MODULE_AUTHOR("zjl");staticunsignedintgpio_cfg_table[]={S3C2410_GPB5_OUTP,S3C2410_GPB6_OUTP,S3C2410_GPB7_OUTP,S3C2410_GPB8_OUTP,};说明引脚功能,输出staticintleds_init(void){intret;ret=misc_register(&mi
5、sc_leds);if(ret<0)printk("TQ2440ledsinitfailed!");printk("TQ2440ledsinitOK!");return0;}misc说明LED属于混合设备(杂项)staticvoidleds_exit(void){misc_deregister(&misc_leds);printk("TQ2440ledsexitOK!");}编写注册函数编写卸载函数结构体定义结构体misc_ledsstaticstructmiscdevicemisc_leds={.minor=MISC_DYNAMIC_MINOR,.name=
6、DEVICE_NAME,.fops=&dev_leds_fops,};staticstructfile_operationsdev_leds_fops={.owner=THIS_MODULE,.open=leds_open,.ioctl=leds_ioctl,};杂项的次设备号定义结构体dev_leds_fops,staticintleds_open(structinode*inode,structfile*file){printk("TQ2440ledsopend!");return0;}完成结构体中的两个成员函数.open=leds_open,.ioctl=led
7、s_ioctl,staticintleds_ioctl(structinode*inode,structfile*file,unsignedintcmd,unsignedlongarg){switch(cmd){case0:case1:if(arg>4)return-EINVAL;s3c2410_gpio_setpin(gpio_table[arg],cmd);return0;default:return-EINVAL;}}完整的驱动程序#include#include