【问题标题】:In yocto (poky) why is the layers config in the build/ folder?在 yocto (poky) 中,为什么层配置在 build/ 文件夹中?
【发布时间】:2017-08-24 14:59:22
【问题描述】:

我是 yocto 的新手。我正在尝试了解如何添加包,如何创建新图层等等......只是四处寻找。从克隆 poky 开始玩。

据我了解,bblayers.conf 文件对于项目配置和最终构建的内容(哪些层和包进入最终映像)至关重要。

这可能是错误的假设,但我也觉得 build/ 文件夹是您构建的东西(bitbake)所在的位置。图像,构建它们所需的很多东西,一大堆东西......如果你以某种方式破坏它,你可以删除它并重建它。或者您可以只复制所有内容而不使用 build/ 文件夹,然后在另一台计算机上继续工作。

显然情况并非如此。 build/conf/ 文件夹包含重要的 .conf 文件,例如 bblayers.conf

有人可以解释为什么会这样吗?有没有一种优雅的方式来分离项目配置和构建文件夹?

【问题讨论】:

标签: yocto bitbake


【解决方案1】:

Yocto 项目有几个层次,主要是:

-BSPDIR:TOPDIR(构建)、来源、设置环境
-BSPDIR/setup-environment:将所有变量初始化为用于 bitbake;
-BSPDIR/sources: 元数据/
-TOPDIR:conf/sstate-cache/cache/tmp/downloads/
-TOPDIR/downloads:配方获取包;

-TOPDIR/conf/ :存储所有配置。主要是bblayers.conf、local.conf、sanity_info;
-TOPDIR/conf/bblayers.conf:存储了将要​​加载的元数据的所有路径;
-TOPDIR/conf/local.conf:要构建的配置
-TOPDIR/conf/sanity_info:路径双重检查以确保上次编译中使用的所有路径都与当前编译匹配;
-TOPDIR/tmp/: 所有编译和构建工作都发生在哪里

BSPDIR/sources/poky/meta/conf/bitbake.conf

sources/poky/meta/conf/bitbake.conf:TMPDIR ?= "${TOPDIR}/tmp"
sources/poky/meta/conf/bitbake.conf:PERSISTENT_DIR = "${TOPDIR}/cache"
sources/poky/meta/conf/bitbake.conf:DL_DIR ?= "${TOPDIR}/downloads"
sources/poky/meta/conf/bitbake.conf:SSTATE_DIR ?= "${TOPDIR}/sstate-cache"

TOPDIR 是您在运行setup-environmentoe-init-build-env 时初始化的位置;所有其他 bitbake 配置环境变量可以根据您的需要在conf/local.conf 中更改;

例如修改conf/local.conf,将下载目录从TOPDIR/downloads改为;

DL_DIR ?= "/home/downloads/"

要创建新层,请观看此视频:https://www.youtube.com/watch?v=3HsaoVqX7dg

【讨论】:

  • 所以看起来TOPDIR 中的重要内容是conf 目录(我无法更改),我可以将其余部分配置到其他地方吗?因此,让一个名为build 的文件夹包含tmp, downloads, cache, sstate-cache 和一个名为project(或其他内容)的文件夹包含conf 文件夹是完全明智的吗?然后我可以删除我的build 文件夹并从project 重新生成它 - 它给我带来了将我的配置文件与 tmp、缓存、二进制文件等清楚地分开的优势?
  • 你是对的。您的 project 将是 topdir 并包含 conf。然后在 local.conf 中,将 TMPDIR、PERSISTENT_DIR、DL_DIR 和 SSTATE_DIR 的路径设置为 path/to/build/ 。大多数时候我们只删除 TMP 文件夹而不是所有内容,因为缓存和下载将使下次编译更快。
  • project 中保留conf 似乎可行,但我必须在每个source oe-init-build-env 之后删除build/conf。我已将oe-init-build-env 复制到我的项目根目录中,并对其进行了修改,使其不调用os-setup-builddir,只创建目录BUILDDIR
【解决方案2】:

您可能关注了Yocto Project Quick Start Guide

在 yocto 中安装(克隆 git 存储库和安装包)后的最早步骤是创建您的 OE(OpenEmbedded)环境,通过以下方式完成:

source oe-init-build-env

这会自动创建并引导您进入构建文件夹。 您可以将系统的任何目录作为此调用的参数(Reference Manual - Build Overview):

source oe-init-build-env [build_dir]

⤑ 这也是您的“项目配置”与实际构建文件夹分开的步骤。

⤑ 如您所料,实际上您最多只能复制图层而不是构建文件夹。更好的办法是将其他人的源代码留在他们的 git 存储库中,只复制和维护您自己的层。

【讨论】:

  • 我更感兴趣的是为什么配置会生成到构建目录中?除了其中的conf 文件夹之外,我希望build/ 文件夹(或任何build_dir 给定)易腐烂(我可以删除和重新生成而不会丢失任何重要内容)。我不明白为什么会这样(conf/build/)?
  • @VladV 这就是为什么您应该尽可能少地使用local.conf,而是在自定义machine.conf 中设置这些设置。然后你只需要在 local.conf 中设置机器变量,在 bblayers.conf 中设置使用的层
【解决方案3】:

这确实是现代 Yocto 构建系统中的一个问题。

文件 bblayers.conf 必须根据 MACHINEDISTRO 信息使用所有提供的信息进行合成(通常在 的帮助下repo 清单文件)层,通过:从每个可用层文件 layer.conf 以及 conf/machineconf/distro图片

bblayers.conf 通常是在 setup-environment 脚本的帮助下从基础层 conf/bblayers.conf 位置复制过来的.

这种方法不提供“一键式”可构建环境,但需要维护人员/开发人员查看 readme 以确定哪些层缺少要添加到 build/conf/bblayers.conf

【讨论】:

    猜你喜欢
    • 2018-03-15
    • 1970-01-01
    • 1970-01-01
    • 2014-08-31
    • 2021-06-03
    • 2021-02-24
    • 1970-01-01
    • 1970-01-01
    • 2012-07-30
    相关资源
    最近更新 更多