Да и я попробовал, действительно, пока "export" не напишешь, make нижнего уровня переменную, объявленную в верхнем уровне, не распознаёт."Для экспорта указанной переменной в make "нижнего уровня", используется директива export: "
...Теперь посмотрите на Makefile, я специально нашел маленький.
obj-m += lkm_example.o
all:
make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules
clean:
make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean
Этот файл взят отсюда и служит для сборки модуля ядра
Судя по теории, переменная obj-m что мёртвому припарка. Но нет же, если мы её уберём, модуль не собирается, а с ней собирается. Как так? Ведь в приведённом Makefile она не задействована, а в нижний не передаётся!
...А вот официальная инфа по сборке модулей ядра.
https://www.kernel.org/doc/html/latest/kbuild/modules.html#shared-makefile
И тоже сплошь и рядом такие вот переменные:
В этом, например, файле:obj-m := 8123.o
8123-y := 8123_if.o 8123_pci.o 8123_bin.o
Зачем? Почему? Для чего? Как такие переменные могут влиять на сборку модуля? Непонятно. Спасибо, кто откликнется. Debian 11.--> filename: Kbuild
obj-m := 8123.o
8123-y := 8123_if.o 8123_pci.o 8123_bin.o
--> filename: Makefile
ifneq ($(KERNELRELEASE),)
# kbuild part of makefile
include Kbuild
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