#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
вызова?