Linux驱动开发、18-I2C子系统之用户态驱动设计

本文深入探讨Linux系统下的I2C子系统,包括I2C核心、i2c-dev通用驱动及用户态驱动设计。通过i2c-dev,用户态驱动可以直接与I2C设备交互,涉及设备文件、ioctl调用和消息结构的构造。示例展示了如何编写用户态驱动以操作I2C设备,如E2PROM,并分析了可能出现的通信问题。
摘要由CSDN通过智能技术生成

Linux 系统下的I2C子系统

子系统架构

 

1. I2C核心
I2C 总线和 I2C 设备驱动的中间枢纽,它提供了I2C 总线驱动和设备驱动的注册、注销方法等。

2. i2c-dev

通用驱动
2.I2C控制器(适配器)驱动

I2C 控制器驱动的实现,属于总线驱动程序,通常由适配器驱动(i2c_adapter)adapter.algo成员(算法驱动程序;控制器(适配器)可在CPU外部,也可以集成在 CPU 内部
3. I2C设备驱动
I2C从设备的驱动实现,如AT24C02的驱动

 

i2c-dev 允许在用户态模式下实现I2C客户驱动程序。

 

图解:

通路1:用户程序直接通过/sys/dev设备文件通过I2C设备驱动直接访问i2c设备.

通路2:直接使用用户态驱动通过i2c-dev(通用驱动程序),经过I2C核心控制适配器(struct i2c_adapter)驱动和算法(struct i2c_algorithm )驱动再控制I2C设备

 

通路2追踪分析:利用i2c-dev通用驱动开发用户态驱动

 

用户态驱动经过 i2c-dev,在这里面做了些什么?

 

-------------------------------------------i2c-dev------------------------------------------------------------------------

 

在模块初始化时除了注册通用字符设备外,使用以下语句:

/* Keep track of adapters which will be added or removed later */

res = bus_register_notifier(&i2c_bus_type, &i2cdev_notifier);

 

/* Bind to already existing adapters right away */

i2c_for_each_dev(NULL, i2cdev_attach_adapter);

主要看的是第二条,绑定已经存在的控制器(适配器),在这里面偷偷的干了啥

相关结构:

struct i2c_adapter *adap; /*

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值