LINUX下的IIC驱动(三)

这篇文章我们具体讨论linux提供的IIC设备的模型,真真进入IIC驱动的开发阶段。对,前面的两篇都是铺垫。

下面首先一张图片来作为引入iic体系结构的开始吧。


这张图也是从网上找到的,哈哈,这次就不评价了。从图上看,大体上可以分为三部分:用户空间、内核空间以及硬件电路部分。下边先简介一下这三部分,用户空间部分,顾名思义就是最上层了,也就是真真的软件开发者关心的地方,对于咱们写驱动的人,能写简单的测试驱动的程序就行了。当然你要是很厉害也是没关系的,哈哈,老板会更爱你了。所以这部分不是咱们关心的部分了。硬件电路部分,简单地说就是怎么把IIC设备连接到cpu了,对于IIC设备来说很简单了,就是直接把设备和cpu的IIC适配器的端口按对应关心连接就行了,当然了需要在两根线上分别上拉一个10k的电阻了,挺简单吧,同样对于咱们来说,只要是能看明白硬件电路就行了。内核部分,是咱们需要在这里介绍的主要部分了,你看上面的图中在内核部分也画了不少的方方框框了。好吧,下边就详细介绍一下吧!

内核部分主要包括:I2C核心、I2C总线驱动以及I2C设备驱动部分。

1.I2C设备驱动

从图上看,这部分位于内核层的最上边,也是和用户空间离的最近的部分。I2C设备驱动是对I2C体系中的IIC设备的实现端,也就是真真的IIC设备驱动了。写过简单的设备驱动的人都知道,用户空间对具体设备的系统调用,往往在设备驱动里都有对应的实现。如果对这个不明白的话,好好先学习学习简单的驱动吧。对,I2C设备驱动就是在用户空间中系统调用部分的在内核中的实现了,I2C设备驱动里会应该包含open、read、write、release等函数。只有把你想读写的意图告诉linux内核了,内核才能操控cpu上具体的适配器工作嘛,所以它在最上面。

I2C设备驱动主要包括了数据结构i2c_driver和i2c_client,在具体设备中需要实现相应的成员函数,先引出一下,后面的文章会详细介绍。

2.I2C总线驱动

说得通俗点,所谓I2C总线驱动,就是对I2C硬件体系中适配器端的驱动了。前面的文章提到过,这部分一般由硬件厂商提供,不如三星的S3C2440、S3C6410等的I2C总线驱动就由三星提供的,就是内核的driver/i2c/buses/i2c-s3c2410.c文件了,当然名字可能有点古老了,还是2410的,但没关系了。又如,在buses目录下,有 davinci平台i2c总线i2c-davinci.c文件等,所以这部分通常不需要咱们写,这使得对驱动的开发得到了进一步的简化。

I2C总线驱动主要包括了适配器的i2c_adapter和algorithm数据结构。

3.I2C核心

要是你看了本系列的第一篇文章,你应该还记得core层吧。没错,IIC的核心主要是把硬件设备和总线连接起来,起到一个过渡的作用。它为设备和总线驱动提供了注册接口、注销方法以及I2C的通信方法等!

写到这里大家应该明白,需要咱们真真做的工作了吧,这个还是很重要的,我当初在这块就晕了好久,还好,现在还能在这里写文章,哈哈!既然知道了咱们需要做的具体的工作,那接下就要与上面提到的四个结构体打交道了,下一篇介绍这四个结构体了!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值