Это мое введение в модуль ядра. Я следую Руководству по программированию модуля ядра 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 модули
make1: Вход в каталог '/usr/src/linux-headers -4.15.0-45-универсальный
Сборка модулей, этап 2.
МОДПОСТ 0 модулей
make1: Выход из каталога '/usr/src/linux-headers -4.15.0-45-универсальный
но теперь, когда я пытаюсь вставить его в ядро с помощью этой команды;
sudo insmod hello.k
я получил эту ошибку
insmod: ОШИБКА: не удалось загрузить модуль hello.ko: Нет такого файла или каталога
Я пробовал разные решения, например, сделать обе функции статичными или изменить расположение файлов, но ничего не вышло.
В настоящее время я запускаю все эти команды на рабочем столе и использую двойную загрузку для среды Linux.
Может ли кто-нибудь помочь мне, что я делаю неправильно здесь ??
Возможный повторяющийся вопрос фактически решил мою проблему, но не был непосредственно моей проблемой. Я рассмотрел этот вопрос во время поиска проблемы, но не мог понять. На самом деле это был один комментарий к моему вопросу, который изменил мое мнение об ошибке, а затем упомянутый ответ решил мою проблему.
MODPOST 0 modules
). Так что попытка загрузить модуль - пустая трата времени. Кстати, журнал сборки должен быть в текстовом виде, что позволяет искать в нем слова и фразы, а не в виде изображения. Пожалуйста, исправьте эту проблему с вашим вопросом. - person Tsyvarev   schedule 10.03.2019hello.c
иMakefile
непосредственно в вашем домашнем каталоге/home/nailaakbar
? Это не ошибка, а просто для уверенности: обычно в домашнем каталоге есть подкаталоги. - person Tsyvarev   schedule 10.03.2019-
) в вашем Makefile. Таким образом, вы не назначаетеobj-m
, который имеет особое значение для системы сборки ядра Linux. Этот SO answer точно говорит об этой проблеме. И ваш вопрос кажется дубликатом того, которому соответствует ответ. - person Tsyvarev   schedule 10.03.2019MODPOST 0 modules
строку, то он найдет ваш вопрос. Затем по дублирующей ссылке он найдет оригинальное описание задачи и ответ на нее. - person Tsyvarev   schedule 10.03.2019