如何将linux内核头作为Yocto中SDK包的一部分?
我在一个嵌入式项目中使用Yocto1.8 (fido),并想要进行树外内核模块的开发。目前,我可以通过在运行make时将$KERNEL_PATH指向poky/build/tmp/work-shared/<machine>/kernel-source/目录来构建内核模块(bitbake除外)。但是,从长远来看,我不想这样做,因为其他人需要轻松地构建模块,而不需要安装和构建来自bitbake的完整映像。
我可以使用bitbake myimage -c populate_sdk生成一个SDK。但是,这不包括内核头(我看到的只有sysroots/<mach>/usr/include/linux)。如何使内核头包含在SDK包中?另外,我不希望内核头显示为目标映像的一部分。
编辑我的图像食谱如下:
EXTRA_IMAGE_FEATURES_append = " eclipse-debug debug-tweaks"
TOOLCHAIN_HOST_TASK_append = " nativesdk-cmake"
IMAGE_INSTALL = "packagegroup-core-boot ${CORE_IMAGE_EXTRA_INSTALL} util-linux kernel-modules netbase busybox base-passwd base-files sysvinit initscripts bash gdbserver strace sysfsutils dtc gawk ethtool grep sed wget iptables oprofile net-tools dropbear rsync stress-ng rt-tests i2c-tools"
inherit core-image我使用的内核是meta层中的linux-altera-ltsi-rt。
发布于 2015-07-07 06:35:57
在fido版本中,内核构建的处理方式已经改变。在以前的版本中,您通常可以跳过下面的用法示例。
在fido或任何1.8+中,如果要在SDK中使用内核src和构建系统,则应该添加
TOOLCHAIN_TARGET_TASK_append = " kernel-devsrc"你的形象食谱。这将确保将新的kernel-devsrc包安装到您的工具链中。
下面的过程只是为了确保完全理解工作流的其余部分(尽管它严格地不是原始问题的一部分)。
使用实例
让我们假设一个模块Makefile如下:
obj-m += hello-1.o
all:
make -C $(KERNEL_SRC) M=$(PWD) modules
clean:
make -C $(KERNEL_SRC) M=$(PWD) clean示例摘自指南(注意,实际命令需要有一个缩进字符)。
然后,您必须将KERNEL_SRC定义为sysroots/<mach>/usr/src/kernel/,无论是在Makefile中,还是在Makefile中。(使用像KERNEL_SRC这样的变量将确保您的模块配方在使用bitbake构建时自动选择正确的位置)。
要手动构建内核模块,请执行以下操作:
KERNEL_SRC=<sdk-install-path>/sysroots/<mach>/usr/src/kernel LDFLAGS="" make将失败,因为无法找到修复程序。我们会手工解决这个问题。cd <sdk-install-path>/sysroots/<mach>/usr/src/kernelmake modules_prepare
如果这需要与sudo一起运行,请确保在sudo环境中获取环境文件:sudo bash -c "source <sdk-install-path>/environment-setup-<mach> && make modules_prepare"KERNEL_SRC=<sdk-install-path>/sysroots/<mach>/usr/src/kernel LDFLAGS="" make现在,这应该允许您构建模块。
如果您在sysroots/<mach>/usr/src/kernel/下没有内核源代码,我们将不得不对此进行调查。
发布于 2020-11-20 14:06:08
anders answer非常好,但是在yocto的最新版本中,添加内核-devsrc的方式似乎是
IMAGE_INSTALL += "kernel-devsrc"
我在这里发现的:https://www.mail-archive.com/yocto@yoctoproject.org/msg36448.html
发布于 2021-04-30 15:14:54
使用Yocto Zeus (3.0.x)将其添加到您的图像食谱中:
TOOLCHAIN_TARGET_TASK += "kernel-devsrc"编辑: Gatesgarth (3.2.x)也是如此,但是make scripts命令对libyaml-dev有一个新的主机依赖项
https://stackoverflow.com/questions/31256770
复制相似问题