Вы не можете просто использовать традиционный стиль Makefile
с модулями ядра Linux; в то время как вы могли бы быть в состоянии заставить что-то работать, это будет болезненный опыт.
Начните с чтения файла Documentation/kbuild/modules.txt
; он точно опишет, что вам нужно делать при написании модуля Makefile
, чтобы он мог аккуратно подключаться к среде Kbuild
ядра. Ваш Makefile
, вероятно, будет выглядеть примерно так:
ifneq ($(KERNELRELEASE),)
# kbuild part of makefile
obj-m := 8123.o
8123-y := 8123_if.o 8123_pci.o 8123_bin.o
else
# normal makefile
KDIR ?= /lib/modules/`uname -r`/build
default:
$(MAKE) -C $(KDIR) M=$$PWD
# Module specific targets
genbin:
echo "X" > 8123_bin.o_shipped
endif
Пожалуйста, поверьте мне на это; в то время как вы можете подумать, что вы «всего лишь одно небольшое изменение» от получения своего Makefile
для работы, даже незначительные изменения в версии ядра полностью разрушат вашу сборку. Просто потратьте час, чтобы написать Kbuild
-совместимую Makefile
для вашего модуля. Я потратил несколько недель своей жизни, пытаясь сохранить ранее существовавший Makefile
, когда была введена инфраструктура Kbuild
. Каждое новое ядро приводило к потере часов производительности.