《linux字符设备驱动篇.ppt》由会员分享,可在线阅读,更多相关《linux字符设备驱动篇.ppt(11页珍藏版)》请在金锄头文库上搜索。
1、作者:作者:261676224261676224项目描述项目描述 本装置可以通过传感器采集现场火警【温度传感器模拟】等数据,通过摄像头采集现场图像,通过红外传感器【按键模拟】是否有人进入现场,在异常情况下给用户发送短信同时并报警;用户可以通过INTERNET登陆监控机的主页,在主页上观察监控机采集到的现场数据,以及现场是否有人进入过,通过摄像头采集现场图像或对现场进行实时监控 实现功能实现功能KEY1 - 启动报警 KEY2 - 解除报警LED1 - 运行状态提示灯LED2 - 温度过限提示灯LED3 - 阻值过限提示灯LED4 - 网页控制LED灯-采集到的阻值及温度数据全部存入数据库实时监
2、控终端界面可以修改阻值、温度阀值、或者主要控制蜂鸣器或LED灯驱驱 动动 篇篇module_init(xxx_init)module_exit(xxx_exit)intinit_module(int)voidinit_module(void)insmod装载rmmod卸载lsmod查看驱驱 动动 篇篇 如何编写一个字符设备驱动? 编写驱动准备编写驱动准备 首先对驱动所涉及到的硬件相关进行了解,包括其可实现的功能,需要配置的寄存器等,当然我们可以先实现裸驱程序正常执行,看看运行状态,然后再考虑如何将其编写为驱动模块驱动编写思想驱动编写思想 可以把驱动作为一个接口函数,功能当然也体现在接口函数上,
3、可以使用多个函数来实现不同的功能,然后供给上层应用层的调用驱动加载模式驱动加载模式 如何加载?驱动模块加载方式的选择根据需要来决定,如果仅为调试使用,建议以命令insmod方式加载,rmmod方式卸载,否则可以以静态方式加载 ,用make menuconfig来选配,生成zImage 驱驱 动动 篇篇structcdevstruct file_operations;devMKDEV(maj,min)Ioremap虚拟地址映射int (*release)( struct inode*, struct file*);int (*open)( struct inode*, struct file*)
4、;DEMO1?register_chrdev_region(xx_devnumber,1,“driver_name”);alloc_chrdev_region(&xx_devnumber,1,“driver_name”);register_chrdev_region(xx_devnumber,1);cdev_addcdev_initIounmap()驱驱 动动 篇篇DEMO2?platform_device_register(xx_device); platform_device_unregister(xx_device);-struct platform_device xx_device =
5、 |struct xx_device_resource = |0 = .name = “xx_d”,|.start = 0XE03001C0,.id = -1,|.end = 0XE03001C0 + 0X3,.resource = xx_device_resource,|.flags=IORESOURCE_MEM,.num_resource = ?,|,.dev = |1 = .release = myrelease,| ;|Void myrelease(struct device* dev)|驱驱 动动 篇篇DEMO2?platform_driver_register(xx_driver)
6、; platform_driver_unregister(xx_driver);-struct platform_driver xx_driver = .driver = .name = “xx_d”,.probe = xx_init,- xx_init(struct platform_device* xx_device).remove = xx_exit,- xx_exit(struct platform_device* xx_device) ;-platform_get_resource(struct platform_device* dev, ,)-platform_bus_type =
7、 .name = “”,.match = xxx_matchPlatform device 和和 Platform driver实际上是实际上是cpu总线可以直接寻址的设备和驱动,他总线可以直接寻址的设备和驱动,他们挂载在一个虚拟的总线们挂载在一个虚拟的总线platform_bus_type上上驱驱 动动 篇篇DEMO3?驱动程序驱动程序驱动程序驱动程序MakefileMakefileKconfigKconfigDEMO3?驱驱 动动 篇篇mach-smdkc100.cmach-smdkc100.cMake menuconfigMake menuconfig驱驱 动动 篇篇总之我们在编写程序过程中会先各种各样的问题,不用畏惧”errno”或”warning”,应该多查资料,多做测试,或请教他人,我们要很有耐心地、仔细地查出和对待每一个问题,绝不含糊的放过任何一个bug,解决问题后并加以记录,以供自己或他人学习使用,同时也是自己经验累积的一个重要方法。