Linux IIC驱动框架理解

来源:互联网 发布:淘宝店铺信誉度怎么提升的 编辑:程序博客网 时间:2024/04/29 00:43

看了一周的Linux IIC驱动框架,大概地了解了各个部分的功能,也大概知道了如果自己写驱动的话,需要从哪写起,只是还差了实践这一步,也是最重要的一步,可是开发板目前还没摸透,想着还是先总结一下吧,因为接下来要学习DMA了。

想到哪写到哪吧,就不再参考别人的了,纯粹是按照目前脑子里装的东西写。

首先,需要知道IIC驱动包括总线驱动和设备驱动。

其中总线驱动包括控制器驱动和相应的算法驱动,控制器驱动的作用是产生符合IIC协议的信号,否则就没有办法进行通信,算法驱动也很重要,规定了通信的算法,传输数据的方式等。分别涉及到两个结构,i2c_adapter和i2c_algorithm,分别对应IIC控制器驱动和IIC算法。

控制器最终是与IIC设备进行通信的,因此还需要设备驱动。包括两个重要的结构i2c_driver和i2c_client,其中i2c_driver对应着设备驱动,i2c_client对着一个具体的设备。应用程序操作设备就是通过i2c_client。

另外,还有一个很重要的文件i2c-core.c,它起着承上启下的作用,提供接口函数,负责注册和注销i2c_adapter、i2c_driver和i2c_client。还提供了函数i2c_master_send、i2c_master_recv,这两个函数都调用i2c_transfer,最终调用i2c_algorithm中的i2c_xfer函数,它定义着如何传输数据。有些驱动开发者需要自己来写xfer函数。

还有文件i2c-dev.c,它提供了设备的驱动i2c_driver,以及访问设备的file_operations的函数,如open、read、write、ioctl等,应用程序可以直接调用这些函数来对设备进行操作。一般使用ioctl最多,read和write不太用。因为可以通过ioctl设置从设备地址、设置读、写等。而read和write格式固定,有些设备并不适用。对于一般的设备,i2c-dev.c提供的驱动就足够了,但是有些设备就必须自己来写驱动,因为i2c-dev.c只是针对一般的设备,有些不适用。不过只需要自己来写i2c_driver,不需要写file_operations的函数,因为i2c-dev.c已经提供了。其实,大部分情况下,都是需要自己来写i2c_driver的。

我觉得应该是,对于不同的具体器件,一般只需要自己来写i2c_driver,有些需要自己来写控制器驱动。到底哪些需要,我还不知道。


0 0