日期:2014-05-16  浏览次数:20643 次

关于LINUX中i2c总线的eeprom驱动程序的问题。
看了好多天的i2c总线设备驱动,看到现在还是一团遭,请大家帮我理理。
我用的是mini2440,内核版本是2.6.32.2。
我分析了内核里的"i2c-s3c2410.c"文件,知道这个是一个平台设备驱动,即i2c总线适配器驱动层文件,主要是把i2c总线注册到了platform-bus上,所以开发板上我们可以看有这两个东西:
一个是:/sys/bus/platform/devices/s3c2440-i2c
另一个是:/sys/bus/platform/drivers/s3c-i2c
另“s3c-i2c”通过是通过找"id_table"里的“s3c2440-i2c”从而能够和 device "match",并且在此文件中可以看到有如下结构体:
static const struct i2c_algorithm s3c24xx_i2c_algorithm = {
.master_xfer = s3c24xx_i2c_xfer,
.functionality = s3c24xx_i2c_func,
}; 这个是对总线下设备的信息传输数据发送,设备驱动层会调用
至此我还没有存在什么疑惑(不对处请帮忙指正)

我在eeprom的应用程序上看到调用的驱动是:/dev/i2c/0 可是就怎么也找不到生成这个驱动对应的文件的?
然后,我在网上看到,说“.master_xfer = s3c24xx_i2c_xfer,”这个是结设备驱动层文件调用的,我全工程搜了下也没找到别的地方有用的?难道不是?
另外,对应板子上eeprom(AT24C08)的驱动到底是哪一个的?“i2c-dev.c”这个文件主要是用来干什么的?
请大家帮下忙分析分析


------解决方案--------------------
我的是 /dev/i2c/0 这个设备节点的,不知这个是在哪个程序里搞生成的?
-------------------
应该是i2c-dev.c生成的,你可以想办法验证一下


能和我说下at24.c和i2c-dev.c的关系吗?
------------------------------------------
at24.c 是内核态的eeprom驱动。这是常见的驱动,也就是你所说的"不是有了一个控制器的驱动(i2c-s3c2410.c)我们再写一个具体的设备驱动程序,然后应用程序就可以调用,就可以了吗?"

i2c-dev.c 比较独特。linux在IO端口、usb i2c上提供用户态的驱动。应用程序配合i2c-dev.c 能够直接读写i2c设备。这种特殊情况下,应用程序也就成了eeprom的驱动。


i2c驱动所用到的read,write,file_operations 是不是就是i2c-dev.c文件里的那些呢?
-------------------------
i2c-dev.c 再次强调,不是一个设备驱动。它把i2c总线控制器驱动的接口提供给用户空间。
你可以通过i2c-dev.c的read,write,在应用层也能写出eeprom rtc 这些i2c设备的驱动


你已经知道一条总线上需要有总线控制器驱动和设备驱动,一共2种驱动
at24.c 属于设备驱动
i2c-dev.c 是特殊的总线控制器驱动