Наконец-то я понял. Спасибо Shodanex за то, что поставили меня на правильный путь.
Обновление: Будьте очень осторожны при применении этого исправления к сборкам для более старых версий ядра, так как в файле Makefile.modpost в более старых версиях есть ошибка версии ядра, из-за которых ваша сборка ведет себя неправильно и создает неправильные цели, когда вы указываете опцию KBUILD_EXTMOD .
Вы должны указать пути к источнику модулей, от которых вы зависите, в KBUILD_EXTMOD make параметр.
Скажем, у вас есть модуль foo , который зависит от символов из модуля bar .
Исходные файлы для foo находятся в foo / module / , а исходные файлы для bar находятся в bar / module /
Команда make в Makefile для foo , вероятно, выглядит как
make ARCH=$$ARCH CROSS_COMPILE=$$CROSS_COMPILE -C $$LINUX_DIR \
M=`pwd`/module \
modules
(точная строка может отличаться в вашем проекте).
Измените его на
make ARCH=$$ARCH CROSS_COMPILE=$$CROSS_COMPILE -C $$LINUX_DIR \
M=`pwd`/module \
KBUILD_EXTMOD=`pwd`/../bar/module \
modules
(мы добавили KBUILD_EXTMOD = pwd
/ .. / bar / module \ line, где pwd
/ .. / bar / module - путь к источникам модуля ядра, от которого мы зависим.
Можно ожидать, что параметр KBUILD_EXTRA_SYMBOLS будет работать таким образом, однако это KBUILD_EXTMOD .