版本 4.1 (langdale)

4.1 (langdale) 迁移说明

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

最低 make 版本现在为 make 4.0

glibc 现在要求使用 make 4.0 构建,因此构建主机也必须安装此版本。 新增的 buildtools-make 压缩包仅提供 make 4.0,适用于没有当前可用 make 4.x 的主机发行版。如果还需要其他工具,可以使用已更新的 buildtools 压缩包。 更多信息见 构建主机所需的软件包。

安装补充软件包时忽略推荐依赖

安装补充软件包时(例如构建 SDK 时安装 -dev 和 -dbg 包, 或在 IMAGE_FEATURES 中加入 dev-deps 时), 不再安装由 RRECOMMENDS 定义的推荐依赖。

若要检查这一变更后的镜像内容,参见 检查镜像/SDK 变更。 必要时可将软件包显式加入镜像配方的 IMAGE_INSTALL, 或 SDK 的 TOOLCHAIN_TARGET_TASK。

dev 依赖现在改为推荐依赖

${PN}-dev 软件包现在默认使用 RRECOMMENDS 而非 RDEPENDS 引入主软件包。这利用了前述补充软件包安装不再跟随 RRECOMMENDS 的变更。 例如,对于同时包含 openssh 和 dropbear 的镜像,其 SDK 现在可以成功构建。

dropbear 现在推荐 openssh-sftp-server

openssh 已将 scp 客户端传输文件的协议从 scp 改为 sftp。 这意味着 Fedora 36 等当前发行版中的 scp,无法再与运行 dropbear 但未安装 sftp 服务器的系统相互传输文件。

openssh 的 sftp 服务器体积小(未压缩时为 200kb)且可独立运行, 因此将它加入软件包组是保留用户预期功能的最佳方式。如果希望避免此依赖,可以:

  1. 在 IMAGE_INSTALL 中使用 dropbear 代替 packagegroup-core-ssh-dropbear (或不使用 IMAGE_FEATURES 中的 ssh-server-dropbear),或者

  2. 将 openssh-sftp-server 加入 BAD_RECOMMENDATIONS。

类现在按使用上下文分目录

.bbclass 文件现已采用分目录结构。仅供配方继承的类 (例如配方文件中的 inherit、IMAGE_CLASSES 或 KERNEL_CLASSES) 应位于 classes-recipe 子目录;用于全局继承的类 (例如通过 INHERIT +=、PACKAGE_CLASSES、USER_CLASSES 或 INHERIT_DISTRO)应位于 classes-global。 现有 classes 子目录中的类仍可像以前一样在任何上下文使用。

除了手动浏览类文件时需要知道新的位置,通常不需要更改配置。 但如果配置在错误的上下文使用某些类,现在会在解析期间报错。例如, 在 build/conf/local.conf 中写入以下内容现在会报错:

INHERIT += "testimage"

由于 testimage 仅用于影响镜像配方,正确写法是:

IMAGE_CLASSES += "testimage"

SRC_URI 中缺少本地文件现在会报错

如果 SRC_URI 引用的文件不存在,4.1 会在解析时报错,过去则仅产生警告。 过去在多构建配置场景中(例如针对多个目标机器),某个配置不构建某些配方, 因而可以忽略这些警告。现在遇到这种情况,需要仅在有效的配置中有条件地 向 SRC_URI 添加条目,或通过 COMPATIBLE_MACHINE / COMPATIBLE_HOST 使配方在缺少文件的配置中不可用,从而避免解析它。

QA 检查变更

  • buildpaths QA 检查现在默认在 WARN_QA 中启用, 因此输出文件中出现任何构建系统路径都会触发警告。如果自己的配方出现这些警告, 为实现完整的二进制可复现性,应调整配方构建以移除这些路径。 如需对特定配方禁用警告,可以使用 INSANE_SKIP; 如需对整个构建禁用,可调整 WARN_QA。 更多信息见 buildpaths QA 检查。

  • do_qa_staging 现在会检查 SYSROOT_DIRS 指定的所有目录中的 shebang 长度, 因为内核规定了其最大长度。对于向系统根目录写入脚本的 native 配方, 如果脚本的 shebang 行过长,就会报错。必要时可以通过 INSANE_SKIP 跳过, 但最佳做法当然是修复脚本。新增的 create_cmdline_shebang_wrapper 函数 可在配方的 do_install 或 do_install:append 等位置调用, 创建包装脚本来解决此类问题。用法示例见 libcheck 配方。

其他变更

  • udev-extraconf 中的 mount.blacklist 已重命名为 mount.ignorelist。 如果通过 udev-extraconf 定制此文件,需要相应更新其 .bbappend。

  • help2man-native 已从隐式系统根目录依赖中移除。 如果配方需要它,现在应显式加入配方的 DEPENDS。

  • 对于使用 systemd 的镜像,重启看门狗超时由上游默认的 10 分钟改为 60 秒。 若要覆盖,可将 WATCHDOG_TIMEOUT 设为所需的秒数。 注意,同一变量也指定 watchdog 工具使用的超时(如果构建该工具)。

  • image-buildinfo 类现在默认写入 ${sysconfdir}/buildinfo, 而不是 ${sysconfdir}/build,即 IMAGE_BUILDINFO_FILE 的默认值已变更。 如果代码在构建时或运行时从镜像读取此文件,需要更新代码, 或自行指定 IMAGE_BUILDINFO_FILE 的值。

  • archiver 类的默认 ARCHIVER_OUTDIR 值不再包含 MACHINE,以避免多配置设置中重复运行归档任务。 如果自定义代码会处理 archiver 类归档的文件, 可能需要调整以适应新结构。

  • 如果不使用 systemd,udev 现在会使用标签(LABEL 或 PARTLABEL) 设置设备挂载点。例如:

    /run/media/rootfs-sda2
    

    而不是:

    /run/media/sda2
    
  • icu 不再提供 icu-config 配置工具。上游已说明 icu-config 已弃用, 不应继续使用。引用它的代码需要更新,例如改用 pkg-config。

  • rng-tools 的 systemd 服务名由 rngd 改为 rng-tools。

  • 移除了 DISTRO_FEATURES 中的 largefile 条目。 过去可选的大文件支持现在始终启用。

  • Python 的 zoneinfo 模块已拆分到独立的 python3-zoneinfo 软件包。

  • connman 配方中用于启用 wpa_supplicant 的 PACKAGECONFIG 选项 重命名为 "wpa-supplicant"。如果设置了包含此选项的 PACKAGECONFIG, 需要更新配置。相关的 WIRELESS_DAEMON 变量现在接受新的 wpa-supplicant 名称,并同时影响 packagegroup-base 和 connman。

  • wpa-supplicant 配方不再使用静态且过时的 defconfig, 改为使用上游版本并根据 PACKAGECONFIG 作适当修改。 如果定制了此文件,需要更新定制内容。

  • python_pep517 引入 picobuild 后,不再支持 PEP517_BUILD_API 变量。应移除所有对此变量的引用。

已移除的配方

本版本移除了以下配方:

  • alsa-utils-scripts:合并到 alsa-utils

  • cargo-cross-canadian:经优化后不再需要

  • lzop:已过时,上游无人维护

  • linux-yocto (5.10):当前提供 5.15 和 5.19

  • rust-cross:经优化后不再需要

  • rust-crosssdk:经优化后不再需要

  • rust-tools-cross-canadian:经优化后不再需要

  • xf86-input-keyboard:已过时(由 libinput/evdev 取代)