modprobe / insmod — ОШИБКА: не удалось вставить операцию модуля, не разрешена установка модуля пространства ядра с привилегиями root

#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

Это должно сработать.