Linux设备驱动模型2——总线式设备驱动组织方式

以下内容源于朱有鹏嵌入式课程的学习,如有侵权,请告知删除。

更深入理解资料:http://blog.csdn.net/oqqhutu12345678/article/details/78933386


1、总线

(1)物理上的真实总线及其作用(英文bus);

(2)驱动框架中的总线式设计;

  • 相当于中间的管理者,管理设备和驱动,包括两者的匹配等内容。

(3)bus_type结构体

  • 关键是match函数(负责设备和驱动的匹配)和uevent函数。

Linux设备驱动模型2——总线式设备驱动组织方式

(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)全是结构体套结构体,对基本功(语言功底和大脑复杂度)要求很高

Linux设备驱动模型2——总线式设备驱动组织方式