module_i2c_driver 和 i2c_driver 具体是怎样将设备驱动挂载到总线上的?
时间: 2024-02-29 15:56:18 浏览: 42
在 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 函数通常会执行设备的初始化和注册操作,并将其添加到总线上。
相关问题
就上面提到的,我的驱动中有 module_i2c_driver 这是干嘛?
module_i2c_driver 是一个用于注册 I2C 设备的驱动程序结构体,它是 Linux 内核中 i2c_driver 结构体的一个扩展。在 Linux 内核中,I2C 设备驱动通常使用 i2c_driver 结构体来向内核注册自己的驱动程序。而 module_i2c_driver 结构体则提供了一种更简便的方式来注册 I2C 设备驱动,它会自动处理设备的注册和注销过程,并且可以自动处理驱动程序的依赖性。因此,使用 module_i2c_driver 结构体可以使 I2C 设备驱动的编写更加简单和方便。
module_i2c_driver 的of_match_table是什么
`module_i2c_driver` 是一个 Linux 内核模块的驱动程序框架,用于支持通过 I2C 总线连接的设备,`of_match_table` 是该框架中用于匹配设备树节点的结构体数组。
在 Linux 内核中,设备树是一种描述硬件设备和系统资源的数据结构,设备树节点包含有关设备的信息,例如设备的名称、地址、中断等。`of_match_table` 结构体数组包含有关设备的信息,这些信息可以与设备树节点进行匹配,以确定正确的驱动程序。
具体来说,当 Linux 内核启动时,它会扫描设备树并为每个节点尝试加载匹配的驱动程序。`of_match_table` 用于确定哪个驱动程序与节点匹配。如果找到匹配项,则内核将加载相应的驱动程序,并使用该驱动程序控制设备。
因此,`of_match_table` 是一个非常重要的结构体,它定义了设备与驱动程序之间的匹配规则,确保正确的驱动程序控制正确的设备。
相关推荐
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)