linux i2c 驱动 一点点感想,拿来与大家分享

i2c core---------------------------------------核心提供了I2C总线驱动和设备驱动的注册,注销方法,I2C通信方法(”algorithm”)上层的,与具体适配器无关的代码以及探测设备,检测设备地址的上层代码等。这部分一般是linux源码提供给我们的。我的理解是这里面包含了对i2c驱动的传输协议的封装,比如transfer()等,用户调用的话也是直接调用者里面的函数,这里面的函数会再去调用我们要写的的具体的i2c设备驱动里面的函数(这个说来就话长了,你可以慢慢进去看了,i2c-core.c)。

i2c client -------------------------------------这是我们要实现的具体的某个设备的驱动,比如说遭遇过的i2c接口的温湿度传感器,lcd等(这里我把自己当做是这些设备生产商所雇佣的驱动工程师= =)。linux给我们提供了一个叫i2c-device的文件,我们可以以那个文件为基础实现一个驱动,但是那个文件不是很全面,我见过的驱动里面大多都不使用这个。

i2c adapter----------------------------------总线驱动是对I2C硬件体系结构中适配器端的实现,适配器可由CPU控制,很多集成在了soc内部,所以很多是作为platform-driver。这里是另一部分我们需要实现的(假设我们是三星soc的驱动工程师,当s3c2440出来的时候 你就需要位集成在他里面的i2c-controller做一个platform driver).

如果你仅仅跟我一样是个嵌入式玩家,如果你购买了一个i2c接口的设备,那生产这个设备的厂商多半已经随机附送了这个设备的驱动,你要做的就是把这个驱动文件加载到内核里。这里面你需要做的工作就是位这个I2c设备申请必要的资源(应该会有一个叫mach****的文件里面做申请)。


看了蛮久的Linux驱动方面的文章,有时候感觉是举步维艰,自己反复思考了很久,我想原因是因为你想去了解一个完全陌生的领域,而这个东西你甚至完全没有用过,到最后越走越迷茫。我觉得你应该这样一步步走

1、去了解你想要知道的驱动所使用的协议。比如i2c ,uart各有几根线?要做怎样的设置?如何发送开始截止信号?如何传输数据?

2、去做一个应用。比如已经有一个加载好的i2c驱动,去调用i2c提供的接口实现一个功能。比如说用i2c lcd去做一个显示移动文字的应用,你会对这个有很好的体验。

3、去了解某驱动的框架。比如说上面我列出来的i2c的框架。想明白这些问题花了我好长时间,but it is  worth,我觉得这也是理解这个问题的关键。

4、去了解驱动能够加载并工作的步骤。一般是先加载总线驱动,然后加载设备和设备驱动,总线驱动会有match他们的函数,当device可以match到driver或者反过来,那他们就可以开始工作了。

5、想明白你想做什么。你是要懂linux是如何实现驱动机制的?还是你是某芯片厂商,你需要做一个adapter?或者你是一个设备厂商,需要做某产品的驱动?如果你是第一种那你需要从头到尾来来看了,而后两者你看的东西就很明白了,或许只要一个文件就够了。

我想我是第一种。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值