你有你的文件中的每个调用一个函数:
但是,所有的功能都一个struct file
作为参数。
该结构 - 包含有关文件的信息 - 由模块在内核中加载时创建。 (请参阅static int __init cfake_init_module(void);
函数)。
最后,我想有两个字符设备(一个用于I2C通信,另一个用于SPI)
你可以有东西做到这样:
在这个例子中你给,每个文件创建一个minor device number
(见cfake_construct_device()
)。您可以使用此编号来选择设备是SPI还是I2C设备。
你read
功能可能看起来像:
ssize_t
cfake_read(struct file *filp, char __user *buf, size_t count,
loff_t *f_pos)
{
/* reading minor device number */
unsigned int mn = iminor(filp->f_inode);
/* select specialized function to use */
if (0 == mn)
return cfake_read_i2c(filp, buf, count, f_pos);
else
return cfake_read_spi(filp, buf, count, f_pos);
}
说,我不认为这是有一个模块(除非这两个设备必须共享数据)在两个不同的协议是个好主意:在模块崩溃,您将失去两个通信通道,并且模块将难以调试。
感谢您的提示,我知道这不是一个好的理想,但我有一个FPGA在SPI通信,我需要共享数据到一个摄像头,在I2C通信。 – PierreOlivier