Linux内核中的I2C驱动程序剖析

5星 · 超过95%的资源 需积分: 15 114 下载量 136 浏览量 更新于2024-07-27 1 收藏 493KB DOC 举报
i2c源代码情景分析 这篇文章深入剖析了Linux内核中的i2c子系统,涵盖了i2c核心数据结构、驱动程序的安装与卸载、适配器的操作以及用户空间对i2c设备的访问方法。作者通过详细的章节划分,逐步解析了关键的函数和流程。 第1章介绍了i2c核心数据结构之间的关系,这些结构是驱动程序与硬件交互的基础,包括i2c_adapter、i2c_client和i2c_msg等,它们用于描述i2c总线、连接到总线的设备以及传输消息。 第2章关注i2c-core.c的初始化过程,包括i2c_init函数和i2cproc_init函数。i2c_init是整个i2c子系统的初始化入口,负责设置全局变量和注册必要的回调函数;i2cproc_init则用于在/proc文件系统下创建接口,使用户空间能够查看i2c状态。 第3章讲解了如何安装和卸载pxa255的i2c适配器驱动程序。pxa_i2c数据结构定义了适配器的特性,而i2c_adap_pxa_init、i2c_add_adapter和i2c_del_adapter等函数分别用于初始化、添加和删除适配器。i2c_adap_pxa_exit函数用于完成驱动的清理工作。 第4章详细阐述了ltc3445驱动程序的安装与卸载,包括ltc3445_init、i2c_add_driver和i2c_del_driver等。此外,还讨论了i2c_probe函数来检测设备的存在,以及i2c_smbus_xfer、i2c_transfer等用于与设备通信的函数。 第5章涉及与pxa255 i2c适配器相关的底层驱动代码,如i2c_pxa_reset和i2c_pxa_abort用于复位和中断处理,i2c_pxa_xfer处理实际的数据传输,而i2c_pxa_start_message和i2c_pxa_irq_rxfull等功能函数则负责开始消息传输和接收中断的处理。 第6章介绍了i2c-dev的初始化,i2c_dev_init函数使得i2c设备能够被用户空间通过字符设备接口访问,i2cdev_attach_adapter函数则将i2c适配器绑定到i2c-dev框架。 第7章探讨了i2c框架提供的设备访问方法,如i2cdev_open、i2cdev_ioctl和i2cdev_read等,这些函数允许用户进程通过标准的文件操作接口与i2c设备进行交互。 第8章和第9章分别讲述了编写i2c设备驱动程序模块的方法和用户进程访问i2c设备的步骤。最后,文章讨论了同步问题、各模块初始化函数的作用、i2c框架代码的修改建议,以及关于i2c设备私有数据结构的设计,并提出了尚待解决的问题。 本文档提供了对Linux内核i2c子系统实现的深度解析,对于理解和开发基于i2c的嵌入式系统驱动程序具有重要参考价值。