感谢大伙们。几个小时前我已经找到了想要的东西。因此,正如我所看到的,有三种类型的驱动程序。应该将其中一个插入内核,然后需要重建内核才能使用它们。您还可以通过
sysfsusing设备属性使用驱动程序(它们显示在中
/sys/bus/i2c/driver/your_driver/)。第三,我的类型-
看起来像字符设备的驱动程序。实际上,您可以将它们结合起来。
因此,如果要使用最后一种类型的设备,将很难找到正确的示例,因为几乎所有示例都专门针对前两种类型的驱动程序。无论如何,如果要创建字符设备,则需要从
file_operations结构中描述功能。但是所有函数都像
i2c_transfer,
i2c_smbus_read_byte。等(完整列表)为必填项
struct i2c_adapter或
structi2c_client。还有两个问题,如何到达那里的结构,以及如何将驱动程序连接到适当的i2c总线,例如i2c-2?
因此,有是没有描述的功能在这里:
i2c_get_adapter。作为参数,您需要传递i2c总线号。它返回到
i2c_adapter结构的链接。该
i2c_client结构可以用得到
i2c_new_dummy的功能传球
i2c_adapter和从地址到它作为参数。
在此之后,你可以使用的功能,例如
i2c_transfer,
i2c_smbus_read_byte等等。最后,你可以描述
file_operations的结构功能,并释放驱动程序,代表您的I2C设备,而无需使用的sysfs和重建你的内核。
结果代码如下:
u8 ret; struct i2c_client * my_client; struct i2c_adapter * my_adap = i2c_get_adapter(1); // 1 means i2c-1 busmy_client = i2c_new_dummy (my_adap, 0x69); // 0x69 - slave address on i2c busi2c_smbus_write_byte(my_client, 0x0f); ret = i2c_smbus_read_byte(my_client);
您可以在函数中的file_operations结构中直接使用此代码。
希望此信息对像我这样的初学者有用。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)