标签: bitbake

如何在 OpenEmbedded BitBake 配方中递归安装目录结构?

我想通过使用某种递归安装例程而不是多次调用 install 来简化安装大型目录结构的 BitBake 配方。源目录布局在开发过程中经常发生变化,这导致配方修订比我想要处理的要多得多。

例如,以下 do_install() 将如何简化:

do_install() {
    install -d ${D}/foo
    install -m 0644 ${S}/foo/*.* ${D}/foo

    install -d ${D}/foo/a
    install -m 0644 ${S}/foo/a/*.* ${D}/foo/a

    install -d ${D}/foo/b
    install -m 0644 ${S}/foo/b/*.* ${D}/foo/b

    install -d ${D}/foo/c
    install -m 0644 ${S}/foo/c/*.* ${D}/foo/c

    install -d ${D}/bar
    install -m 0644 ${S}/bar/*.* ${D}/bar

    install -d ${D}/bar/a
    install -m 0644 ${S}/bar/a/*.* ${D}/bar/a

    install -d ${D}/bar/a/bananas
    install -m 0644 ${S}/bar/a/bananas/*.* ${D}/bar/a/bananas
}
Run Code Online (Sandbox Code Playgroud)

更像这个伪代码的东西:

do_install() {
    for each subdir in ${S}/foo/
        install subdir recursively to ${D}/foo/subdir …
Run Code Online (Sandbox Code Playgroud)

shell recipe openembedded bitbake

5
推荐指数
1
解决办法
3230
查看次数

在 yocto build 中包含特定的头文件

我试图在开发包中找到的 yocto 构建中包含特定的头文件。软件包是 boost 和 alsa。

我已将 bitbake 配方文件包含到我的图像配方中,这是一个核心配方 (console-trdx-image.bb) 的 bbappend 作为 IMAGE_INSTALL += 并对图像进行 bitbaked。

当我查看我的构建工作目录时,在 alsa 和 boost 的包中,所有文件都驻留在我希望它们所在的位置 - 以 usr/include/alsa 为例。

我很难将构建/安装的包材料放入图像本身的 rootfs 中。

我的 .bbappend 为 alsa 如下:

    do_install_append() {

    # Create alsa dirs
    install -d ${D}/${includedir}/alsa
    install -d ${D}/${includedir}/alsa/sound
    # Install headers
    install -m 0755 ${S}/include/*.h ${D}/${includedir}/alsa
    install -m 0755 ${S}/include/sound/*.h ${D}/${includedir}/alsa/sound

}

# Include these files in the install on the target
FILES_${PN} += "${includedir}/alsa/*.h"
Run Code Online (Sandbox Code Playgroud)

当我在创建的映像的 rootfs 中查看 /usr/include 时,那里没有任何内容。不是香肠。

任何人有任何想法为什么?

谢谢!

boost alsa bitbake yocto

5
推荐指数
1
解决办法
6456
查看次数

Bitbake:如何列出图像中使用的所有配方和附加文件?

我正在使用OpenEmbedded-Core并创建了一个优先级为6的自定义层.几个月的开发已经过去了,现在我想将我们图层的优先级提高到8,因为来自另一个优先级为7的图层的追加文件正在干扰追加我在我的图层中添加了文件.

我的问题是,如何生成图像中使用的配方和.bbappend文件列表?

我想在进行优先级更改之前和之后生成列表,以便我可以比较它们(希望有一个difftool)来查看是否发生了任何意外的副作用,例如来自其他层的重要附加文件可能会被忽略.

我正在使用Angstrom发行版的angstrom-v2014.12-yocto1.7分支.

[编辑]

我现在主要只是想确定如何列出我的图像实际使用的.bbappend文件.

可以使用@pnxs建议的"bitbake -g your-image-name"或者.manifest文件(我喜欢使用的)来查看软件包列表,在我的情况下,它位于deploy/glibc /下图像/ imagename /.我最初询问如何生成"配方文件"列表,但我认为包列表就足够了.

关于.bbappends,我有一个案例,由于图层优先级,我自己的.bbappend被忽略了.我对我的图层优先级进行了更改,现在想看看是否会导致我的图像中任何其他位置的.bbappend文件被忽略.根据我的理解,使用"bitbake-layers show- appends "作为建议列出所有 .bbappends而不仅仅是那些实际用于创建图像的内容,因此这不符合我的要求.

recipe openembedded bitbake yocto

5
推荐指数
2
解决办法
9907
查看次数

bitbake:构建系统如何选择多层提供的配方?

元图层提供配方:

meta/recipes-graphics/x11-common/xserver-nodm-init.bb 
Run Code Online (Sandbox Code Playgroud)

meta-oe层提供配方:

meta-oe/recipes-graphics/xserver-nodm-init/xserver-nodm-init_2.0.bb
Run Code Online (Sandbox Code Playgroud)

我的问题是:

构建系统如何从多层中选择xserver-nodm-init?

它是否根据conf/bblayers中的图层顺序选择xserver-nodm-init配方?

openembedded bitbake yocto

5
推荐指数
1
解决办法
5445
查看次数

使用Yocto构建固件的最佳实践

我有一个基于rocko分支的Yocto构建系统,该系统为基于ARM的目标板生成图像.该主板上的一个芯片是一个基于ARM的小型微控制器,它与主CPU分开.它需要加载我必须构建的固件映像.

制作这种微控制器固件的配方很容易.它需要ARM交叉编译器,然后需要一些特殊的编译器选项来控制代码生成(对于cortex-m4 + thumb等).问题是,如果我设置一个正常的配方,它将假设我正在为目标ARM体系结构构建一些东西,这是一种需要不同代码生成选项的不同类型的ARM.我当然可以让固件Makefile覆盖为目标系统提供的交叉编译环境,并让Makefile只生成二进制固件映像.

但这将导致一个名义上用于目标ARM架构的封装,但其中包含一个二进制blob,用于闪存到目标板上的芯片上.

所以我的问题是,我应该如何制作一个固件的配方,该固件将在完全不同的架构上执行,而机器是yocto最终构建的?

看起来我需要创建专门为微控制器构建的配方,因此在某种程度上与正常的目标配方不同.

bitbake yocto

5
推荐指数
1
解决办法
516
查看次数

bitbake 删除 .bbappend 中的继承

我想使用 .bbappend 删除“继承”。

例如,

在组件.bb 中:

inherit something
Run Code Online (Sandbox Code Playgroud)

在组件.bbappend 中:

"remove_inherit" something
Run Code Online (Sandbox Code Playgroud)

如何使用 bbappend 删除继承配置?

是否可以?

bitbake

5
推荐指数
1
解决办法
2732
查看次数

如何确定是什么导致在 Yocto 中构建不需要的包?

我正在尝试使用配方为 RPi 构建一个控制台映像core-image-base,但在我的配置中的某个地方,我似乎打开了一些开关,使构建的配方数量增加了大约 1000 个,其中包括许多感觉不像的东西属于控制台图像(libx11gnome-desktop-testing等)

我试图找出为什么这些食谱被包含在我的构建中。到目前为止,我的方法是运行以下命令:

# Generate a massive dot file with all the dependencies in it
bitbake -g core-image-base

# grep through that file to find out what is bringing in
# gnome-desktop-testing.
cat task-depends.dot | grep -i gnome-desktop-testing | grep -vi do_package_write_rpm
Run Code Online (Sandbox Code Playgroud)

do_package_write_rpm从匹配中删除了,因为一切似乎都与它匹配。这留下了以下内容:

"core-image-base.do_build" -> "gnome-desktop-testing.do_build"
"core-image-base.do_rootfs" -> "gnome-desktop-testing.do_package_qa"
"core-image-base.do_rootfs" -> "gnome-desktop-testing.do_packagedata"
"core-image-base.do_rootfs" -> "gnome-desktop-testing.do_populate_lic"
"glib-2.0.do_package_qa" -> "gnome-desktop-testing.do_packagedata"
(followed by many dependencies between the tasks of the gnome-desktop-testing recipe) …
Run Code Online (Sandbox Code Playgroud)

bitbake yocto

5
推荐指数
1
解决办法
1768
查看次数

Yocto Dunfell 错误“没有可用的食谱”,单个自定义元层中的多台机器

我维护一个与 Dunfell 兼容的自定义 Yocto 元层。它支持基于 Microchip SAMA5D27 处理器的板。我在这一层中有几个 bbappend 文件,仅适用于来自 meta-atmel 和其他 Microchip 特定软件包的文件。

现在,我想重用此自定义元层的许多部分并支持来自不同供应商的新处理器。我在我的图层中创建了自己的新图像配方,其中不包含这些仅与 Microchip 相关的 bbappend 文件。

问题是 Yocto 会针对我的 bbappend 文件抛出错误“没有可用的食谱”。该错误似乎是在解析期间发生的,并且没有考虑我是否在当前目标中使用该配方。

我已经广泛寻找解决方案,但到目前为止一无所获。如何使用 1 个元层并维护不同的 bbappend 文件,同时能够为不同的目标构建切换机器变量?

比特烘烤版本:

root@buildmachine:/$ bitbake --version
BitBake Build Tool Core version 1.46.0
Run Code Online (Sandbox Code Playgroud)

我尝试在这些 bbappend 文件中使用 COMPATIBLE_HOST 和 COMPATIBLE_MACHINE 变量,但错误仍然存​​在。

# Only compatible with sama5d27 microchip
COMPATIBLE_HOST = "arm-poky-linux-musleabi"
COMPATIBLE_MACHINE = "sama5d27-wlsom1-ek-sd"
Run Code Online (Sandbox Code Playgroud)

错误输出:

root@buildmachine:~/Desktop/compulab/build-cmdline$ MACHINE=iot-gate-imx8 bitbake iot-gate-imx8-image
WARNING: Host distribution "ubuntu-20.04" has not been validated with this version of the build system; you may …
Run Code Online (Sandbox Code Playgroud)

linux build-system embedded-linux bitbake yocto

5
推荐指数
1
解决办法
8921
查看次数

无法将简单的内核模块添加到 Yocto 映像

目标

我想将linux 内核源代码树中提供的触摸屏驱动程序添加到我的 Yocto 映像中(该链接会将您带到goodix.c)。我基本上需要将其添加为内核模块。

解决方案

我遵循Yocto Mega 手册的合并树外模块部分。我的基础是他们的示例内核模块配方,称为hello-mod

  1. 在食谱中goodix-9271_0.1.bbRPROVIDES_${PN} = "kernel-module-goodix"
  2. layer.confMACHINE_EXTRA_RDEPENDS += "kernel-module-goodix"

问题

我的构建始终失败do_rootfs

Error: 
 Problem: package packagegroup-base-1.0-r83.imx6ul_var_dart requires packagegroup-machine-base, but none of the providers can be installed
  - package packagegroup-base-extended-1.0-r83.imx6ul_var_dart requires packagegroup-base, but none of the providers can be installed
  - package packagegroup-machine-base-1.0-r83.imx6ul_var_dart requires kernel-module-goodix, but none of the providers can be installed
  - conflicting requests
  - nothing provides kernel-module-goodix-5.4.3-imx6ul+gb40ccfdb73ea …
Run Code Online (Sandbox Code Playgroud)

kernel-module embedded-linux bitbake yocto

5
推荐指数
1
解决办法
5643
查看次数

如何使用 devtool 修复过时的补丁

我正在将一个图层kirkstone作为过时的补丁移植到该图层,该补丁无法再应用(到u-boot)。可以devtool用那个补丁来修复吗?问题是默认情况下devtool modify会应用补丁,因此无法加载工作区。

bitbake yocto

5
推荐指数
1
解决办法
2598
查看次数