#c #linux #linux-kernel #linux-device-driver #insmod
#c #linux #linux-ядро #linux-драйвер устройства #insmod
Вопрос:
Итак, я пытался установить ядро hello world, показанное в книге «Драйверы устройств Linux» Корбета, Джонатана.
Это код для файла hello.c
#include <linux/init.h>
#include <linux/module.h>
MODULE_LICENSE("Dual BSD/GPL");
static int hello_init(void) {
printk(KERN_ALERT "Hello World!!n");
return 0;
}
static void hello_exit(void) {
printk(KERN_ALERT "Good Bye Module!!n");
}
module_init(hello_init);
module_exit(hello_exit);
Для его сборки я использую этот makefile:
obj-m = hello.o
all:
make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules
clean:
make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean
После запуска
make all
sudo insmod ./hello.ko
и у меня ошибка
ERROR: could not insert module Operation not permitted
Установка модуля пространства ядра с правами суперпользователя. Также пытался
sudo su
sudo insmod ./hello.ko
Также пытался
sudo modprove -v hello.ko
С аналогичной ошибкой.
Ответ №1:
Итак, происходит несколько вещей, основная проблема заключается в том, что на вашем компьютере (обычно ноутбуке) secure boot
включена опция в bios.
Обычно это помогает, НО в некоторых ноутбуках опция не отображается (или отключена), пока вы не установите пароль администрирования для bios.
Если после изменения secure boot
параметра на disabled
иногда недостаточно. В некоторых новых ноутбуках Intel вам необходимо отключить технологию Intel Platform Trust также из BIOS.
Наконец, вы можете запустить insmod или modprobe без проблем.
Чтобы проверить вывод printk(KERN_ALERT "Hello World!!n");
, вам нужно выполнить
tail -f /var/log/kern.log
Это должно сработать.