繁体   English   中英

如何为proc_dir_entry定义inode_operation?

[英]How to define inode_operation for proc_dir_entry?

我正在尝试学习如何使用《 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;
}

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

那么我应该如何为proc_dir_entry定义inode_operations

通用/proc文件系统是给内核及其模块能够方便地与上飞目录这些文件生成的“内容”创建文件 可以通过使用proc_create()和朋友来做到这一点。

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

实际上, file_operations本身功能强大。 如果您发现proc_create() mode参数不足以反映访问权限,则可以检查.open() 文件操作中的访问。


至于struct proc_dir_entry proc_iops字段仍然存在。 但是结构本身是在内部头文件fs/proc/internal.h -另一个信号是,不应从外部访问其字段。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM