I2C设备树匹配注册详解
需积分: 50 120 浏览量
更新于2024-09-10
收藏 2KB TXT 举报
"本文将详细解释I2C总线在设备树中的匹配注册过程,以及如何通过设备树描述实现I2C设备与驱动程序的连接。"
在Linux内核中,I2C总线(Inter-Integrated Circuit)是一种用于连接微控制器和其他设备的简单两线接口。在设备树中,I2C设备的配置和驱动注册是通过一系列步骤完成的,以确保正确识别和初始化硬件。
首先,我们需要理解设备树在I2C系统中的作用。设备树是一个描述硬件结构的数据结构,它定义了系统中的所有硬件组件及其属性。对于I2C设备,设备树包含每个设备的地址、类型和兼容性信息,这些信息用于匹配相应的驱动程序。
在内核中,`struct bus_type`定义了总线类型,如I2C。在示例中,`i2c_bus_type`结构体包含了I2C总线的各种操作函数,例如`match`(匹配)、`probe`(探测)、`remove`(移除)等。`i2c_device_match`函数用于比较驱动程序的`id_table`与设备的兼容性。
当I2C驱动程序被注册到内核时,通常会调用`i2c_add_driver`或`i2c_register_driver`。这两个函数将驱动程序挂载到I2C总线上,并将驱动的`bus`成员设置为`i2c_bus_type`。这使得驱动可以处理I2C设备的注册、探测和移除。
驱动注册过程由`driver_register`启动,它会调用`bus_add_driver`,然后遍历总线上的每个设备。在`driver_attach`阶段,内核尝试将驱动与设备进行匹配。`bus_for_each_dev`循环遍历设备,`__driver_attach`函数负责实际的匹配和探测过程。
`driver_match_device`函数根据设备树中的兼容性字符串与驱动的`id_table`进行比较。如果设备的`compatible`属性与驱动的`id_table`匹配,`driver_probe_device`将被调用,进而执行`really_probe`,最终调用`driver->probe`,这里是`i2c_device_probe`,驱动的`probe`函数会进一步处理I2C设备的初始化。
`i2c_device_match`是I2C总线类型的匹配函数,它可能使用`of_driver_match_device`和`of_match_device`来比较设备树中的节点与驱动的匹配表。`of_match_node`和`__of_device_is_compatible`则用于检查设备的`compatible`属性是否与驱动的兼容性列表匹配。
总结一下,I2C在设备树下的匹配注册过程大致包括以下步骤:
1. 驱动程序注册到I2C总线。
2. 内核遍历总线上的设备。
3. 比较设备的`compatible`属性与驱动的`id_table`。
4. 调用驱动的`probe`函数,执行设备初始化。
这个过程确保了I2C设备能够在正确的驱动程序下正确工作,实现了驱动程序与硬件的动态绑定,增强了系统的灵活性和可扩展性。
2016-09-17 上传
2017-06-06 上传
2023-06-09 上传
572 浏览量
495 浏览量
535 浏览量
点击了解资源详情
点击了解资源详情
chenjiebing2016
- 粉丝: 8
- 资源: 1
最新资源
- 高清艺术文字图标资源,PNG和ICO格式免费下载
- mui框架HTML5应用界面组件使用示例教程
- Vue.js开发利器:chrome-vue-devtools插件解析
- 掌握ElectronBrowserJS:打造跨平台电子应用
- 前端导师教程:构建与部署社交证明页面
- Java多线程与线程安全在断点续传中的实现
- 免Root一键卸载安卓预装应用教程
- 易语言实现高级表格滚动条完美控制技巧
- 超声波测距尺的源码实现
- 数据可视化与交互:构建易用的数据界面
- 实现Discourse外聘回复自动标记的简易插件
- 链表的头插法与尾插法实现及长度计算
- Playwright与Typescript及Mocha集成:自动化UI测试实践指南
- 128x128像素线性工具图标下载集合
- 易语言安装包程序增强版:智能导入与重复库过滤
- 利用AJAX与Spotify API在Google地图中探索世界音乐排行榜