版本 4.3 (nanbield)

4.3 (nanbield) 迁移说明

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

支持的内核版本

本版本将 OLDEST_KERNEL 改为 "5.15",因此默认不支持更旧的内核。 这样做有两个原因:首先,glibc 可以移除兼容代码,仅使用现代内核 API, 从而优化系统性能;其次,即使在 32 位平台上也能支持 64 位时间,解决 Y2038 问题。

仍可覆盖此值,为旧内核构建,只是这不再属于默认支持的配置。 此设置不影响 SDK 可运行的内核版本,也不影响可用于执行构建的内核版本。

层名称覆盖的影响

通过新增的 FILE_LAYERNAME 变量和 layer-<layername> override, 代码现在可以知道配方来自哪个层。这用于按层启用 QA 检查。 对现有代码的影响是,QA 检查也会应用于其他层通过 bbappend 修改的配方。 例如,这类 bbappend 添加的补丁,现在必须在补丁头中指定 "Upstream-Status"。

编译变更

  • 32 位平台的代码现在启用大文件支持和 64 位 time_t 编译,以避免 Y2038 时间溢出问题。这会破坏 ABI,也可能导致未经测试的层中的现有程序失效。

支持的发行版

本版本新增支持在以下 GNU/Linux 发行版上运行 BitBake:

  • Ubuntu 22.10

  • Fedora 38

  • Debian 12

  • CentOS Stream 8

  • AlmaLinux 8.8

  • AlmaLinux 9.2

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

  • Fedora 36

  • AlmaLinux 8.7

  • AlmaLinux 9.1

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

移除 edgerouter 机器

meta-yocto-bsp 中面向 MIPS 架构的 edgerouter 参考 BSP 已移除, 因为其硬件已经有一段时间无法购买。目前没有合适的 MIPS 参考硬件替代它, 但 MIPS 架构仍会通过 QEMU 构建和启动测试获得测试覆盖。

Go 语言变更

  • 由于 go mod 已成为标准,移除了对 Glide 软件包管理器的支持。

systemd 变更

上游 systemd 现在对文件系统布局要求更严格,因此使用 systemd 时必须同时启用 usrmerge 功能。Poky 的 systemd 测试配置已相应更新。

配方变更

  • 现在,如果任意 ptest 未返回测试结果,ptest 运行时测试就会失败。

已弃用的变量

以下变量已弃用:

已移除的变量

以下变量已移除:

  • AUTHOR

  • PERLARCH

  • PERLVERSION

  • QEMU_USE_SLIRP:改为将 slirp 加入 TEST_RUNQEMUPARAMS。

  • SERIAL_CONSOLES_CHECK:已不再需要,因为启动 getty 前, 会检查 SERIAL_CONSOLES 中列出的所有控制台是否存在。

已移除的配方

本版本移除了以下配方:

  • apmd:已过时(MACHINE_FEATURES 中的 apm 也已移除)。

  • cve-update-db-native:功能由 cve-update-nvd2-native 取代。

  • gcr3:核心配方不再需要,移至 meta-gnome(仍提供 gcr,即 4.x 版本)。

  • glide:原因见 Go 语言变更。

  • libdmx:已过时。

  • linux-yocto 的 5.15 版本(改为提供 6.1 和 6.5 版本)。

  • python3-async:已过时,python3-gitdb 和其他核心配方均不再需要。

  • rust-hello-world:已有足够的其他 Rust 配方和测试用例,因此不再需要。

已移除的类

本版本移除了以下类:

输出文件命名变更

4.3 中镜像和 SDK 的输出文件名有一些细微差异。如果依赖现有命名方式 (例如在外部脚本中),可能需要修改配置或适应新命名。具体如下:

  • IMAGE_NAME 和 IMAGE_LINK_NAME 现在直接包含 IMAGE_NAME_SUFFIX 的值。实际效果是镜像输出文件名中会出现 .rootfs。 如果不希望使用 .rootfs 后缀,只需将 IMAGE_NAME_SUFFIX 设为 "", 镜像文件名和其符号链接名都会一致地遵循该设置。作为这一变更的一部分, 移除了对 imgsuffix 任务变量标志的支持。这主要是内部实现细节, 但如果通过类似 do_bootimg 的任务实现自定义镜像构建,可能曾使用此标志。

  • SDK_NAME 现在包含 IMAGE_BASENAME 和 MACHINE 的值, 从而为不同镜像和机器构建 SDK 时,能够确保名称唯一。

版本管理变更

  • 所有核心配方中的 PR 值均已移除。使用 PR 的发行版维护者 本来就需要自行管理这些值,因此零散设置的基础值已无太大用处。 如果依赖这些值(例如维护软件包版本只能递增的二进制软件包源), 请仔细检查输出,必要时借助 buildhistory 类, 确保软件包版本保持一致。

  • 不再支持通过配方文件名设置 PR 值。这种做法以前也很少使用。

  • 工作目录路径(WORKDIR)中不再包含 PE 和 PR。 这可能破坏某些工具对目录路径的假设,但这些工具本应从构建系统查询路径, 或避免从外部探查 WORKDIR。

  • 源码修订信息从 PV 移至 PKGV。用户可见的效果是 PV 中不再包含修订信息,而是在写出软件包时,通过 PKGV 将修订信息追加到 PV 的值(只要 PKGV 值中含有 "+")。 由于 STAMP 和 WORKDIR 使用 PV,可能会看到 目录名和戳记名的细微变化。

  • PV 中不再需要 SRCPV,但由于 SRCPV 的默认值现在是 "", 使用它实际上只是空操作。可以移除它并保留 "+",但目前尚未强制要求。

QEMU 变更

  • 如果用户已经通过 QB_OPT_APPEND 添加串口,runqemu 脚本不再一律向 QEMU 模拟机器添加两个串口(--serial null 和 -serial mon:stdio)。

    如果用户添加一个串口,则仅添加 --serial null,不再传入 -serial mon:stdio;如果用户添加多个串口,则也不再添加 --serial null。 这可能破坏某些现有的 QEMU 配置,因为它们预期执行 runqemu 时会添加这些串口。

    这一变更是为了避免串口数量超过两个,进而干扰自动化测试。

  • runqemu 现在使用 ip tuntap 命令代替 tunctl,因此 qemu-helper-native 配方不再构建 tunctl。如果自己的脚本出于某种原因 直接调用 tunctl,应改为调用 ip tuntap。

其他变更

  • 对于已经使用 PREFIX 的 virtual/XXX 提供者或依赖,移除了 -crosssdk 后缀及任何 MLPREFIX。两者无需并存,且会使自动依赖重写 变得不必要地复杂。通常这只影响内部工具链依赖,最终用户不会感知。 但如果自定义类或配方依赖旧提供者,则需要更新它们。