Невозможно вставить модуль в ядро

Это мое введение в модуль ядра. Я следую Руководству по программированию модуля ядра 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.

Может ли кто-нибудь помочь мне, что я делаю неправильно здесь ??

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


person Null Pointer    schedule 10.03.2019    source источник
comment
Как видно из журнала сборки, модули не были собраны (MODPOST 0 modules). Так что попытка загрузить модуль - пустая трата времени. Кстати, журнал сборки должен быть в текстовом виде, что позволяет искать в нем слова и фразы, а не в виде изображения. Пожалуйста, исправьте эту проблему с вашим вопросом.   -  person Tsyvarev    schedule 10.03.2019
comment
Обновлен лог в текстовом виде..   -  person Null Pointer    schedule 10.03.2019
comment
Хм, у вас действительно есть hello.c и Makefile непосредственно в вашем домашнем каталоге /home/nailaakbar? Это не ошибка, а просто для уверенности: обычно в домашнем каталоге есть подкаталоги.   -  person Tsyvarev    schedule 10.03.2019
comment
Сначала я делал это в подкаталогах, но затем, чтобы убедиться, я поместил оба файла в домашний каталог.   -  person Null Pointer    schedule 10.03.2019
comment
У вас есть нестандартный дефис (-) в вашем Makefile. Таким образом, вы не назначаете obj-m, который имеет особое значение для системы сборки ядра Linux. Этот SO answer точно говорит об этой проблеме. И ваш вопрос кажется дубликатом того, которому соответствует ответ.   -  person Tsyvarev    schedule 10.03.2019
comment
Возможный дубликат Linux: modpost ничего не создает   -  person Tsyvarev    schedule 10.03.2019
comment
Ты действительно спас меня. Большое спасибо. проблема была в тире obj-m. Можете ли вы опубликовать это как ответ? Я не могу сказать это как дубликат, потому что сначала я не мог понять, что модули MODSPOT 0 означают отсутствие модуля. Ваш комментарий привлек мое внимание. Так что, если кто-то вроде меня застрял, он может указать им правильный путь. Поэтому, пожалуйста, напишите эти 2 пункта в качестве ответа.   -  person Null Pointer    schedule 10.03.2019
comment
Дублирование означает, что у вас есть та же проблема, возможно, выраженная другим описанием. Дублирование не означает, что ваш вопрос будет немедленно удален. Это просто означает, что на вопрос уже дан ответ (в другом месте), поэтому нам не нужно повторять ответ. Если кто-то еще найдет ошибку не удалось загрузить модуль, но не заметит MODPOST 0 modules строку, то он найдет ваш вопрос. Затем по дублирующей ссылке он найдет оригинальное описание задачи и ответ на нее.   -  person Tsyvarev    schedule 10.03.2019
comment
Я голосую за то, чтобы закрыть этот вопрос как не относящийся к теме, потому что он был решен неизвестными способами.   -  person Chris Stratton    schedule 10.03.2019
comment
@ChrisStratton: Почему VTC как не по теме, если дубликат CV уже отправлен, и спрашивающий подтверждает (в сообщении с вопросом), что дубликат действительно решает его проблему?   -  person Tsyvarev    schedule 11.03.2019