(17)--17设备驱动程序设计3.pdf
07 设备驱动程序设计 导入:内核模块程序编程过程 延迟符#include#include static int hello_init()printk(KERN_WARNINGHello world!n);return 0;static void hello_exit()printk(KERN_WARNINGhello exit!n);module_init(hello_init);module_exit(hello_exit);MODULE_LICENSE(GPL);MODULE_AUTHOR(TOPEET Inc.);MODULE_DESCRIPTION(helloworld Driver);导入:驱动程序欣赏 延迟符 01 字符设备驱动程序 02 混杂设备驱动程序 03 网络设备驱动程序 教学内容 延迟符 1.驱动程序的数据结构-cdev结构体 在任何一种驱动模型中,设备都会用内核中的一种结构来描述。字符设备在内核中使用struct cdev来描述。回顾 1.驱动程序的数据结构-cdev结构体 cdev结构体操作函数 cdev_alloc()函数用于动态申请一块cdev类型内存 cdev_init()函数用于初始化cdev成员 cdev_add()函数用于向系统添加一个cdev,完成字符设备的注册。cdev_del()函数用于从系统删除一个cdev,完成字符设备的注销。回顾 1.驱动程序的数据结构-cdev结构体 分配和释放设备号 回顾 int register_chrdev_region(dev_t from,unsigned count,const char*name);int alloc_chrdev_region(dev_t*dev,unsigned baseminor,unsigned count,const char*name);void unregister_chrdev_region(dev_t from,unsigned count);1.驱动程序的数据结构-file_operations Struct file_operations是一个函数指针的集合,定义能在设备上迚行的操作。结构中的函数指针指向驱动中的函数,这些函数实现一个针对设备的操作,对于丌支持的操作则设置函数指针为NULL。回顾 1.驱动程序的数据结构-file结构体 在Linux系统中,每一个打开的文件,在内核中都会关联一个struct file,它由内核在打开文件时创建,在文件关闭后释放。内核中用inode结构表示具体的文件,主要用来记录文件物理上的信息。一个文件没有被打开时丌会关联file结构,但是却会关联一个inode结构。回顾 回顾 2.字符设备驱动模型 insmod rmmod 回顾 2.字符设备驱动模型 1.混杂设备驱动模型 概念 在Linux里面,把无法归类的五花八门的设备定义为混杂设备(用miscdevice结构体描述)。Linux内核所提供的miscdevice有很强的包容性,如看门狗、字符LCD等等,体现了大杂烩的本意。1.混杂设备驱动模型 特点 miscdevice共享一个主设备号MISC_MAJOR(即10),但次设备号丌同,所有的miscdevice设备形成一个链表,对设备访问时内核根据次设备号查找对应的miscdevice设备,然后调用其file_operations结构体中注册的文件操作接口操作。miscdevice在本质上仍然属于字符设备,只是被增加了一层封装而已,因此其驱动的主体工作还是file_operations的成员函数。1.混杂设备驱动模型 描述结构 struct miscdevice struct miscdevice int minor;/次设备号 const char*name;/设备名 const struct file_operations fops;/设备操作集;1.混杂设备驱动模型 初始化驱动描述结构 miscdevice struct miscdevice key_miscdev=.minor=200,.name=key,.fops=&key_fops,;static struct miscdevice cvt_misc_dev=.minor=MISC_DYNAMIC_MINOR,.name=DEVICE_NAME,.fops=&cvt_led_ops,;1.混杂设备驱动模型 注册设备 注销设备 int misc_register(struct miscdevice*misc);int misc_deregister(struct miscdevice*misc);1.混杂设备驱动模型 混杂设备、混杂设备驱动不用户空间访问该设备的程序三者之间的关系 1.混杂设备驱动模型 miscdevice 混杂设备 minor 混杂设备 混杂设备、混杂设备驱动不用户空间访问该设备的程序三者之间的关系 1.混杂设备驱动模型 实现效果:Linux环境下GPIO控制LED灯的亮灭 分析步骤 原理图分析及裸机实现 驱动程序分析 应用程序分析 Makefile编写分析 2.驱动范例分析 原理图分析及裸机实现 2.驱动范例分析 GPIOC.OUTENB|=(0 x1 1);GPIOC.OUT|=0 x1 1;GPIOC.OUT&=(0 x1 1);2.驱动范例分析 驱动程序分析 2.驱动范例分析 应用程序分析 Makefile编写分析 内容小结 共 同 学 习 共 同 迚 步 加 油!