linux内核的I2C子系统详解3——i2c-core.c初步分析、I2C总线的匹配机制
以下内容源于朱有鹏《物联网大讲堂》课程的学习,如有侵权,请告知删除。
5、i2c-core.c初步分析
(1)smbus代码略过:smbus是基于I2C总线发展出来的。(2)模块加载和卸载
- 关键是bus_register(&i2c_bus_type),从中可以知道匹配机制;
6、I2C总线的匹配机制
(1)match函数
(2)probe函数
(3)总结
- I2C总线上有2条分支:i2c_client链和i2c_driver链;
- 当任何一个driver或者client去注册时,I2C总线都会调用match函数去对client.name和driver.id_table.name进行循环匹配。
- 如果driver.id_table中所有的id都匹配不上则说明client并没有找到一个对应的driver;
- 如果匹配上了则标明client和driver是适用的,那么I2C总线会调用自身的probe函数,自身的probe函数又会调用driver中提供的probe函数,driver中的probe函数会对设备进行硬件初始化和后续工作。
7、核心层开放给其他部分的注册接口
(1)i2c_add_adapter/i2c_add_numbered_adapter:注册adapter的,比如i2c-s3c2410.c中就使用此函数来注册一个adapter。(2)i2c_add_driver:注册driver的
(3)i2c_new_device:注册client的