在 yocto (poky) 中,为什么 build/ 文件夹中的层配置?

In yocto (poky) why is the layers config in the build/ folder?

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

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

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

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

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

您可能已经关注了 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]

⑤ 这也是您的 'project config' 与实际构建文件夹分开的步骤。

⑤ 正如您假设的那样,实际上您最多会复制图层而不是构建文件夹。更好的办法是将其他人的资源留在他们的 git 存储库中,只复制和维护您自己的图层。

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

-BSPDIR: TOPDIR (build),sources,setup-environment
-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: path double check以确保上次编译中使用的所有路径与当前编译匹配;
-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

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

文件bblayers.conf必须基于MACHINEDISTRO合成使用所有提供的信息(通常在 repo 清单文件的帮助下)层:从每个可用层文件 layer.conf 收集数据作为以及 conf/machine, conf/distro, images.

而不是bblayers.conf通常是从基础层conf/bblayers.conf位置复制过来的帮助设置环境脚本。

此方法不提供“一键式”构建环境,但需要maintainer/developer查看自述文件以确定缺少哪些层要添加到build/conf/bblayers.conf.