版本 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 运行时测试就会失败。
已弃用的变量
以下变量已弃用:
已移除的变量
以下变量已移除:
AUTHORPERLARCHPERLVERSIONQEMU_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 配方和测试用例,因此不再需要。
已移除的类
本版本移除了以下类:
glide:原因见 Go 语言变更。
输出文件命名变更
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。两者无需并存,且会使自动依赖重写 变得不必要地复杂。通常这只影响内部工具链依赖,最终用户不会感知。 但如果自定义类或配方依赖旧提供者,则需要更新它们。