首页 理论教育Linux内核设备驱动探密

Linux内核设备驱动探密

【摘要】:设备模型中管理驱动的数据结构是device_driver,其中包含驱动提供的通用服务的接口,下面对它进行分析:来看看sys文件系统中驱动之下主要管理哪些实体:从driver_private可见,其中主要的信息是运行中使用该驱动的设备列表。以platform驱动实体为例进行分析:其中定义了总线设备相关的服务接口:从platform驱动注册接口可以看出,抽象层的服务接口都被换为实例化的接口,这样内嵌的driver可以通过设备模型核心提供的标准操作进行管理,也可以通过这些实例化接口进行转换。

设备模型中驱动的主要功能是和设备绑定后为使用设备提供相关的操作服务。既然是服务就可以为多个设备提供,只要与设备匹配,服务功能就能正确地完成。设备模型中管理驱动的数据结构是device_driver,其中包含驱动提供的通用服务的接口,下面对它进行分析:

978-7-111-49426-3-Chapter05-38.jpg

978-7-111-49426-3-Chapter05-39.jpg

来看看sys文件系统中驱动之下主要管理哪些实体:

978-7-111-49426-3-Chapter05-40.jpg

从driver_private可见,其中主要的信息是运行中使用该驱动的设备列表。

device_driver还是抽象层面的实体,而到具体的总线时,相应的驱动要有与总线相关的驱动实体,因为只有具体总线的驱动才会了解相应总线的设备,相应的服务接口也要与具体的总线设备相关。从这个层面上讲设备模型中的驱动与总线关系更紧密。

以platform驱动实体为例进行分析:

978-7-111-49426-3-Chapter05-41.jpg

其中定义了总线设备相关的服务接口:

978-7-111-49426-3-Chapter05-42.jpg(www.chuimin.cn)

978-7-111-49426-3-Chapter05-43.jpg

从platform驱动注册接口可以看出,抽象层的服务接口都被换为实例化的接口,这样内嵌的driver可以通过设备模型核心提供的标准操作进行管理,也可以通过这些实例化接口进行转换。

系统中设备与驱动绑定的流程如图5-17所示。

978-7-111-49426-3-Chapter05-44.jpg

图5-17 驱动与设备绑定的流程

从图5-17可见,具体总线驱动在注册的时候就会根据总线是否自动probe设备(通常自动有效)来进行设备的绑定,为了实现该功能设备模型核心提供了很多接口方便设备和驱动的绑定,相应的功能也是十分完善的。其中添加driver的接口就是driver_register,来看看具体的内容:

978-7-111-49426-3-Chapter05-45.jpg

978-7-111-49426-3-Chapter05-46.jpg

从代码中可见,设备模型管理的device_driver必须与bus关联,因为只有bus才能帮其找到所管理的设备,而具体的总线都会如platform总线一样封装出注册driver的接口函数,并将device_driver的bus属性填入,为上层提供统一的接口,也避免跨层设置。后续的操作如图5-17所示,根据bus的自动probe属性来进行具体总线的设备与驱动的绑定。