- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
声明
你可以自由地随意修改本文档的任何文字内容及图表,但是如果你在自己的文档中以任何形式直接引用了本文档的任何原有文字或图表并希望发布你的文档,那么你也得保证让所有得到你的文档的人同时享有你曾经享有过的权利。
i2c源代码情景分析(Beta2)
作者在上的ID为shrek2
欢迎补充,欢迎批评指正!
第1章 i2c核心数据结构之间的关系 4
第2章 i2c-core.c的初始化 10
i2c_init函数 10
i2cproc_init函数 11
第3章 安装、卸载pxa255的i2c适配器驱动程序 13
pxa_i2c数据结构 13
i2c_adap_pxa_init函数 15
i2c_add_adapter函数 16
i2c_del_adapter函数 18
i2c_adap_pxa_exit函数 20
第4章 安装、卸载ltc3445驱动程序 21
ltc3445_init函数 21
i2c_add_driver函数 22
i2c_probe函数 23
i2c_check_functionality函数 26
i2c_smbus_xfer函数 27
i2c_transfer函数 29
ltc3445_detect_client函数 30
i2c_attach_client函数 31
ltc3445_cleanup函数 32
i2c_del_driver函数 33
ltc3445_detach_client函数 35
i2c_detach_client函数 35
第5章 与pxa255的i2c适配器相关的代码 37
i2c_pxa_reset函数 37
i2c_pxa_abort函数 38
i2c_pxa_xfer函数 38
i2c_pxa_do_xfer函数 39
i2c_pxa_start_message函数 41
i2c_pxa_handler函数 42
i2c_pxa_irq_txempty函数 42
i2c_pxa_irq_rxfull函数 47
第6章 i2c-dev的初始化 49
i2c_dev_init函数 49
i2cdev_attach_adapter函数 50
第7章 i2c框架提供的设备访问方法 52
i2cdev_open函数 52
i2cdev_ioctl函数 53
i2cdev_read函数 54
i2c_master_recv函数 55
对i2cdev_read和i2c_master_recv的修改 56
i2cdev_release函数 59
第8章 编写i2c设备驱动程序模块的方法 61
第9章 用户进程访问i2c设备的步骤 64
讨论和总结 65
i2c操作中的同步问题 65
总结各个模块初始化函数的作用 65
对i2c框架代码的修改 66
有关i2c设备私有数据结构的讨论 68
遗留的问题 68
(注意:本文档中的源代码以i2c-2.9.1包及.uk上下载的pxa的i2c适配器的补丁2360-2为准!)第1章 i2c核心数据结构之间的关系
i2c总线适配器(adapter)就是一条i2c总线的控制器,在物理连接上若干i2c设备并联于该i2c总线的SCL和SDA线上,如下图所示:
那么相应软件数据结构的设计、数据结构之间的关系就至少应该描述硬件物理连接的这种组织关系。Linux的i2c框架中各个部分的关系如下图所示:
内核中i2c相关代码可以分为三个层次:
i2c框架:i2c.h和i2c-core.c为i2c框架的主体,提供了核心数据结构的定义、i2c适配器驱动和设备驱动的注册、注销管理,i2c通信方法上层的、与具体适配器无关的代码、检测设备地址的上层代码等;i2c-dev.c用于创建i2c适配器的/dev/i2c/%d设备节点,提供i2c设备访问方法等。
i2c总线适配器驱动:定义描述具体i2c总线适配器的i2c_adapter数据结构、实现在具体i2c适配器上的i2c总线通信方法,并由i2c_algorithm数据结构进行描述。
i2c设备驱动:定义描述具体设备的i2c_client和可能的私有数据结构、借助i2c框架的i2c_probe函数实现注册设备的attach_adapter方法、提供设备可能使用的地址范围、以及设备地址检测成功后创建i2c_client数据结构的回调函数。
下面介绍i2c各核心数据结构的定义和它们之间的连接关系。
一个i2c设备的驱动程序由i2c_driver数据结构描述,定义于include/linux/i2c.h:
struct i2c_driver {
char name[32];
int id;
unsigned int flags;
int (*attach_adapter)(struct i2c_adapter *);
int
文档评论(0)