我已经编写了一个字符驱动程序来使用我的应用程序控制我的嵌入式硬件,在我的驱动程序中,有一个功能可以向连接到我的嵌入式设备的I2C设备发送命令。
在命令行中,我可以将以下代码发送到我的设备:
i2cset -y 0 0x2c 0x00 0x05
我想在驱动程序的内核空间中做同样的事情,但是我没有找到一个示例,我得到的只是用户空间,我该如何在内核空间中做这件事?
编辑:
[我知道使用“ i2c_master_send”或“ i2c_smbus_read_byte”函数可以将数据发送到i2c设备,但是此函数得到的结构称为“ i2c_client”,我不知道应该怎么填充这种结构发送数据。这可能真的很愚蠢,但我无法弄清楚如何填充此结构。
#define VOL1_CHIP_ADDRESS 0x2c
#define VOL1_DATA_ADDRESS 0
struct i2c_client *clientstr;
struct file * fp;
...
mm_segment_t oldfs;
oldfs = get_fs();
set_fs(KERNEL_DS);
fp = filp_open("/dev/i2c-0",O_RDWR,0);
clientstr = (struct i2c_client *)fp->private_data;
clientstr->addr=VOL1_CHIP_ADDRESS;
i2c_smbus_write_byte_data(clientstr,VOL1_DATA_ADDRESS,0x05);
filp_close(fp,NULL);
set_fs(oldfs);