Linux设备驱动模型2——总线式设备驱动组织方式
以下内容源于朱有鹏嵌入式课程的学习,如有侵权,请告知删除。
更深入理解资料:http://blog.csdn.net/oqqhutu12345678/article/details/78933386
1、总线
(1)物理上的真实总线及其作用(英文bus);
(2)驱动框架中的总线式设计;
- 相当于中间的管理者,管理设备和驱动,包括两者的匹配等内容。
(3)bus_type结构体
- 关键是match函数(负责设备和驱动的匹配)和uevent函数。
(4)总线管理设备(有一个设备链表)、驱动(有一个驱动链表)
- 它们之间通过名字来匹配。
2、设备
(1)struct device是硬件设备在内核驱动框架中的抽象;
(2)device_register,由内核开发者提供的框架提供,用于向内核驱动框架注册一个设备;
(3)通常device不会单独使用,而是被包含在一个具体设备结构体中,如struct usb_device。
3、驱动
(1)struct device_driver是驱动程序在内核驱动框架中的抽象;
(2)关键元素1:name
- 驱动程序的名字,很重要,经常被用来作为驱动和设备的匹配依据;
(3)关键元素2:probe
- 驱动程序的探测函数,用来检测一个设备是否可以被该驱动所管理(该设备是否正常、以及一些初始化,见顶头的博文描述);
4、类
(1)相关结构体:struct class(类) 和 struct class_device(类下面的某个设备)
(2)udev的使用离不开class;
(3)class的真正意义在于作为同属于一个class的多个设备的容器。
- 也就是说,class是一种人造概念,目的就是为了对各种设备进行分类管理。
- 当然,class在分类的同时还对每个类贴上了一些“标签”,这也是设备驱动模型为我们写驱动提供的基础设施。
5、总结
(1)模型思想很重要,其实就是面向对象的思想;
(2)全是结构体套结构体,对基本功(语言功底和大脑复杂度)要求很高