Linux2.6.37 I2C驱动框架(四)
来源:互联网 发布:淘宝卖家怎么进入 编辑:程序博客网 时间:2024/06/06 04:31
前面说了一大堆,估计早就看晕了,还是用图来说明下问题。
首先,系统为I2C构造了一条I2C总线--i2c_bus_type。注意这里说的总线是软件层面上的,不是硬件上存在的SCL和SDA组成的I2C总线。一条总线有链表:bus.p.kilist_device和bus.p.klist_driver。这对任何总线都是成立的,这也是Linux2.6的设备--总线--驱动模型。当我们调用i2c_register_adapter是会调用device_register(adap.dev)就是将内嵌i2c_adapter的struct dev注册到系统,本质就是将i2c_adapter.dev连入了总线的bus.p.klist_device链表了。同时dev.bus也会指向i2c_bus_type。因此,当我们注册多个i2c_adapter到系统中时就会出现下面左边所示,最终会通过一条双链表连接起来。同理,我们调用i2c_register_driver将i2c_driver注册到系统时会调用driver_register将i2c_driver.driver连入bus.p.klist_driver链表中,注册多个i2c_driver时形成了一条含多个i2c_driver的双链表,同时每个i2c_driver.driver.bus会指向i2c_bus_type。在调用driver_register时还会做一件事,就是将i2c_driver.id_table中所支持的i2c设备的名字与系统中存在的i2c_client.name进行匹配,如果名字相同就说明该驱动支持该i2c设备,然后i2c_driver.probe函数就会被调用。而probe中就可以字符设备那一套东西来注册字符设备驱动,创建设备文件等等。。。
当我们调用i2c_new_device创建i2c设备时也会调用device_register,说明i2c_client.dev最终也会连接到总线设备这边这条链表上来。而且i2c_client.adap会指向其物理上连接的那个i2c_adapter。对于新版的驱动有多种实现方法:第一种是在bsp文件中静态定义关于i2c设备的i2c_board_info结构信息(我们很清楚这个设备的名字及该设备在总线的地址),这样在调用i2c_register_adapter时会调用i2c_scan_board_info时会创建i2c_client并将其连接到总线的设备链表上。因此当有i2c设备驱动注册到系统中来时调用driver_register时会用驱动的id_table中的设备名与总线设备链表中每个i2c_client.name进行匹配,成功后调用驱动的probe方法。
- Linux2.6.37 I2C驱动框架(四)
- Linux2.6.37 I2C驱动框架分析(一)
- Linux2.6.37 I2C驱动框架分析(二)
- Linux2.6.37 I2C驱动框架分析(三)
- Linux2.6.37 I2C驱动框架分析(五)
- Linux2.6.37 I2C驱动框架分析(六)
- i2c驱动--驱动框架
- I2C设备驱动(三)--linux i2c驱动框架
- I2C设备驱动(四)-- 调试问题
- linux驱动:i2c驱动(四)流程图之注册驱动
- I2C驱动框架
- i2c驱动框架
- i2c 驱动四:sysfs文件系统
- i2c 驱动四:sysfs文件系统
- linux2.6.12自带的i2c驱动的应用
- PowerPC + Linux2.6.25平台下的I2C驱动架构分析
- PowerPC + Linux2.6.25平台下的I2C驱动架构分析
- 深入源代码设计i2c驱动@linux2.6.32.2
- WWDC
- Js和C#中的字符串编码解码
- AFX_NOVTABLE与__declspec(novtable)
- busybox inittab文件分析
- 编程能力的四种境界
- Linux2.6.37 I2C驱动框架(四)
- 构造函数中调用虚函数?
- 为myeclipse添加多个tomcat
- Oracle Timezone
- dispatch_once 只执行一次的方法
- Linux2.6.37 I2C驱动框架分析(五)
- Struts框架面试题
- samba源代码安装
- android开源社区