module_i2c_driver 和 i2c_driver 具体是怎样将设备驱动挂载到总线上的?
时间: 2024-02-29 10:56:18 浏览: 274
I2C驱动模块
3星 · 编辑精心推荐
在 Linux 内核中,I2C 设备驱动通常使用 i2c_driver 结构体来向内核注册自己的驱动程序。而 module_i2c_driver 结构体则是 i2c_driver 结构体的一个扩展,它提供了一种更简便的方式来注册 I2C 设备驱动,它会自动处理设备的注册和注销过程,并且可以自动处理驱动程序的依赖性。
具体来说,当使用 module_i2c_driver 结构体注册 I2C 设备驱动时,驱动程序需要提供一个包含设备ID和设备驱动程序入口函数的 i2c_device_id 结构体数组,用于告诉内核该驱动程序支持哪些设备。然后,当内核检测到一个新的 I2C 设备时,它会遍历 i2c_driver 维护的驱动程序列表,查找是否有驱动程序支持该设备ID,如果找到匹配的驱动程序,就会调用该驱动程序的 probe 函数来初始化该设备,并将其添加到总线上。
总之,无论是使用 module_i2c_driver 还是 i2c_driver,都需要提供设备ID和设备驱动程序入口函数,并将其注册到内核中,以便内核能够识别和管理设备。对于 I2C 设备来说,驱动程序的 probe 函数通常会执行设备的初始化和注册操作,并将其添加到总线上。
阅读全文