到达"写"和" ioctl"里面的fops

时间:2016-10-08 12:35:38

标签: linux linux-kernel kernel linux-device-driver

我正在查看linux源代码,并且我试图弄清楚在设备节点上执行writeioctl时所采用的路径。我想知道如何调用fops结构中的函数指针的确切位置。我在源代码中找不到对fops结构的任何引用。

有人能给我更多关于此的信息/指出我正确的方向吗?

1 个答案:

答案 0 :(得分:1)

这取决于具体的子系统。以文件系统为例,我们可以检查任何不同的文件系统。让我们来看FAT,因为那是我最近一直在研究的那个。它的实现位于fs/fat/目录下。在该目录中运行git grep file_operations可以为我们提供我们正在寻找的内容:

$ git grep file_operations
dir.c:const struct file_operations fat_dir_operations = {
fat.h:extern const struct file_operations fat_dir_operations;
fat.h:extern const struct file_operations fat_file_operations;
file.c:const struct file_operations fat_file_operations = {
inode.c:                inode->i_fop = &fat_file_operations;

因此file_operations有两个定义 - 一个在dir.c中称为fat_dir_operations,另一个在file.c中称为fat_file_operations。这些名字是不言自明的。在这些文件中,您可以看到readwriteunlocked_ioctl的实现(这是不支持BKL锁定的ioctl)。

同样,您可以file_operationsdrivers/下的不同驱动程序寻找$scope.array.push(angular.toJson(obj)); 。许多司机实施它们。