最后说一下i2c和smbus的关系。
首先在一个链接中详细的介绍了smbus协议。http://www.mjmwired.net/kernel/Documentation/i2c/smbus-protocol。
我理解的大意就是,i2c是smbus的一个子集,也就是说凡是支持i2c的设备应该都是支持smbus协议的。
在smbus协议中,定义了几种主机与外设交互的方法。支持i2c协议的设备可以通过这些方法进行交互,当然也可以有自己更加直接的方法。比如说在mini2440上面连接的eeprom,它就支持连续多字节的读和写,做多是16字节。这个操作起来是很方便的。
在i2c-core.c中,实现了i2c_smbus相关的一系列函数。如 i2c_smbus_write_byte、i2c_smbus_read_block_data等。
也就是说,用户操作eeprom既可以通过read、write等,也可以通过ioctl的smbus选项,对i2c设备进行读写。
个人觉得直接通过read、write更加方便。不过通过smbus选项应该是移植性更强。