Ubuntu 15.10 (ядро 4.2): ошибка makefile модуля ядра Hello world

Я часами пытался создать свой первый модуль Hello World Kernel, увы, безуспешно. Мой простой C-код (hello.c) и makefile находятся в /Downloads в моей системе, если это имеет какое-либо значение.

Привет

#include <linux/init.h>
#include <linux/module.h>

MODULE_LICENSE("Dual BSD/GPL");

static int hello_init(void) {
    printk(KERN_ALERT "Hello, world\n");
    return 0;
}

static void hello_exit(void) {
    printk(KERN_ALERT "Goodbye, cruel world\n");
}

module_init(hello_init);
module_exit(hello_exit);

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.2.0-16-generic/build
M=/home/username/workspace/test/Module modules make[1]:
Entering directory '/usr/src/linux-headers-4.2.0-16-generic'
scripts/Makefile.build:44:
/home/username/workspace/test/Module/Makefile: No such file or
directory make[2]: *** No rule to make target
'/home/username/workspace/test/Module/Makefile'.  Stop.
Makefile:1398: recipe for target
'_module_/home/username/workspace/test/Module' failed make[1]:
*** [_module_/home/username/workspace/test/Module] Error 2 make[1]: Leaving directory '/usr/src/linux-headers-4.2.0-16-generic'
makefile:4: recipe for target 'all' failed make: *** [all] Error 2

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

  • Должен ли я переместить мой hello.c и makefile в /usr/src?
  • Есть ли какие-либо синтаксические ошибки в моих файлах?
  • Должен ли он сказать hello.c вместо hello.o в make-файле?
  • Может быть, в моей Ubuntu чего-то не хватает?
  • ...

1 ответ

Решение

Я просто изменил имя "makefile" на "Makefile" (заглавные буквы M), и это, похоже, что-то сделало. Теперь я получаю:

make -C /lib/modules/4.2.0-16-generic/build M = / home / username / workspace / test / Модули модулей make[1]: вход в каталог '/usr/src/linux-headers-4.2.0-16-generic'Сборка модулей, этап 2. Модули MODPOST 0 делают [1]: Выход из каталога' /usr/src/linux-headers-4.2.0-16-generic '

^^ Я знал это с самого начала, что почему-то мой make-файл вызывает эту проблему! Как бы то ни было, у меня до сих пор нет файла hello.ko.

Любые предложения, что я должен попробовать сейчас?

О, МОЙ БОГ!!!

Погуглил эту новую проблему и нашел ответ от dsf: Linux: modpost ничего не собирает (последняя публикация)

Так же, как они предполагают, что я набрал текст в Makefile вручную, и после этого, как по волшебству, он работал отлично! Теперь у меня есть hello.ko, но, к сожалению, без объяснения причин. Может быть, если вы просто скопируете текст Makefile с pdf / веб-сайта, вы получите нежелательные символы, как, кажется, считает dsf?!

Во всяком случае, проблема решена.

Другие вопросы по тегам