Yocto:为什么在构建外部内核模块期间未定义struct模块

时间:2018-05-14 16:46:20

标签: linux linux-kernel kernel-module yocto

我正在尝试使用Yocto构建系统将示例外部内核模块 hello-mod 元骨架/ recipes-kernel 添加到我的图像中。但是,当我尝试使用bitbake hello-mod进行编译时,它会在第二阶段失败,抱怨struct modulename行上没有名为.name = KBUILD_MODNAME,的成员。即使已包含 linux / module.h ,似乎还没有定义struct module。这是似乎无法编译的通用模块代码:

#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 /路径/到/狭小-罗茨科/建造/ TMP /工作共享/ duovero /内核源/包括/ Linux的

所以我正在耗尽并寻找有关如何调试此问题的想法。为了记录,这些是层的当前版本,内核等:

  • poky来自git.yoctoproject.org的9915e071bcadd7c4d5363a067c529889851d37a5(rocko)
  • linux是来自git.kernel.org的9dc30ff9a115559cc55673d0b1d3c576402d073e

真的很感激任何帮助或提示!

1 个答案:

答案 0 :(得分:0)

这似乎是Yocto构建系统的一个问题。当我按照这些步骤构建hello-mod模块时。

  1. 查看内核4.16.x的一个版本,将hello-mod添加到MACHINE_ESSENTIAL_EXTRA _RRECOMMENDS并观察构建失败。
  2. 通过将SRCREV设置为相应的提交ID,查看另一个内核4.16.y的副本,继续构建并观察它是否成功。
  3. 到目前为止,我已经从4.16.5转到4.16.8,反之亦然。所以在这一点上我很确定这是构建系统的一个问题。

    我仔细查看了使用grep(对“hello”和“MACHINE_ESSENTIAL_EXTRA_RRECOMMENDS”)和diff的bitbake -e的输出,但是找不到任何显着的差异。我还检查了编译和配置日志,我看到的唯一有趣的事情是配置日志,在第二次运行时打印出来:

    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