2015-10-28 2 views
0

Здравствуйте, я новичок в программировании на пространстве ядра, и я пришел, чтобы узнать о файловой системе proc./proc файловая система зависает моя система

Я написал модуль, который создает файл ргос при регистрации

И я извлекаю, что в то время как модуль регистрации. Но если я не удаляю этот файл с помощью remove_proc_entry() и не регистрирую мой модуль, тогда система зависает через некоторое время

Почему это так?

Код

#include<linux/init.h> 
#include<linux/kernel.h> 
#include<linux/proc_fs.h> 
#include<linux/module.h> 
#include<linux/fs.h> 

int myopen(struct inode *, struct file *); 
ssize_t myread(struct file *, char __user *, size_t, loff_t *); 

int myopen(struct inode *p, struct file *q) 
{ 
     printk(KERN_ALERT "I am in myopen\n"); 
     return 0; 
} 

ssize_t myread(struct file *p, char __user *q, size_t r, loff_t *s) 
{ 
     printk(KERN_ALERT "I am in myread\n"); 
     return 0; 
} 

static const struct file_operations fs={ 
     .open=myopen, 
     .read=myread 
}; 

int start(void) 
{ 
     proc_create("myprocfile", 0, NULL, &fs); 
     return 0; 
} 

void stop(void) 
{ 
     //remove_proc_entry("myprocfile", NULL); 
     /* 
      If I uncomment the above line 
      then everything works fine 
     */ 
} 

module_init(start); 
module_exit(stop); 
MODULE_LICENSE("GPL"); 

ответ

1

При обращении к файлу, file_operations структура читается, и futher действия зависит от указателей, хранящихся в этой структуре.

Если вы не удаляете файл после выхода модуля, файл остается доступным. Но file_operations Структура, связанная с этим, освобождена. Таким образом, любой доступ к файлу после разгрузки модуля вызывает чтение данных, которые были освобождены. Эта ошибка запуска при доступе к памяти.

Вот почему для модуля ядра важно удалить все объекты, которые он создает до этого.

+0

Большое спасибо за ваше прекрасное объяснение ..... Но я не понимаю после того, как я отменил регистрацию модуля, который выполняет операции с файлами. Я не написал код пространства пользователя для этого ... Тогда кто выполняет операции над свободной памятью? –

+0

Это может быть, например, системный деамон, который периодически проверяет файлы. В любом случае наличие файла, связанного со структурой освобожденных операций, является плохим. – Tsyvarev

+0

Когда я пытаюсь отменить регистрацию модуля, он дает мне сообщение на терминале «убито» ... Я не могу понять, какой процесс здесь убит –

Смежные вопросы