Мой make-файл приводит к: Нет правила для создания цели `arch/x86/tools/relocs.c', необходимо

Я использую Ubuntu 12.04. Я написал простой модуль ядра Hello World (hello.c). Я написал следующий make-файл для него:

obj-m+=hello.o
KDIR:= /usr/src/linux-headers-3.2.0-24-generic-pae
all:
     $(MAKE) -C $(KDIR) SUBDIRS=$(PWD) modules
clean:
     rm -rf *.o *.ko *.mod.* *.symvers *.order 

Но эта ошибка возникла, когда я сделал из ядра:

make[1]: Entering directory `/usr/src/linux-headers-3.2.0-24-generic-pae'
make[2]: *** No rule to make target `arch/x86/tools/relocs.c', needed
by `arch/x86/tools/relocs'.  Stop.

hello.c а также makefile находятся в /Documents/module_prog, Я побежал make из этого каталога.

Что является причиной этой ошибки и как я могу это исправить?

4 ответа

В файле make просто измените SUBDIRS=$(PWD) в M=$(shell pwd)...

Работает как шарм

Требуются заголовки i386:

sudo apt-get install linux-headers-*(kernel version)*:i386

Пример:

sudo apt-get install linux-headers-5.4.0-42:i386

чтобы получить файлы заголовков для вашего конкретного ядра... вы можете добиться большего успеха с немного менее умной версией ответа @Thantelius:

      apt search linux-headers-$(uname -r)
apt install <package name showing in the search>

однако в самых последних/основных дистрибутивах заголовки должны быть установлены по умолчанию

После долгого времени с этой проблемой моим решением было переименовать make-файл из makefileк Makefile.

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