Я пытаюсь научиться писать модуль ядра Linux с помощью Руководства по программированию модуля ядра LinuxКак определить inode_operation для proc_dir_entry?
Однако я понял, что примеры, приведенные в этой книге, являются довольно устаревшими. Ниже приводится один из примеров из книги.
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
удалялось из proc_dir_entry
структуры в Linux 4.x
Итак, как я должен определить inode_operations
для proc_dir_entry
Поле 'proc_iops' по-прежнему существует в' struct proc_dir_entry', см. [Fs/proc/internal.h] (http://lxr.free-electrons.com/source/fs/proc/internal.h?v = 4.9). Другое дело, что данная структура не должна быть доступна внешним кодом, поэтому она определена во внутреннем заголовке. Общая идея файловой системы '/ proc' - предоставить ядру и ее модулям возможность легко создавать ** файлы ** с« контентом », созданным на лету, и каталогами для ** group ** этих файлов. Оставляя яды inodes и dentries. Если вам нужны конкретные операции ** inode **, выполните свою собственную файловую систему. – Tsyvarev
@ Цыварев Большое спасибо! Можете ли вы включить это в раздел ответов? –