6.1 (blacksail) 迁移说明
本节介绍如何从上一版本迁移到 Yocto Project 6.1 版本 (代号“blacksail”)。新功能与增强功能列表见 6.1 (blacksail) 发布说明。
支持的内核版本
本版本将 OLDEST_KERNEL 设置为 5.15,因此默认不支持更旧的内核。 详情见 4.3 迁移说明。
支持的发行版
与此前版本相比,新增支持在以下 GNU/Linux 发行版上运行 BitBake:
AlmaLinux 10
Fedora 44
Rocky Linux 10
参见 所有受支持的发行版。
useradd:将 GROUPMEMS_PARAM 赋值替换为 USERMOD_PARAM
从 4.20 版本开始,shadow 配方移除了 groupmems 命令。
usermod 命令能够实现 groupmems 提供的相同功能。
可以将 GROUPMEMS_PARAM 的赋值转换为 USERMOD_PARAM,将:
GROUPMEMS_PARAM:${PN} = "--add user --group group1; \
--add user --group group2"
替换为:
USERMOD_PARAM:${PN} = "--append --groups group1 user; \
--append --groups group2 user"
也可以简写为:
USERMOD_PARAM:${PN} = "--append --groups group1,group2 user"
更多信息见 b8da733。
移除 oe.utils.all_distro_features() 和 oe.utils.any_distro_features()
OpenEmbedded-Core (OE-Core) 已移除 oe.utils.all_distro_features()
和 oe.utils.any_distro_features() 函数。
可以将它们替换为 bb.utils.contains() 和 bb.utils.contains_any() 调用:
oe.utils.all_distro_features("x y", ...) -> bb.utils.contains("DISTRO_FEATURES", "x y", ...)
以及:
oe.utils.any_distro_features("x y", ...) -> bb.utils.contains_any("DISTRO_FEATURES", "x y", ...)
LICENSE 现在使用 SPDX License Expression
LICENSE 变量现在使用 SPDX License Expression, 取代过去使用的自定义许可证表达式。
新表达式要求进行以下变更:
将
&运算符替换为AND将
|运算符替换为OR任何不是有效 SPDX License Expression 的许可证值都会报错。
仍允许自定义许可证(非 SPDX License Identifier),但必须加上
LicenseRef-前缀。在 LICENSE_PATH 中查找许可证文本 (带有或不带有LicenseRef-前缀)或使用 NO_GENERIC_LICENSE 的行为没有变化,仍可继续使用。CLOSED许可证已弃用,使用时会产生警告。它实际上表示“无许可证” (通常意味着“保留所有权利”等),但更准确的定义方式是使用自定义许可证 提供实际的许可证文本。这样可以更一致地定义许可证文本,因为“无许可证”的 含义可能因司法管辖区而异。仍然可以将通用许可证文件放入 LICENSE_PATH, 并通过LicenseRef-许可证引用它。此时还需要提供 LIC_FILES_CHKSUM 值,指向该许可证文件。不再允许通用的
PD(公有领域)许可证,因为它不是有效的 SPDX License Identifier。此外,“公有领域”的含义因司法管辖区而异, 因此不建议省略具体的许可证文本。应查找匹配的 SPDX 许可证 (SPDX License Check 网站可用于此目的),或结合LicenseRef-与 NO_GENERIC_LICENSE 指定实际的许可证文本。现在应使用
WITH运算符描述许可证例外,而不是使用特制的许可证标识符。 例如,原来的Apache-2.0-with-LLVM-exception应变为Apache-2.0 WITH LLVM-exception。有效例外的列表见 SPDX License Exception。由于用
WITH取代了特制许可证,INCOMPATIBLE_LICENSE 的行为也有变化。 此变量中的条目仍匹配单个许可证(这一点不变),但也会匹配WITH表达式的 左侧(许可证部分)。若要允许带有特定 SPDX License Exception 的许可证, 必须将该 SPDX 许可证例外列入 INCOMPATIBLE_LICENSE_EXCEPTIONS。实际上,最常见的情况是使用 INCOMPATIBLE_LICENSE 排除 GPLv3 代码。 过去,这会允许所有
GPLv3-with-exception许可证,因为这些特制许可证 不匹配GPL-3.0* LGPL-3.0*展开结果。现在,它们采用GPL-3.0-or-later WITH exception等形式,因此会匹配。 所以,应该允许的 GPLv3 例外都必须列入 INCOMPATIBLE_LICENSE_EXCEPTIONS。
目前仍会解析旧的许可证表达式语法,并将其自动转换为 SPDX License Expression,但会同时发出警告。这项兼容支持最终将被移除, 届时这些变量仅接受 SPDX License Expression。
小技巧
scripts/contrib/convert-spdx-licenses.py 脚本可以帮助转换 层 中的 LICENSE 表达式。
类文件中的函数移至 oe 库
许多类文件中的函数已移至 OpenEmbedded-Core (OE-Core) 的 oe 库:
-
get_kernel*()函数现在是oe.kernel.get*()默认的内核构建
make命令现在会设置ARCH不再能通过
valid_arches变量修改ARCH
kernel-arch 不再导出或设置
ARCH和UBOOT_ARCH, 应改用oe.kernel.map_kernel_arch(d)和oe.kernel.map_uboot_arch(d)kernel、uboot-config:大多数情况下,
ARCH和UBOOT_ARCH不再导出到环境中utils 类中的多种 Python 函数现在是
oe.utils.XXX()(见 meta/lib/oe/utils.py)sanity 类中的大多数函数现在是
oe.sanity.XXX()(见 meta/lib/oe/sanity.py)lsb_distro_identifier现在始终为oe.lsb.distro_identifier()
已移除的配方
libdazzle、libhandy:不再是epiphany配方的依赖,已移至 meta-gnome (位于 meta-openembedded 中) (32d91b6)libpcre:已过时,由libpcre2取代 (057cccd)libxfont:配方已过时,已有后继者 libxfont2; OpenEmbedded-Core (OE-Core) 中已无任何依赖它的内容 (4666968)gptfdisk:OpenEmbedded-Core (OE-Core) 中已无任何依赖此配方的内容, 因此将其移除 (188d84b)libclc:已由mesa-libclc取代,因此移除此配方 (5457c35)makedepend:mesa不再依赖makedepend,因此移除此配方 (7e696b1)python-six:移至 meta-python (372ee47)
已移除的变量
SDK_TOOLCHAIN_LANGS:合并到 SDK_FEATURES (933981a)
已移除的 PACKAGECONFIG 选项
已移除的类
linux-kernel-base.bbclass:其功能已移至 kernel-arch, 因此移除此类。使用此类的配方现在应改为继承 kernel-arch。
其他变更
archiver:移除 ARCHIVER_MODE 的
srpm支持 (69ce759)systemd-systemctl-native:重命名为systemd-tools-native(ff985de)