【发布时间】:2012-01-28 14:55:06
【问题描述】:
在编写内核模块/驱动程序时,大多数时候会初始化一些结构以指向某些特定功能。作为这方面的初学者,有人可以解释一下它的重要性。
我在编写字符设备驱动程序时看到了struct file_operations
我还发现,即使声明了函数,它们也并不总是被实现。任何人都可以提供帮助。例如,在内核源代码中:kernel/dma.c,尽管
static const struct file_operations proc_dma_operations = {
.open = proc_dma_open,
.read = seq_read,
.llseek = seq_lseek,
.release = single_release,
};
已定义,仅实现 proc_dma_open。
【问题讨论】:
-
不,其他函数(seq_read、seq_lseek 和 single_release)只是在别处实现。
-
@fge 我在内核源代码的 dma.c、dma.h 或 seq_file.h 中找不到
seq_read、single_release、seq_lseek。 `` -
这个例子有点“奇怪”。通常,在填充此类结构时,您会使用指向函数的指针来填充它们。在这里,您使用了一些“标准”函数(seq_xxx,在 fs/seq_file.c 中实现)和您自己的函数(proc_dma_open)。
标签: linux linux-kernel linux-device-driver kernel kernel-module