版本 5.3 (whinlatter)
5.3 (whinlatter) 迁移说明
本节介绍如何从上一版本迁移到 Yocto Project 5.3 版本 (代号“whinlatter”)。
Poky 仓库的 master 分支不再更新
Poky 仓库的 master 分支不再更新。这 并不 意味着 Poky 发行版已弃用,而是克隆基础层以及设置 Poky 构建环境的方式 发生了变化。
可以选择以下任一方式:
按照 Yocto Project 开发任务手册的 手动设置 Poky 参考发行版 一节,分别克隆 bitbake、 openembedded-core、 meta-yocto 和 yocto-docs。
按照 Yocto Project 快速构建 文档使用新的
bitbake-setup工具。bitbake-setup的参考文档见 BitBake 用户手册的 Setting Up The Environment With bitbake-setup。
Whinlatter 之前的版本仍会更新其在 Poky 仓库中的分支,直到支持期结束。
这一变更的更多背景信息见: https://lists.openembedded.org/g/openembedded-architecture/message/2179
WORKDIR 变更
不再支持 S = ${WORKDIR}/something
不再支持将配方的 S 设置为 ${WORKDIR}/something,
这样设置会报错。应将配方改为:
S = "${UNPACKDIR}/something"
应移除 S = ${WORKDIR}/git 和 S = ${UNPACKDIR}/git
Git 获取器现在解包到 BB_GIT_DEFAULT_DESTSUFFIX 目录,
而不是 UNPACKDIR 下的 git/ 目录。
OpenEmbedded-Core (OE-Core) 的
bitbake.conf 将
BB_GIT_DEFAULT_DESTSUFFIX 设置为 BP。
此位置与 bitbake.conf 设置的 S 默认值一致,因此配方中的 S 设置可以且应该移除。
注意,如果 S 设置为 Git 检出目录的子目录,则应根据上一条进行调整:
S = "${UNPACKDIR}/${BP}/something"
配方的其他位置也可能将源码检出位置硬编码为 "git"。如果出现在 SRC_URI 中,应替换为 BB_GIT_DEFAULT_DESTSUFFIX;其他位置则替换为 BP。
避免繁琐手动编辑的调整方法
可以用以下 sed 命令移除整个层中的 S = "${WORKDIR}/git 设置:
sed -i "/^S = \"\${WORKDIR}\/git\"/d" `find . -name '*.bb' -o -name '*.inc' -o -name '*.bbclass'`
随后,以下命令可将剩余的 S 赋值改为引用 UNPACKDIR, 而不是 WORKDIR:
sed -i "s/^S = \"\${WORKDIR}\//S = \"\${UNPACKDIR}\//g" `find . -name '*.bb' -o -name '*.inc' -o -name '*.bbclass'`
第一项修改可能产生许多连续空行,可用以下命令移除:
sed -i -z -E 's/([ \t\f\v\r]*\n){3,}/\n\n/g' `find . -name '*.bb' -o -name '*.inc'`
BitBake Git 获取器的 tag 参数
Git 获取器(git://)的 tag= 参数已更新。标签对应的提交 SHA 将与
SRCREV 变量或 SRC_URI 中 URI 的 rev= 参数提供的值比较。
使用 Git 获取器获取采用标签发布的仓库时,强烈建议将该参数加入 URI。
等号赋值两侧的空格
如果配方中的 = 赋值两侧没有空白字符,现在会显示新的警告:
<filename>:<line number> has a lack of whitespace around the assignment: '<assignment>'
例如,以下赋值会触发警告:
FOO="bar"
FOO= "bar"
FOO ="bar"
应替换为:
FOO = "bar"
应重命名含连字符的 Wic 插件
Python 升级后,文件名包含连字符(-)的
Wic 插件
不再受支持。必须重命名插件文件,将连字符替换为下划线(_)。
也建议更新所有 WKS 文件,将连字符替换为下划线。例如,bootimg-partition.py
插件已重命名为 bootimg_partition.py,因此使用此插件的 WKS 文件应将每处
--source bootimg-partition 改为 --source bootimg_partition。
不过,当前 WIC 代码会自动将所有 --source 调用中的连字符转换为下划线,
因此使用 OpenEmbedded-Core (OE-Core) 上游插件的现有 WKS 文件不会失效。
KERNEL_IMAGETYPE 不再支持 fitImage
KERNEL_IMAGETYPE 不再支持 fitImage 类型。创建 FIT 镜像的逻辑已移出
kernel 类。应改为创建一个新配方来构建此 FIT 镜像,具体方法见
5.3 (whinlatter) 迁移说明的
已移除的类 一节。
systemd 可预测接口命名不再默认使用 MAC 策略
过去,启用 pni-names 发行版功能 时,
systemd 配方
会强制将 "mac" 策略设为默认值。
这一行为未跟随上游变更,因此现已取消。现在启用 pni-names
发行版功能 时,会选择 systemd 的默认策略
(来自 https://github.com/systemd/systemd/blob/v257.8/network/99-default.link)。
若要在 systemd 中恢复 "mac" 策略(撰写本说明时为 257.8 版本),
应按照 systemd.link(5) 设置 NamePolicy 和 AlternativeNamesPolicy。
移除没有许可证的 Linux 内核固件
linux-firmware 配方现在默认排除未提供任何许可证信息的固件。
配方通过名为 REMOVE_UNLICENSED 的变量维护内部排除列表;
如果需要没有许可证的固件,可以覆盖此变量。完整的已移除固件列表见
该配方。
native 和 nativesdk 类中 *FLAGS 变量的行为变更
此前,native 和 nativesdk 类对 CPPFLAGS、CFLAGS、CXXFLAGS 和 LDFLAGS 变量分别使用以下直接赋值:
CPPFLAGS = "${BUILD_CPPFLAGS}"
CFLAGS = "${BUILD_CFLAGS}"
CXXFLAGS = "${BUILD_CXXFLAGS}"
LDFLAGS = "${BUILD_LDFLAGS}"
以及:
CPPFLAGS = "${BUILDSDK_CPPFLAGS}"
CFLAGS = "${BUILDSDK_CFLAGS}"
CXXFLAGS = "${BUILDSDK_CXXFLAGS}"
LDFLAGS = "${BUILDSDK_LDFLAGS}"
当配方试图用 += 运算符追加这些变量时,会产生赋值顺序竞争。
因此,若希望修改同时适用于目标、native 和
nativesdk 上下文,配方可以改用 :append。
现在,配方可以安全地使用 += 运算符实现同样的目的。
这一变更也意味着,过去用 += 运算符所作的赋值原来仅作用于目标上下文,
现在则 同时作用于三者:目标、native 和
nativesdk 上下文。
无意中依赖旧行为的配方,应将这些赋值改为使用 TARGET_ 变量,例如将:
CFLAGS += "something"
改为:
TARGET_CFLAGS += "something"
参见 https://git.openembedded.org/openembedded-core/commit/?id=a157b2f9d93428ca21265cc860a3b58b3698b3aa。
支持的内核版本
本版本将 OLDEST_KERNEL 设置为 5.15,因此默认不支持更旧的内核。 详情见 4.3 迁移说明。
支持的发行版
与此前版本相比,新增支持在以下 GNU/Linux 发行版上运行 BitBake:
Debian 13 (Trixie)
Fedora 42
Ubuntu 25.04
Ubuntu 25.10
参见 所有受支持的发行版。
已移除的变量
以下变量已移除:
BUILDHISTORY_RESET:过去将其设置为非空值,会在当前 BitBake 调用中移除 buildhistory 的旧内容,并替换为此次构建所产生 内容的信息。该功能部分失效,且难以维护。GPE_MIRROR:该变量过去包含 URL "https://web.archive.org/web/20160319203545/http://gpe.linuxtogo.org/download/source/", 但 OE-Core 中没有任何配方使用它。
已移除的配方
本版本移除了以下配方:
libsoup-2.4:OpenEmbedded-Core (OE-Core) 中最后一个使用者gst-examples已升级,并移除了对libsoup-2.4的依赖。 该配方已移至meta-oe。glibc-y2038-tests:此配方仅提供测试,而这些测试现在由glibc-testsuite提供,因此移除。python3-ndg-httpsclient:核心中对此配方的最后一项依赖已于 2024 年 5 月 通过 dfa482f1998 ("python3-requests: cleanup RDEPENDS") 移除,且没有其他使用者。xf86-input-mouse:该项目已停止支持 Linux。xf86-input-vmmouse:它在运行时依赖已停止支持 Linux 的xf86-input-mouse。babeltrace:移除,改用babeltrace2。cwautomacros:一组早已过时的自定义 autotools* 宏, 没有任何其他配方使用它。rust-llvm:Rust 和 LLVM 配方已调整为依赖llvm配方,因此移除。
已移除的 PACKAGECONFIG 条目
dropbear:enable-x11-forwarding(重命名为x11)libxml2:ipv6squashfs-tools:reproduciblemesa:kmsro,osmesa,xasystemd:dbus
已移除的类
本版本移除了以下类:
kernel-fitimage.bbclass:由 kernel-fit-image 类取代。 新实现解决了长期存在的 问题 12912。如果使用内核 FIT 镜像支持,需要:
确保 KERNEL_CLASSES 变量包含
kernel-fit-extra-artifacts, 使所需文件可在 DEPLOY_DIR_IMAGE 目录中获取:KERNEL_CLASSES += "kernel-fit-extra-artifacts"
使用专门的 FIT 镜像配方,而不是基础内核配方。例如,不再使用:
bitbake linux-yocto
现在改用以下命令构建 FIT 镜像:
bitbake linux-yocto-fitimage
对于自定义内核配方,通常应创建相应的自定义 FIT 镜像配方。
如果在根文件系统中使用 FIT 镜像替代内核镜像,请在机器配置文件中 添加以下配置:
# Create and deploy the vmlinux artifact which gets included into the FIT image KERNEL_CLASSES += "kernel-fit-extra-artifacts" # Do not install the kernel image package RRECOMMENDS:${KERNEL_PACKAGE_NAME}-base = "" # Install the FIT image package MACHINE_ESSENTIAL_EXTRA_RDEPENDS += "linux-yocto-fitimage" # Configure the image.bbclass to depend on the FIT image instead of only # the kernel to ensure the FIT image is built and deployed with the image KERNEL_DEPLOY_DEPEND = "linux-yocto-fitimage:do_deploy"
更多信息见 kernel-fit-image 一节。
icecc.bbclass:报告显示该类自 Yocto Mickledore 起就已无法正常工作, 说明使用者可能很少。它没有自动化测试,而且难以建立和维护测试环境。 原来的用户和维护者现在也已不再使用它。
其他变更
xserver-xorg:移除${PN}-xwayland子包,因为xwayland现在已有独立配方。gdk-pixbuf:移除作为配方 PACKAGECONFIG 一部分的GDK_PIXBUF_LOADERS变量。现在可直接修改 PACKAGECONFIG 达到相同效果。移除
meta/conf/distro/include/distro_alias.inc包含文件。 该文件将配方名称关联到一个或多个发行版软件包名,但已不再使用和维护。从
nghttp2配方中移除nghttp2-proxy软件包。一次升级后,该配方仅构建库 (因为配方的 EXTRA_OEMAKE 默认包含-DENABLE_APP=OFF), 导致nghttp2-proxy软件包变为空包。移除
util-linux配方中的util-linux-fcntl-lock软件包, 因为util-linux的flock命令现在支持--fcntl标志。目前使用
fcntl-lock命令的配方应改用flock --fcntl。barebox已从 v2025.02.0 更新到 v2025.09.0。迁移建议见 上游迁移指南。