Ответ 1
Вы пытаетесь скомпилировать свой модуль с помощью простого 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
в своем каталоге, это будет
re-invoke 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