在镜像配方中设置发行版和机器?

问题描述 投票:0回答:1

我正在尝试使 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
中设置同一台机器可按预期构建映像。

我想我对此有两个问题:

  1. 为什么在镜像配置中设置机器会破坏构建过程?
  2. 是否有一些更简单的方法可以在不修改的情况下实现多个构建配置
    local.conf
yocto bitbake
1个回答
0
投票

正如 @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 和 Poky
header:
  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
© www.soinside.com 2019 - 2024. All rights reserved.