Я пытаюсь скомпилировать простой модуль ядра, но компиляция перестала работать из-за неправильного аргумента, мимо которого проходят make
кому: gcc
.
Это Makefile
:
obj-m += test.o
all:
make -C /lib/modules/$(shell uname -r)/build M=$(PWD) test
Выполнение make
производит следующие ошибки:
$ make
make -C /lib/modules/3.16.0-33-generic/build M=/home/user/test test
make[1]: Entering directory `/usr/src/linux-headers-3.16.0-33-generic'
gcc -m elf_x86_64 /home/user/test/test.c -o test
gcc: error: elf_x86_64: No such file or directory
gcc: error: unrecognized command line option ‘-m’
make[1]: *** [test] Error 1
make[1]: Leaving directory `/usr/src/linux-headers-3.16.0-33-generic'
make: *** [all] Error 2
Этот ответ не помогает: я искал все файлы в /usr
для тех, которые содержат -m elf_x86
использование grep -rnw '/usr' -e "-m elf_x86"
и никакие соответствия файла, таким образом, я понятия не имею, о котором файле я должен отредактировать для переопределения make
поведение.
Необходимо отредактировать собственный make-файл модуля.
make-файлы сборки Ядра немного отличаются от регулярных make-файлов: цель должна быть modules
, не название Вашего модуля (test
), который только должен быть определен через obj-m
переменная:
obj-m += test.o
all:
make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules