我正在尝试使 Yocto 配置开箱即用。
标准程序是修改
local.conf
来设置DISTRO
和MACHINE
,但是我发现这对于多台机器的配置和针对特定机器定制的图像来说很不方便。
我尝试了以下方法:
保留
local.conf
(即 DISTRO ?= "poky"
和 MACHINE ??= "qemux86-64"
)。
我有以下图像配置:
distro-image-default
设置所有发行版配置和 DISTRO = "distro"
。它应该可用于多台不同的机器。machine-image-default
设置机器相关的东西和MACHINE = "machine"
。这应该可用于多个发行版。distro-image-machine
,其中只有require
之前的两张图片这里的想法是能够将不同的发行版与不同的机器混合和匹配,而不必记住相应地设置
local.conf
。
在图像中设置发行版根本不起作用,我想是因为
?=
在local.conf
中使用。我可能可以忍受它。
但是,在图像中设置机器会产生以下错误:
ERROR: Nothing RPROVIDES 'packagegroup-cross-canadian-machine'
NOTE: Runtime target 'packagegroup-cross-canadian-machine' is unbuildable, removing...
Missing or unbuildable dependency chain was: ['packagegroup-cross-canadian-machine']
ERROR: Required build target 'distro-image-machine' has no buildable providers.
Missing or unbuildable dependency chain was: ['distro-image-machine', 'packagegroup-cross-canadian-machine']
在
local.conf
中设置同一台机器可按预期构建映像。
我想我对此有两个问题:
local.conf
?正如 @skandigraun 的评论所提到的,您可以根据需要使用
KAS
项目。
我不知道什么适合您的情况,但我会将这个答案提供给任何想了解
KAS
的人,并在将来提供一个快速示例。
手动执行此操作确实很难,因为这可能会产生多种适合或不适合您的情况的想法,例如:
使用
repo
实用程序自动同步所有图层,然后创建一个 shell 脚本,获取环境变量或其他内容来设置 Yocto TEMPLATECONF
。
使用
KAS
,如下所示:
您需要先安装它,查看kas-docs 假设您有一个名为
yocto-kas-configs
的项目文件夹,您可以按照以下示例操作:
yocto-kas-configs
|-- kas/
|-- common/
| |-- oe.yml
| |-- layers.yml
| `-- conf.yml
|
|-- machines/
| |-- machine1.yml
| `-- machine2.yml
|
|-- images/
| |-- common.yml
| |-- custom-image1.yml
| `-- custom-image2.yml
|
|-- custom-image1-machine1.yml
`-- ...
oe.yml
:包含 OE 和 Pokyheader:
version: 14
repos:
poky:
url: https://git.yoctoproject.org/git/poky
path: layers/poky
branch: kirkstone
layers:
meta:
meta-poky:
meta-yocto-bsp:
meta-openembedded:
url: https://git.openembedded.org/meta-openembedded
path: layers/meta-openembedded
branch: kirkstone
layers:
meta-oe:
meta-networking:
meta-python:
meta-gnome:
meta-initramfs:
meta-multimedia:
meta-webserver:
meta-filesystems:
meta-perl:
config.yml
:包含您的 local.conf
和 bblayers.conf
常用配置:header:
version: 14
bblayers_conf_header:
standard: |
POKY_BBLAYERS_CONF_VERSION = "2"
BBPATH = "${TOPDIR}"
BBFILES ?= ""
local_conf_header:
default: |
# -- Default local.conf from meta-poky/conf/local.conf.sample -- #
EXTRA_IMAGE_FEATURES ?= "debug-tweaks"
USER_CLASSES ?= "buildstats"
PATCHRESOLVE = "noop"
BB_DISKMON_DIRS ??= "\
STOPTASKS,${TMPDIR},1G,100K \
STOPTASKS,${DL_DIR},1G,100K \
STOPTASKS,${SSTATE_DIR},1G,100K \
STOPTASKS,/tmp,100M,100K \
HALT,${TMPDIR},100M,1K \
HALT,${DL_DIR},100M,1K \
HALT,${SSTATE_DIR},100M,1K \
HALT,/tmp,10M,1K"
PACKAGECONFIG:append:pn-qemu-system-native = " sdl"
PACKAGECONFIG:append:pn-nativesdk-qemu = " sdl"
layers.conf
:包含您的自定义常用图层,例如 meta-qt6
或其他内容。
machine1.yml
:包含machine1
的BSP层,示例:
header:
version: 14
machine: machine1
repos:
meta-machine1:
url: <URL>
path: layers/meta-machine1
branch: <BRANCH>
common.yml
:包含所有图像的自定义 includes
:header:
version: 14
includes:
- kas/common/oe.yml
- kas/common/layers.yml
- kas/common/conf.yml
# You can define here common DISTRO if you have one
custom-image1.yml
:header:
version: 14
includes:
- kas/images/common.yml
target: custom-image
custom-image1-machine1.yml
:图像custom-image
与MACHINE = "machine1"
:header:
version: 14
includes:
- kas/images/custom-image1.yml
- kas/machines/machine1.yml
现在你可以运行:
git clone <URL>/yocto-kas-configs
kas build yocto-kas-configs/kas/custom-image1-machine1.yml
这将为您创建此结构(假设您克隆到名为
yocto
的文件夹中):
`-- yocto
|-- yocto-kas-configs <== Your project
|-- layers <== All specified repos
`-- build <== The actial build folder