Linux系统驱动之I2C系统驱动程序模型
2023-04-18 14:42:06 时间
资料下载
coding无法使用浏览器打开,必须用git工具下载:
git clone https://e.coding.net/weidongshan/linux/doc_and_source_for_drivers.git
视频观看
I2C系统驱动程序模型
参考资料:
- Linux内核文档:
Documentationi2cinstantiating-devices.rst
Documentationi2cwriting-clients.rst
- Linux内核驱动程序示例:
drivers/eeprom/at24.c
1. I2C驱动程序的层次
I2C Core就是I2C核心层,它的作用:
- 提供统一的访问函数,比如i2c_transfer、i2c_smbus_xfer等
- 实现
I2C总线-设备-驱动模型
,管理:I2C设备(i2c_client)、I2C设备驱动(i2c_driver)、I2C控制器(i2c_adapter)
2. I2C总线-设备-驱动模型
2.1 i2c_driver
i2c_driver表明能支持哪些设备:
- 使用of_match_table来判断
- 设备树中,某个I2C控制器节点下可以创建I2C设备的节点
- 如果I2C设备节点的compatible属性跟of_match_table的某项兼容,则匹配成功
- i2c_client.name跟某个of_match_table[i].compatible值相同,则匹配成功
- 设备树中,某个I2C控制器节点下可以创建I2C设备的节点
- 使用id_table来判断
- i2c_client.name跟某个id_table[i].name值相同,则匹配成功
i2c_driver跟i2c_client匹配成功后,就调用i2c_driver.probe函数。
2.2 i2c_client
i2c_client表示一个I2C设备,创建i2c_client的方法有4种:
// 创建一个i2c_client, .name = "eeprom", .addr=0x50, .adapter是i2c-3
# echo eeprom 0x50 > /sys/bus/i2c/devices/i2c-3/new_device
// 删除一个i2c_client
# echo 0x50 > /sys/bus/i2c/devices/i2c-3/delete_device
相关文章
- JDK13的新特性:AppCDS详解
- 使用Google登录使用特定域名的电子邮件
- RabbitMQ直接回复。我得到AlreadyClosedException
- 在VSTS中运行Selenium Java测试(Visual Studio Team Service)
- jcmd:JDK14中的调试神器
- 你真的了解java class name吗?
- JDK 14的新特性:switch表达式
- 在每行之间添加空行直到循环结束使用for循环
- 一文弄懂String的所有小秘密
- Excel的VBA - 搜索范围,并连接SQL ADODB记录集在
- 如何查看目录中的所有文件夹以更改excel文件的文件扩展名?
- PriorityQueue和PriorityBlockingQueue
- Excel的VBA - 似乎有点毛病WS命名
- 一文弄懂EnumMap和EnumSet
- SQL Server - 一次插入多个表的记录
- 深入理解HashMap和LinkedHashMap的区别
- 深入理解HashMap和TreeMap的区别
- Copy ArrayList的四种方式
- asList和ArrayList不得不说的故事
- Iterator to list的三种方法