linux下i2c设备驱动程序,Linux系统IIC驱动程序 <二> I2C设备驱动

上次谈了Linux 下I2C的框架,这次专门以MPU9250驱动为例,学习I2C设备驱动。

之前谈过,

I2C设备驱动有两种模式:Adapter模式和Probe模式。前者在新kernel版本中已经不支持了,后者则是推荐方式。这次我们就以MPU9250

IIC Driver 为例,分析Probe模式的I2C driver.

因为具体分析的是Nvidia

Tegra平台,所以板目录在kernel/arch/arm/mach-tegra/

具体文件为:board-ardbeg-sensors.c

1. 从头开始:

ardbeg_sensors_init()中,调用了mpuirq_init().

这里面做了一个准备工作A。之后调用了:i2c_register_board_info()

1.0: i2c_register_board_info()分析:

int __init i2c_register_board_info(int

busnum, struct i2c_board_info const

*info, unsigned len)

静态的声明I2C Device。

busnum: Bus标识符,device将要挂载的Bus标识符。

info: i2c device 描述符vector。

len: vector中描述符的数量。

1.0.1: 内容填充:

对于vector中的每个描述符,创建一个i2c_devinfo. 并将其加入链表:__i2c_board_list

1.0.2:链表中内容分析:

1.0.3: 什么时候用到链表:

static void i2c_scan_static_board_info(struct i2c_adapter

*adapter)中,

如果__i2c_board_list 中的某一项所标识的BUS id

与参数给定的adapter所代表的bus是同一个,则调用:i2c_new_device(adapter,

&devinfo->board_info)来真正的创建Device--(struct

i2c_client,

正如我们所说,I2C设备对应的概念是:i2c_client)

而i2c_scan_static_board_info()被谁调用呢?正是:i2c_register_adapter(struct

i2c_adapter *adap),其实最终由:i2c_add_adapter()调用。

也就是说,当增加一个新的I2C BUS

时,它会从__i2c_board_list链表中把所有内容查看一遍,看哪些是挂载在自己身上的,如果有,就给它创建Device

(i2c_client). 这个i2c_client,再通过id_table. 与i2c_driver相连接。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
开发 Linux I2C 驱动框架程序的一般流程如下: 1. 确定需求:了解需要开发的 I2C 设备的功能和规格,包括数据传输速率、寄存器地址、传输协议等。 2. 准备开发环境:确保你的开发环境中已经安装了适当的 Linux 内核版本及相关工具链。 3. 查找文档:查阅相关的文档和规范,如 Linux 内核文档、设备数据手册等,以便了解设备的注册方式、操作方法和传输协议。 4. 创建驱动模块:在 Linux 内核源码树中创建一个新的驱动模块目录,包括设备的相关文件和 Makefile。 5. 编写驱动代码:根据设备的规格和需求,编写相应的驱动代码,包括设备的初始化、读写数据等功能。 6. 实现 I2C 设备注册:在驱动代码中实现 I2C 设备的注册函数,通过调用相关的内核函数将设备注册到 I2C系统中。 7. 实现设备控制接口:定义设备的控制接口,如读写数据、配置参数等,并在驱动代码中实现这些接口。 8. 编译和加载驱动:在内核源码树下编译驱动模块,并使用 insmod 命令加载驱动模块到内核中。 9. 测试驱动功能:编写测试代码,验证驱动的功能和性能,确保驱动正常工作。 10. 优化和调试:根据测试结果进行优化和调试,修复可能存在的问题和 bug。 11. 文档编写:编写相应的文档,包括驱动的使用方法、接口说明等,以便其他开发者使用和维护。 以上是一般的开发流程,具体的实现细节和步骤可能会因具体的设备和需求而有所不同。在开发过程中,可以参考 Linux 内核源码中的其他 I2C 设备驱动代码,以及官方提供的文档和示例代码。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值