如何为proc_dir_entry定义inode_operation?

时间:2016-12-22 17:17:13

标签: c linux kernel procfs

我正在尝试使用 Linux内核模块编程指南

学习如何编写Linux内核模块

但是我意识到本书中的例子已经过时了。 以下是本书中的一个例子。

static struct proc_dir_entry *Our_Proc_File;
static int module_permission(struct inode *inode, int op, struct nameidata *nd)
{

    if (op == 4 || (op == 2 && current−>euid == 0))
            return 0;
    return −EACCES;
}
static struct inode_operations Inode_Ops_4_Our_Proc_File = {
    .permission = module_permission
}
static struct file_operations File_Ops_4_Our_Proc_File = {
    // ... 
};

int init_module()
{
    Our_Proc_File = create_proc_entry(PROC_ENTRY_FILENAME, 0644, NULL);
    // above line should use proc_create() 
    if (Our_Proc_File == NULL) {
            remove_proc_entry(PROC_ENTRY_FILENAME, &proc_root);
            return −ENOMEM;
    }

    Our_Proc_File−>owner = THIS_MODULE;
    Our_Proc_File−>proc_iops = &Inode_Ops_4_Our_Proc_File;
    Our_Proc_File−>proc_fops = &File_Ops_4_Our_Proc_File;
}

当我查看源代码时,我发现{4.}}已从Linux 4.x中的proc_iops结构中删除

那么我应该如何为proc_dir_entry

定义inode_operations

1 个答案:

答案 0 :(得分:2)

/proc文件系统的一般用途是让内核及其模块能够使用" content"轻松创建文件。为这些文件的目录生成。可以使用proc_create()和朋友来做到这一点。

至于inode和dentries,它们是文件系统 internals 的一部分:最好不要修改它们及其操作。

实际上,file_operations本身就很强大。如果您发现mode的{​​{1}}参数不足以反映访问权限,则可以在proc_create() 文件操作中检查访问权限。

至于结构.open()中的字段proc_iops,它仍然存在。但是结构本身是在内部标题proc_dir_entry中定义的 - 另一个信号是从外部访问它的字段。