- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在尝试学习如何使用 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
文件系统的一般目的是让内核及其模块能够轻松创建文件,其中包含动态生成的“内容”和 group 这些文件的目录。可以通过使用 proc_create()
和 friend 来做到这一点。
至于 inode 和 dentry,它们是文件系统内部的一部分:最好不要修改它们和它们的操作。
实际上,file_operations
本身就很强大。如果您发现 proc_create()
的 mode
参数不足以反射(reflect)访问权限,您可以在 .open()
文件操作中检查访问权限.
至于结构proc_dir_entry
中的字段proc_iops
,它仍然存在。但是结构本身在 internal header fs/proc/internal.h
中定义 - 另一个信号,即不希望从外部访问其字段。
关于c - 如何为 proc_dir_entry 定义 inode_operation?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41288564/
我正在尝试学习如何使用 Linux 内核模块编程指南编写 linux 内核模块 但是我意识到这本书中的例子已经过时了。以下是书中的示例之一。 static struct proc_dir_entry
我是一名优秀的程序员,十分优秀!