S3C2440驱动简析——I2C驱动(1)

本文探讨Linux内核中I2C驱动的数据结构,包括i2c_driver、i2c_client和i2c_adapter。分析了驱动注册、注销流程,以及i2c总线的互斥访问机制,为理解I2C驱动代码打下基础。
摘要由CSDN通过智能技术生成

      这次来研究内核自带I2C驱动的代码,在深入代码之前,首先简单了解一下I2C核心数据结构的相互关系。由此来展开,也许能够对驱动代码有更好地理解。软件数据结构的设计、数据结构之间的关系就至少应该描述硬件物理连接的这种组织关系。Linux的i2c 框架中各个部分的关系如下图所示:

 

 

 

内核中 i2c 相关代码可以分为三个层次:
1. i2c 框架:i2c.h 和i2c-core.c 为i2c 框架的主体,提供了核心数据结构的定义、i2c 适配器驱动和设备驱动的注册、注销管理,i2c 通信方法上层的、与具体适配器无关的代码、检测设备地址的上层代码等;i2c-dev.c 用于创建i2c 适配器的/dev/i2c/%d 设备节点,提供i2c 设备访问方法等。
2. i2c 总线适配器驱动:定义描述具体i2c 总线适配器的i2c_adapter 数据结构、实现在具体i2c 适配器上的i2c 总线通信方法,并由i2c_algorithm 数据结构进行描述。
3. i2c 设备驱动:定义描述具体设备的i2c_client 和可能的私有数据结构、借助i2c 框架的i2c_probe 函数实现注册设备的attach_adapter 方法、提供设备可能使用的地址范围、以及设备地址检测成功后创建i2c_client 数据结构的回调函数。

 

 

I2C主要数据结构如下:

 

1. 一个 i2c 设备的驱动程序由i2c_driver 数据结构描述,定义于include/linux/i2c.h:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值