版本 5.2 (walnascar)

5.2 (walnascar) 迁移说明

本节介绍如何从上一版本迁移到 Yocto Project 5.2 版本 (代号“walnascar”)。

从 IMAGE_FEATURES 移除 debug-tweaks

debug-tweaks 镜像功能现已移除,因为其名称没有清楚说明实际效果: 生成允许 root 用户无密码登录的镜像。

要达到相同效果,应手动将过去由 debug-tweaks 添加的功能加入 IMAGE_FEATURES 变量。这些功能为:

  • allow-empty-password

  • allow-root-login

  • empty-root-password

  • post-install-logging

相应语句如下:

IMAGE_FEATURES += "allow-empty-password allow-root-login empty-root-password post-install-logging"

可用镜像功能列表见 Yocto Project 参考手册的 镜像功能 一节。

支持的内核版本

本版本将 OLDEST_KERNEL 设置为 5.15,因此默认不支持更旧的内核。 详情见 4.3 迁移说明。

支持的发行版

与此前版本相比,新增支持在以下 GNU/Linux 发行版上运行 BitBake:

  • Fedora 41

  • CentOS Stream 9

同时,不再支持以下较早的发行版:

  • CentOS Stream 8

  • Fedora 38

  • OpenSUSE Leap 15.4

  • Ubuntu 20.04

参见 所有受支持的发行版。

Rust 语言变更

systemd 变更

  • Systemd 更新到 255 版本后,移除了 split-usr 和 unmerged-usr 支持。 此选项原来允许在 /lib、/sbin 或 /bin 等目录 未 合并到 /usr 的系统上安装 Systemd。

    因此,systemd 配方不再包含 usrmerge PACKAGECONFIG 选项, 因为该行为现在是默认要求。

  • systemd.bbclass:如果 systemd 服务文件通过 Also 引用并启动其他服务文件,过去会将这些服务文件自动加入同一软件包的 FILES 变量。例如:

    a.service 包含:

    [Install]
    Also=b.service
    

    如果 a.service 被打包到软件包 A,b.service 也会自动打包到 A。 即使通过 FILES 和 SYSTEMD_SERVICE 变量将 b.service 显式加入软件包 B,也仍会发生这一行为,导致无法将这些服务拆分到不同软件包。 因此,已移除服务文件的这一自动行为(套接字文件不受影响)。 现在必须将所有服务文件显式加入 FILES。

  • 将 create-log-dirs 重新加入配置选项。要启用持久日志,用户现在可以将 journald.conf 的 "Storage" 选项设为 "persistent"。 此时日志使用 /var/log/journal 目录,而不是 /run/log。

  • 如果 DISTRO_FEATURES 中没有 pni-names,现在会禁用 systemd 的 可预测网络接口命名 功能。此前,即使 DISTRO_FEATURES 不包含 pni-names,该功能仍然启用。 如果希望保留 systemd 的这一行为,请务必将该功能加入 DISTRO_FEATURES。

多配置变更

默认多配置的 BB_CURRENT_MC 值由 default 改为空字符串, 以避免在 BitBake 内部映射这些值。某些情况下原本就没有进行映射, 因此这一变更也修复了一些隐蔽的错误。

任何依赖 BB_CURRENT_MC 默认等于 default 的逻辑, 都应改为判断它是否等于空字符串。

虚拟工具链提供者变更

对于 BB_VIRTUAL_RECIPE_PROVIDERS 中列出的特定关键工具链提供者, 现在支持按配方选择虚拟提供者。作为这项支持的一部分,cross 提供者移除了 三元组前缀(TARGET_PREFIX、SDK_PREFIX 和 HOST_PREFIX), 从而简化并统一命名。以下示例展示如何将这些变量引用改为新的 cross 语法:

virtual/${HOST_PREFIX}binutils -> virtual/cross-binutils
virtual/${TARGET_PREFIX}binutils -> virtual/cross-binutils

virtual/${HOST_PREFIX}gcc -> virtual/cross-cc
virtual/${TARGET_PREFIX}gcc -> virtual/cross-cc
virtual/${SDK_PREFIX}gcc -> virtual/nativesdk-cross-cc

virtual/${HOST_PREFIX}compilerlibs -> virtual/compilerlibs
virtual/${TARGET_PREFIX}compilerlibs -> virtual/compilerlibs
virtual/nativesdk-${SDK_PREFIX}compilerlibs -> virtual/nativesdk-compilerlibs

virtual/${TARGET_PREFIX}g++ -> virtual/cross-c++

PREFERRED_PROVIDER 的赋值可按如下方式转换:

PREFERRED_PROVIDER_virtual/${TARGET_PREFIX}binutils -> PREFERRED_PROVIDER_virtual/cross-binutils
PREFERRED_PROVIDER_virtual/${SDK_PREFIX}binutils -> PREFERRED_PROVIDER_virtual/cross-binutils:class-nativesdk
PREFERRED_PROVIDER_virtual/${SDK_PREFIX}g++ -> PREFERRED_PROVIDER_virtual/nativesdk-cross-c++

