Это моё введение в модуль ядра.Я следую Руководству по программированию модуля ядра Linux и только что написал мой первый простой модуль.
Это мой файл модуля hello.c
;
/*
* hello.c − The simplest kernel module.
*/
#include <linux/module.h> /* Needed by all modules */
#include <linux/kernel.h> /* Needed for KERN_INFO */
int init_module(void)
{
printk(KERN_INFO "Hello world 1.\n");
/*
* A non 0 return means init_module failed; module can't be loaded.
*/
return 0;
}
void cleanup_module(void){
printk(KERN_INFO "Goodbye world 1.\n");
}
module_init(init_module);
module_exit(cleanup_module);
здесьмой 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
, вот что я получаю ..
make -C /lib/modules/4.15.0-45-generic / build M = / home / nailaakbar modules
make 1 : вход в каталог '/usr/src/linux-headers-4.15.0-45-generic'
Сборка модулей, этап 2.
MODPOST 0 модулей
make 1 : Выход из каталога '/usr/src/linux-headers-4.15.0-45-generic '
но теперь, когда я пытаюсь вставить его в ядро с помощью этой команды;
sudo insmod hello.k
Я получил эту ошибку
insmod: ОШИБКА: не удалось загрузить модуль hello.ko: Нет такого файла или каталога
Я пробовал разные решения, например, сделать обе функции статичнымиили изменение расположения файлов, но ничего не получилось.
В настоящее время я запускаю все эти команды на рабочем столе и использую двойную загрузку для среды linux.
Может кто-нибудь помочь мне с этим, что я делаюздесь неправильно ??
Возможно, дублирующий вопрос фактически решил мою проблему, но это не было моей проблемой.Я прошел этот вопрос во время поиска проблемы, но не смог понять.Это был фактически один комментарий на мой вопрос, который изменил мой взгляд на ошибку, а затем упомянутый ответ решил мою проблему.