《Arm驱动程序设计实用教案》由会员分享,可在线阅读,更多相关《Arm驱动程序设计实用教案(19页珍藏版)》请在金锄头文库上搜索。
1、硬件(ynjin)原理图第1页/共18页第一页,共19页。驱动(qdn)编写第一步:解压源码我们要编写的驱动(qdn)是对应于LED第二步:进入drivers目录cddriversLED属于字符设备cdchar进入char目录第三步:编写led-test.c驱动(qdn)源程序geditled-test.c第2页/共18页第二页,共19页。第一步、编写(binxi)驱动包括6部分1头文件2注册函数3卸载函数找一个类似的驱动(qdn)打开,编写首先把头文件全部copy4定义设备名#defineDEVICE_NAMEleds“5硬件引脚定义6模块信息#include #include #inclu
2、de #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include 第3页/共18页第三页,共19页。1加入( jir)硬件引脚static unsigned long gpio_table =S3C2410_GPB5,S3C2410_GPB6,S3C2410_GPB7,S3C2410_GPB8,;static int leds_init(void)static void
3、 leds_exit(void)2编写注册(zhc)函数3编写(binxi)卸载函数4加入模块信息module_init(leds_init);module_exit(leds_exit);MODULE_LICENSE(GPL);MODULE_AUTHOR(zjl);static unsigned int gpio_cfg_table =S3C2410_GPB5_OUTP,S3C2410_GPB6_OUTP,S3C2410_GPB7_OUTP,S3C2410_GPB8_OUTP,;说明引脚功能,输出第4页/共18页第四页,共19页。static int leds_init(void)int r
4、et;ret = misc_register(&misc_leds);if(ret 4) return -EINVAL;s3c2410_gpio_setpin(gpio_tablearg,cmd);return 0;default:return -EINVAL;第8页/共18页第八页,共19页。完整(wnzhng)的驱动程序#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #i
5、nclude #include #include #include #include #include #include #include #define DEVICE_NAME leds/* 用来(yn li)指定LED所用的GPIO引脚 */static unsigned long gpio_table =S3C2410_GPB5,S3C2410_GPB6,S3C2410_GPB7,S3C2410_GPB8,;/* 用来(yn li)指定GPIO引脚的功能:输出 */static unsigned int gpio_cfg_table =S3C2410_GPB5_OUTP,S3C2410_
6、GPB6_OUTP,S3C2410_GPB7_OUTP,S3C2410_GPB8_OUTP,;第9页/共18页第九页,共19页。static struct file_operations dev_leds_fops = .owner = THIS_MODULE,.open = leds_open,.ioctl = leds_ioctl,;static struct miscdevice misc_leds = .minor = MISC_DYNAMIC_MINOR,.name = DEVICE_NAME,.fops = &dev_leds_fops,;static int leds_init(
7、void)int ret;ret = misc_register(&misc_leds);if(ret 4) return -EINVAL;s3c2410_gpio_setpin(gpio_tablearg,cmd);return 0;default:return -EINVAL;第10页/共18页第十页,共19页。第二步、修改(xigi)配置文件Kconfiggedit Kconfig,添加(tin ji)驱动选项第11页/共18页第十一页,共19页。第三步、修改(xigi)MakefilegeditMakefile添加(tinji)名字(mng zi)与.c文件名一致第12页/共18页第十
8、二页,共19页。第四步、makemenuconfig退到根目录执行(zhxng)makemenuconfigDevice drivers Character devices找到你新添加(tin ji)的设备第13页/共18页第十三页,共19页。选择(xunz)三种空白不选*内核(nih)选择M作为模块选择第14页/共18页第十四页,共19页。第五步编译(biny)执行makezImage下载新的内核(nih)文件驱动制作完成第15页/共18页第十五页,共19页。下一步(yb)、编写应用程序#include #include #include #include int main(int argc
9、,char *arg )int fd;fd=open(/dev/leds,0);if(fd 0) printf(TQ2440 leds open failed!n); ioctl(fd,1,0);ioctl(fd,0,1);ioctl(fd,1,2);ioctl(fd,1,3); close(fd);return 0;调用(dioyng)驱动第16页/共18页第十六页,共19页。调试(diosh),运行第一步,下载zImage第二步,运行(ynxng)应用程序效果很好!第17页/共18页第十七页,共19页。感谢您的观赏(gunshng)!第18页/共18页第十八页,共19页。内容(nirng)总结硬件(yn jin)原理图。cd char进入char目录。#define DEVICE_NAME leds“。static int leds_init(void)。static int leds_init(void)。if(ret 0)。if(ret 0)。.owner = THIS_MODULE,。printk(TQ2440 leds opend。static int leds_ioctl(。感谢您的观赏第十九页,共19页。