Иногда внешний модуль использует экспортированные символы из другого
внешний модуль. Kbuild должен иметь полное знание всех символов
чтобы не выплевывать предупреждения о неопределенных символах. Три
решения существуют для этой ситуации.
ПРИМЕЧАНИЕ: метод с файлом верхнего уровня kbuild рекомендуется, но может
быть непрактичным в определенных ситуациях.
Используйте файл верхнего уровня kbuild. Если у вас есть два модуля, foo.ko и
bar.ko, где foo.ko нужны символы из bar.ko, вы можете использовать
общий файл верхнего уровня kbuild, поэтому оба модуля компилируются в
такая же сборка. Рассмотрим следующую схему каталогов:
./foo/ <= contains foo.ko ./bar/ <= contains bar.ko
The top-level kbuild file would then look like:
#./Kbuild (or ./Makefile): obj-y := foo/ bar/
And executing
$ make -C $KDIR M=$PWD
will then do the expected and compile both modules with full
знание символов из любого модуля.
Использовать дополнительный файл Module.symvers. При сборке внешнего модуля
создается файл Module.symvers, содержащий все экспортируемые символы
которые не определены в ядре. Чтобы получить доступ к символам из
bar.ko, скопируйте файл Module.symvers из компиляции bar.ko
в каталог, где построен foo.ko. Во время сборки модуля,
kbuild прочитает файл Module.symvers в каталоге
внешний модуль, и когда сборка будет завершена, новый
Создается файл Module.symvers, содержащий сумму всех символов
определяется и не является частью ядра.
Использовать переменную "make" KBUILD_EXTRA_SYMBOLS Если это нецелесообразно
скопировать Module.symvers из другого модуля, вы можете назначить пробел
Отдельный список файлов для KBUILD_EXTRA_SYMBOLS в вашем файле сборки.
Эти файлы будут загружены modpost во время инициализации
его таблицы символов.