你有你的文件中的每個調用一個函數:
但是,所有的功能都一個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