
上QQ阅读APP看书,第一时间看更新
2.3 设备驱动
设备驱动通过调用driver_register()
把自己注册到总线核心驱动中。然后设备模型核心会尝试将新注册的驱动与设备绑定。当一个能够被特定驱动处理的设备被发现后,驱动的probe()
函数会被调用,设备的配置信息则通过设备树获取。
设备驱动负责实例化和注册一个device_driver
数据结构(定义在include/linux/device.h
)实例到设备模型核心。device_driver
数据结构的定义如下:

bus
成员是一个指向bus_type
数据结构的指针,用来标识驱动注册到哪个总线上。probe
成员是一个回调函数,每当驱动支持的设备被发现时会调用该函数。驱动为各设备初始化自身,并且初始化具体的设备。remove
成员也是一个回调函数,调用该函数来将设备和驱动解绑。这种情况一般发生在设备移除、驱动卸载或者系统关闭的时候。
Linux设备模型如图2-1所示。

图2-1 Linux设备模型