Я пытался изучить sysfs и пытался написать простой каталог sysfs. Код, как показано нижеУдаление записи sysfs
static struct kobject *example_kobject;
static int __init mymodule_init (void)
{
pr_debug("Module initialized successfully \n");
example_kobject = kobject_create_and_add("kobject_example",
kernel_kobj);
if(!example_kobject)
return -ENOMEM;
return 0;
}
static void __exit mymodule_exit (void)
{
pr_debug ("Module un initialized successfully \n");
// kobject_put(example_kobject); <-- Forgot to delete
}
module_init(mymodule_init);
module_exit(mymodule_exit);
Как показано на mymodule_exit, я был по ошибке забыл раскомментировать код, а затем вставить и rmmod модуль.
Теперь, когда я пытаюсь вставить модуль снова, инициализация не работает, поскольку запись уже присутствует.
Я знаю, что нет смысла разрешать пользователям пространство, которое ядро сделало. Но мне все еще интересно, есть ли другой способ удалить конкретную запись/sys/kernel/kobject_example, кроме перезагрузки окна.
Перезагрузите коробку или обратитесь к ней, когда ваш модуль пытается загрузить и удалить и создать его снова? –
О! я получаю вторую часть, любым другим способом в пользовательском пространстве? – Pradheep
@Pradheep: Как правило, вы не можете исправить проблемы с кодом ядра из пользовательского пространства. В вашем случае вы не можете удалить 'kobject' в пользовательском пространстве. – Tsyvarev