[英]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.