2016-12-22 13 views
1

Я пытаюсь научиться писать модуль ядра 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

+0

Поле '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

+0

@ Цыварев Большое спасибо! Можете ли вы включить это в раздел ответов? –

ответ

1

Общее назначение файловой системы /proc - предоставить ядру и его модулям возможность легко создавать файлы с «контентом», созданным «на лету» и каталогов для группа эти файлы. Это можно сделать, используя proc_create() и друзей.

Что касается индодов и зубных рядов, они являются составными частями файловой системы: лучше не изменять их и их операции.

На самом деле, file_operations являются собственными силами. Если вы найдете mode параметр для proc_create() недостаточно, чтобы отразить права доступа, вы можете проверить доступ в .open()file file.


Что касается области proc_iops в proc_dir_entry структуры, она все еще существует. Но сама структура определена в внутренним заголовком fs/proc/internal.h - еще один сигнал, что доступ к его полям извне не ожидается.