《Arm驱动程序设计》PPT课件.ppt
Arm驱动程序设计LED灯驱动任务要求要求:对开发板上的LED灯点亮实现:两部分1、驱动设计(在linux内核中加入LED驱动)2、应用程序实现(应用程序调用驱动实现点亮)硬件原理图驱动编写第一步:解压源码我们要编写的驱动是对应于LED第二步:进入drivers目录cd driversLED属于字符设备cd char进入char目录第三步:编写驱动源程序第一步、编写驱动包括6部分1头文件2注册函数3卸载函数找一个类似的驱动打开,编写首先把头文件全部copy4定义设备名#define DEVICE_NAME leds“5硬件引脚定义6模块信息#include#include#include#include#include#include#include#include#include#include#include#include#include#include#include#include#include#include#include 1加入硬件引脚static unsigned long gpio_table =S3C2410_GPB5,S3C2410_GPB6,S3C2410_GPB7,S3C2410_GPB8,;static int leds_init(void)static void leds_exit(void)2编写注册函数3编写卸载函数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,;说明引脚功能,输出static int leds_init(void)int ret;ret=misc_register(&misc_leds);if(ret 4)return-EINVAL;s3c2410_gpio_setpin(gpio_tablearg,cmd);return 0;default:return-EINVAL;完整的驱动程序#include#include#include#include#include#include#include#include#include#include#include#include#include#include#include#include#include#include#include#include#include#include#include#define DEVICE_NAME leds/*用来指定用来指定LED所用的所用的GPIO引脚引脚*/static unsigned long gpio_table =S3C2410_GPB5,S3C2410_GPB6,S3C2410_GPB7,S3C2410_GPB8,;/*用来指定用来指定GPIO引脚的功能:输出引脚的功能:输出*/static unsigned int gpio_cfg_table =S3C2410_GPB5_OUTP,S3C2410_GPB6_OUTP,S3C2410_GPB7_OUTP,S3C2410_GPB8_OUTP,;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(void)int ret;ret=misc_register(&misc_leds);if(ret 4)return-EINVAL;s3c2410_gpio_setpin(gpio_tablearg,cmd);return 0;default:return-EINVAL;第二步、修改配置文件Kconfiggedit Kconfig,添加驱动选项第三步、修改Makefileogedit Makefileo添加名字与.c文件名一致第四步、make menuconfigo退到根目录o执行make menuconfigDevice drivers Character devices找到你新添加的设备选择o三种空白不选*内核选择M作为模块选择第五步 编译o执行make zImageo下载新的内核文件o驱动制作完成下一步、编写应用程序#include#include#include#include int main(int argc,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;调用驱动调试,运行o第一步,下载zImageo第二步,运行应用程序o效果很好!