版本 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)且可独立运行, 因此将它加入软件包组是保留用户预期功能的最佳方式。如果希望避免此依赖,可以:
在 IMAGE_INSTALL 中使用
dropbear代替packagegroup-core-ssh-dropbear(或不使用 IMAGE_FEATURES 中的ssh-server-dropbear),或者将
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-utilscargo-cross-canadian:经优化后不再需要lzop:已过时,上游无人维护linux-yocto (5.10):当前提供 5.15 和 5.19rust-cross:经优化后不再需要rust-crosssdk:经优化后不再需要rust-tools-cross-canadian:经优化后不再需要xf86-input-keyboard:已过时(由 libinput/evdev 取代)