Вы пытаетесь скомпилировать свой модуль с простым gcc
ни с одним из
окружающие рамки kbuild. Вы могли бы получить что-то, чтобы работать в
в прошлом такой подход, но это больно ужасно ужасно пытаться поддерживать
подходит модуль, использующий что-либо кроме pure-kbuild Makefile
. Я
потратил слишком много своей жизни на борьбу с kbuild, и я не хочу, чтобы то же самое
случилось с вами - обнимите kbuild и позвольте ему помочь вам построить свой модуль. пожалуйста
прочитайте Documentation/kbuild/modules.txt
перед написанием другой строки кода.
Что вам нужно сделать, это создать Makefile
для вашего модуля. Его содержание должно
выглядеть так:
ifneq ($(KERNELRELEASE),)
# kbuild part of makefile
obj-m := modulename.o
else
# normal makefile
KDIR ?= /lib/modules/`uname -r`/build
default:
$(MAKE) -C $(KDIR) M=$$PWD
endif
Я знаю, что это намного сложнее, чем большинство Makefile
с которыми вы привыкли видеть,
но это служит двойному назначению. Если вы просто запустите make
в своем каталоге, это
повторно вызвать make
, чтобы использовать механизм kbuild из работающего в данный момент ядра
(предполагается, что, по крайней мере, символическая ссылка от /lib/modules/.../build
до
правильное местоположение).
Повторно вызванная команда make
($(MAKE)
) правильно соберет ваш модуль и
сэкономить больше времени, чем вы можете себе представить. (На самом деле.)
Держите Documentation/kbuild/modules.txt
рядом с вами, пока выполняете эту работу.
Примечание: Documentation/kbuild/modules.txt
может быть доступно в вашей системе Linux на /usr/share/linux-headers-$(uname -r)/Documentation/kbuild/modules.txt