Yocto: Почему модуль struct не определен при сборке внешнего модуля ядра - PullRequest
0 голосов
/ 14 мая 2018

Я пытаюсь добавить пример внешнего модуля ядра hello-mod из meta-skeleton / recipes-kernel в мой образ, используя систему сборки Yocto.Однако, когда я пытаюсь скомпилировать его с помощью bitbake hello-mod, на втором этапе происходит сбой, из-за чего у struct module нет члена с именем name в строке .name = KBUILD_MODNAME,.Кажется, что struct module не определяется, хотя linux / module.h был включен.Это общий код модуля, который, похоже, не компилируется:

#include <linux/module.h>
#include <linux/vermagic.h>
#include <linux/compiler.h>

MODULE_INFO(vermagic, VERMAGIC_STRING);
MODULE_INFO(name, KBUILD_MODNAME);

__visible struct module __this_module
__attribute__((section(".gnu.linkonce.this_module"))) = {
    .name = KBUILD_MODNAME,
    .init = init_module,
#ifdef CONFIG_MODULE_UNLOAD
    .exit = cleanup_module,
#endif
    .arch = MODULE_ARCH_INIT,
};

#ifdef RETPOLINE
MODULE_INFO(retpoline, "Y");
#endif

static const char __module_depends[]
__used
__attribute__((section(".modinfo"))) =
"depends=";

Я не вижу ничего плохого в журнале компиляции, make вызывается (правильно, насколько нам известно) с помощьюследующая строка:

make -C /path/to/poky-rocko/build/tmp/work-shared/duovero/kernel-source \ 
M=/path/to/poky-rocko/build/tmp/work/duovero-poky-linux-gnueabi/hello-mod/0.1-r0

и я могу подтвердить, что module.h существует в каталоге: / path / to / poky-rocko / build / tmp / work-shared/ duovero / kernel-source / include / linux

Так что у меня заканчиваются и я ищу идеи о том, как отладить эту проблему.Напомним, что это текущие версии слоев, ядра и т. Д..org

Буду признателен за любую помощь или подсказку!

1 Ответ

0 голосов
/ 15 мая 2018

Кажется, это проблема системы сборки Yocto. Модуль hello-mod собирается, когда я выполняю следующие действия.

  1. Извлеките версию ядра 4.16.x, добавьте hello-mod в MACHINE_ESSENTIAL_EXTRA _RRECOMMENDS и посмотрите, как сборка не удалась.
  2. Извлеките копию другого ядра 4.16.y, установив для SRCREV соответствующий идентификатор фиксации, продолжите сборку и проследите, чтобы она прошла успешно.

До сих пор я наблюдал это при переходе с 4.16.5 на 4.16.8 и наоборот. Поэтому на данный момент я почти уверен, что это проблема системы сборки.

Я внимательно посмотрел на вывод bitbake -e, используя grep (против "hello" и "MACHINE_ESSENTIAL_EXTRA_RRECOMMENDS") и diff, но не смог найти каких-либо существенных различий. Я также проверил журналы компиляции и конфигурации, единственное интересное, что я увидел, было в журналах конфигурации, где при втором запуске это печатается:

DEBUG: Executing shell function do_configure
NOTE: make KERNEL_SRC=/path/to/poky-rocko/build/tmp/work-shared/duovero/kernel-source clean
rm -f *.o *~ core .depend .*.cmd *.ko *.mod.c
rm -f Module.markers Module.symvers modules.order
rm -rf .tmp_versions Modules.symvers
DEBUG: Shell function do_configure finished
DEBUG: Executing python function do_qa_configure
DEBUG: Python function do_qa_configure finished

при первом запуске у нас есть только:

DEBUG: Executing shell function do_configure
DEBUG: Shell function do_configure finished
DEBUG: Executing python function do_qa_configure
DEBUG: Python function do_qa_configure finished

Хотя это могло произойти, поскольку это был второй запуск задачи настройки hello-mod. Это очень похоже на ошибку в системе сборки. С этой целью я сообщил о проблеме на Bugzilla:

https://bugzilla.yoctoproject.org/show_bug.cgi?id=12748

...