Не удается загрузить модуль в ядро, отображается недопустимая операция

#c #linux #kernel #kernel-module

#c #linux #ядро #kernel-module

Вопрос:

Я только начал изучать модуль ядра, и я работаю над своей первой программой, вот мой код и Makefile

—> привет-1.c / Моя первая программа/

   #include <linux/module.h>
  #include <linux/kernel.h>
    int init_module(void ){
      printk(KERN_INFO "Hello this is known as module.n" );
      return 0;
      }

  void cleanup_module(void ){
     printk(KERN_INFO "Bye. We'll come back soon.n" );
   }
  

—>Makefile

 obj-m  = hello-1.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 , но я не могу его загрузить, на самом деле, я пытался

insmod ./hello-1.ko У меня это не сработало.

—Ошибка: insmod: ОШИБКА: не удалось вставить модуль ./hello-1.ko: Операция не разрешена

итак, я сделал sudo modprobe -v hello-1.ko .

—Ошибка: insmod: ОШИБКА: не удалось вставить модуль ./hello-1.ko: Операция не разрешена

Но во время выполнения lsmod я могу видеть свой модуль, и я также могу делать modinfo hello_1 .

следовательно, я пытался, modprobe hello_1 но он показывает

—Ошибка: modprobe: ФАТАЛЬНАЯ: модуль hello_1 не найден в каталоге / lib /modules/4.4.0-43- низкая пропускная способность

Пожалуйста, помогите мне с тем, чего мне не хватает, поскольку это моя первая программа. Спасибо!

Комментарии:

1. Похоже, вы уже загрузили модуль ранее. Вы пробовали sudo rmmod hello_1 сначала, а затем sudo modprobe после этого?

2. Я перезагрузил свой компьютер и попробовал то же самое, что вы только что просили сделать, но получаю то же сообщение об ошибке. и теперь я не могу видеть свой модуль во время выполнения lsmod .

3. Что dmesg говорится после неудачного insmod вызова?