Вот, ещё "накопал"...
В главе 4 есть пункт "Как собрать модуль из нескольких объектных файлов?"
http://rus-linux.net/MyLDP/BOOKS/Moduli ... -05.html#5, в нём есть отрывок из Makefile, который демонстрирует собственно всю "кухню" (как вы сами написали -
"Самое интересное в этом проекте, это:" ) . В дереве сэмплов этот файл находится здесь - Kexamples.BOOK/tools/mobj/Makefile. Так вот цель
Код: Выделить всё
$(TARGET).o: $(OBJS)
<----->$(LD) -r -o $@ $(OBJS)
в нём является избыточной, так как вся "магия" происходит здесь:
Documentation/kbuild/makefiles.txt - 3.2 Built-in object goals - obj-y
Kbuild compiles all the $(obj-y) files. It then calls
<------>"$(LD) -r" to merge these files into one built-in.o file.
<------>built-in.o is later linked into vmlinux by the parent Makefile.
Есть ещё один момент, который указан в Linux Documentation, касательно сборки модуля из нескольких объектных файлов (Documentation/kbuild/modules.txt - 3. Creating a Kbuild File for an External Module):
When the module is built from multiple sources, an additional line is
needed listing the files:
<------><module_name>-y := <src1>.o <src2>.o ...
Ну по скольку работает вариант и с -objs и с -y (тем более что в большинстве документации (в т.ч. LKMPG) по модулям ядра указан вариант -objs), какой из них правильный я не знаю.
Ну и ещё по поводу цели clean. В kbuild эта цель уже есть (т.е. не нужно её описывать вручную):
Documentation/kbuild/modules.txt - 2.3 Targets
выглядит так:
Код: Выделить всё
clean:
<------>$(MAKE) -C $(KDIR) M=$(PWD) clean
Единственное но - вместе с водой она (цель) выплёскивает и дитя (удаляет модули - *.ko), что не происходит в вашем варианте (может такая задумка у вас и была).