Почему путается порядок выполнения module_init и module_exit в модуле ядра Linux?

Добрый день, коллеги!
Подскажите пожалуйста, в чем может быть дело. Пишу модуль ядра, точнее каркас:

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


static int __init hello_init(void) {
    printk("Hello, world 2!");
    return 0;
}


static void __exit hello_exit2(void) {
    printk("Goodbye, world 2!");
}


module_init(hello_init);
module_exit(hello_exit2);


MODULE_LICENSE("GPL");
MODULE_AUTHOR("Mikhail");


При загрузке модуля (insmod test-mod.ko) в логе вижу сообщение "Goodbye, world 2!". При выгрузке (rmmod test-mod) получаю сообщение "Hello, world 2!".
То есть hello_exit2 вызывается при инициализации, а hello_init при завершении. Как так то? Как будто я что-то упускаю.
  • Вопрос задан
  • 304 просмотра
Решения вопроса 1
@Px2 Автор вопроса
Такая же проблема и решение: https://askubuntu.com/questions/1111529/printk-mes...
Вкратце: сообщения из printk() попадают в буфер, который не очищается до тех пор, пока не встретит новую строку.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы