我试图弄清楚驱动程序中的文件操作是如何工作的。我知道有几个文件操作,但是这些操作的函数是用几个参数调用的,而操作本身是没有任何定义的。
所以如果我有这个 -
static const struct file_operations proc_myled_operations = {
.open = proc_myled_open,
.read = seq_read,
.write = proc_myled_write,
.llseek = seq_lseek,
.release = single_release
};
现在我知道内核级驱动程序只能作为来自用户应用程序的文件进行访问。这是一个嵌入式系统,所以我有一些 LED,我可以通过写入它们的内存映射寄存器来打开它们。
因此,当我打开一个 LED 时,将执行 .write 或“proc_myled_write”调用,我可以通过使用 fopen 打开此文件然后使用 fputs 写入它来执行此操作。但是如果 .write 被映射为“proc_myled_write 并且这个函数有这样的参数 -
static ssize_t proc_myled_write(struct file *file, const char __user * buf,
size_t count, loff_t * ppos)
争论会发生什么?没有对带有这些参数的上述函数的函数调用。我已经在几个驱动程序中看到了这一点。我只使用了这个,因为它是一个简单的例子。文件操作如何映射到这些函数?例如,用户空间中的“写入”如何跟踪驱动程序中的写入?
谢谢你。