求教I2c问题,急!谢谢
我最近在做2.6.20内核下的IIC的EEPROM,遇到了很多不解。
问题如下:
通过在网上查找相关资料,了解到了在内核./driver/i2c/中有一个i2c-dev.c文件,它实现实现了I2C适配器设备文件的功能,每一个I2C适配器都被分配一个设备。应用程序通过文件名并使用文件操作接口open()、write()、read()、ioctl()和close()等来访问这个设备。
但是i2c-dev.c并没有针对特定的设备而设计,只是提供了通用的read()、write()和ioctl()等接口,应用层可以借用这些接口访问挂接在适配器上的I2C设备的存储空间或寄存器并控制I2C设备的工作方式,而对于EEPROM设备却不能直接使用来读写。
于是我找了./driver/i2c/chip/下的eeprom.c文件,想直接通过这个驱动文件操作eeprom设备,但是我发现这个设备并没有register_chrdev()函数,也没有open(),release()等接口,请问如果我在应用层直接用这个驱动该怎么访问设备。也就是说eeprom.c和i2c-dev.c的关系是怎么样的?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(9)
是这样的,在驱动层,也可以分为多个层次。他的上层是i2c接口,及i2c驱动程序,i2c的下层才是eeprom,所以,你要操作eeprom,必须通过i2c来实现,利用i2c来达到读写的目的。这也是Linux驱动更加灵活的一个表现:i2c不仅可以外接eeprom,当然还可以接其它设备,这样就抽象出一个接口,你要挂什么没关系,但你可以借助i2c接口,实现你自己的那个设备驱动及相关功能就可以了。
Linux下这样的例子很多,比如TTY,USB等等
往i2c上写数据是否有一定的结构要求?
比如I2c的具体设备,入eeprom, lm75等,在应用层可以以 open /dev/i2c方式打开iic设备,通过ioctl传递不同的设备地址去操作eeprom 和lm75,但是我希望将eeprom 和lm75的驱动放在底层去做,在linux的内核里也有相应的eeprom.c 和lm75.c,这些也能编译出.ko文件,但是我不清楚在应用层如何调用这些设备,也不知道linux内核提供这些源文件是做什么用的,是不是需要改动这里的eeprom.c和lm75.c,给他们注册一个字符设备或是misc 设备,再定义fops操作,应用层才可以操作这些设备呢? 不知道我表达清楚没有
遵循驱动程序的规范,当然还有i2c本身的特性。
斑竹能否说得清晰些,本人已经搞了几天了,看了不少的书,现在是越看越糊涂,其实应该是很简单的,但是就是没搞清楚这个套路,希望指点
大致思想领会了,实现细节就靠你自己去钻研代码了
建议楼主看看essential linux device driver的
Chapter 8. The Inter-Integrated Circuit Protocol
这有点资料楼主参考下
http://linux.chinaunix.net/bbs/thread-1044611-1-1.html