上述示例涵盖大多数情况,但有时无法直接替换。更多示例见 OpenEmbedded-Core (OE-Core) 中的提交 "classes/recipes: Switch virtual/XXX-gcc to virtual/cross-cc (and c++/binutils)"。

autotools* 变更

  • aclocal 的调用方式发生变化,ACLOCALDIR 和 ACLOCALEXTRAPATH 不再使用。

  • 不再自动查找包含 m4 文件的目录并传给 autoreconf。 如果配方因找不到 m4 宏而配置失败,通常可在配方中设置 EXTRA_AUTORECONF += "-I path/to/m4" 解决。

  • autotools* 类现在要求所有继承它的配方都有 configure 脚本。配置脚本的位置存放在 CONFIGURE_SCRIPT 变量中。 如果缺少该脚本,do_configure 任务会失败。

UBOOT_ENTRYPOINT 变更

UBOOT_ENTRYPOINT 变量的值现在应带有 0x 前缀。例如,原来的赋值:

UBOOT_ENTRYPOINT ?= "20008000"

现在应替换为:

UBOOT_ENTRYPOINT ?= "0x20008000"

Git 获取器:移除单个 URL 对应多个修订版本的支持

BitBake 已移除 SRC_URI 中单个 URL 对应多个 Git 修订版本的支持, 因此不再支持以下语法:

SRC_URI = "git://some.host/somepath;bareclone=1;branch=branchX,branchY;name=nameX,nameY"
SRCREV_nameX = "xxxxxxxxxxxxxxxxxxxx"
SRCREV_nameY = "yyyyyyyyyyyyyyyyyyyy"

核心仓库很少使用这一机制,因为它仅适用于由配方自行处理 Git 检出的裸克隆 (SRC_URI 的 bareclone=1 选项)。移除此支持简化了多处代码逻辑。

如果某个配方使用此机制,可以将源码获取拆分为两个独立条目:

SRC_URI = "git://some.host/somepath;bareclone=1;branch=branchX;name=nameX \
           git://some.host/somepath;bareclone=1;branch=branchY;name=nameY"
SRCREV_nameX = "xxxxxxxxxxxxxxxxxxxx"
SRCREV_nameY = "yyyyyyyyyyyyyyyyyyyy"

Git 获取器:SRC_URI 现在必须提供 branch 参数

在 SRC_URI 中指定 Git 仓库时,现在必须提供 branch 参数,例如:

SRC_URI = "git://some.host/somepath;branch=branchX"

缺少 branch 参数过去仅产生警告,现在则会报错。

配方变更

  • libnss-mdns 配方现已重命名为 avahi-libnss-mdns,以避免与 meta-networking 冲突。

  • 由于更新到 Glibc 2.41 后出现回归问题,移除了 valgrind 配方的 ptest 支持。

已移除的变量

以下变量已移除:

  • PACKAGE_SNAP_LIB_SYMLINKS:与无人维护且已过时的 "micro" 发行版 相关。

  • SETUPTOOLS_INSTALL_ARGS:已过时且未使用的变量。

  • BB_DANGLINGAPPENDS_WARNONLY:不再支持在 .bbappend 文件无法应用到 原配方时仅向用户发出警告。替代方案见 Yocto Project 开发任务手册的 通过自己的层追加其他层元数据 一节。

已移除的配方

本版本移除了以下配方:

  • liburi-perl:移至 meta-perl。

  • python3-isodate:移至 meta-python。

  • python3-iniparse:openembedded-core 和 meta-openembedded 中均无使用者,因此移除。

  • blktool:2004 年作为 hdparm 的替代工具创建,之后未再更新 (而 hdparm 仍在积极开发)。

  • cargo-c-native:转换为目标配方,并重命名为 cargo-c。

  • libnss-mdns:重命名为 avahi-libnss-mdns。

已移除的类

本版本移除了以下类:

  • migrate_localcount.bbclass:已过时,其代码早在 2012 年就已移除。

已移除的功能

其他变更

  • ZSTD_COMPRESSION_LEVEL 现在是普通整数,而不是带连字符前缀的命令行选项 (例如应设置为 3,而不是 -3)。

  • 此前,U-Boot 配方和 kernel-fitimage.bbclass 都会处理 UBOOT_ENV。 但将 U-Boot 脚本加入内核 FIT 镜像是另一项独立操作,应使用独立变量。 因此,kernel-fitimage.bbclass 不再处理 UBOOT_ENV。 应使用新变量 FIT_UBOOT_ENV 将 U-Boot 脚本加入 FIT 镜像。

  • eSDK 中移除了 devtool ide-sdk 工具 (但它仍可在 BitBake 环境中使用)。