首页 > 解决方案 > yocto:如何在 sdk 中安装头文件和内核模块

问题描述

为什么在do_install之后,SDK中没有出现test.h?实际上它似乎无处不在。

do_install_append() {
    install -d ${D}${includedir}/char-drv-ll
    install -m 0755 ${S}/test.h ${D}${includedir}/char-drv-ll/test.h
}
RPROVIDES_${PN} += "kernel-module-char-drv-ll"

FILES_${PN} += "${includedir}/char-drv-ll/test.h"

编辑:这是在 poky 构建文件夹中查找的结果:

$ find -name test.h -and -path *char-drv-ll*
./tmp/sysroots-components/qemuarm/char-drv-ll/usr/include/char-drv-ll/test.h
./tmp/work/qemuarm-poky-linux-gnueabi/char-drv-ll/0.1-r0/package/usr/include/char-drv-ll/test.h
./tmp/work/qemuarm-poky-linux-gnueabi/char-drv-ll/0.1-r0/image/usr/include/char-drv-ll/test.h
./tmp/work/qemuarm-poky-linux-gnueabi/char-drv-ll/0.1-r0/sysroot-destdir/usr/include/char-drv-ll/test.h
./tmp/work/qemuarm-poky-linux-gnueabi/char-drv-ll/0.1-r0/test.h
./tmp/work/qemuarm-poky-linux-gnueabi/char-drv-ll/0.1-r0/packages-split/char-drv-ll-dev/usr/include/char-drv-ll/test.h 

test.h但是,当我运行 qemu 或在 SDK 中时,找不到该文件。

标签: linuxyoctokernel-module

解决方案


默认情况下,只有在需要构建另一个包时才会将包包含在 SDK 中。例如,如果您正在构建一个应用程序,它DEPEND的 s 将包含在 SDK 中,而不是应用程序本身。

但是,您可以使用TOOLCHAIN_HOST_TASKTOOLCHAIN_TARGET_TASK变量将包显式添加到 SDK。(记住SDK有原生和交叉编译部分)

例子:

TOOLCHAIN_HOST_TASK_append = " nativesdk-mypackagename-dev"
TOOLCHAIN_TARGET_TASK_append = " mypackagename-dev"

如果您有多个需要添加的包,我建议您将它们分组到包组中(例如nativesdk-packagegroup-mylayer-toolchain-host.bbpackagegroup-mylayer-toolchain-target.bb

示例packagegroup-mylayer-toolchain-target.bb

DESCRIPTION= "Packages for the target part of the SDK"

inherit packagegroup

RDEPENDS_${PN} = ...the packages you want to add...

然后创建一个classes/populate_sdk_mylayer.bbclass

TOOLCHAIN_HOST_TASK_append = " nativesdk-packagegroup-sdk-host nativesdk-packagegroup-mylayer-toolchain-host"
TOOLCHAIN_TARGET_TASK_append = " packagegroup-mylayer-toolchain-target"

然后你可以像烤bitbake -c populate_sdk_mylayer myimage


推荐阅读