版本 3.1 (dunfell)

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

最低系统要求

构建主机组件的以下版本与要求已更新:

  • gcc 5.0

  • python 3.5

  • tar 1.28

  • 主机现在必须提供 rpcgen。Ubuntu、Debian 及相关发行版由 libc-dev-bin 提供,基于 RPM 的发行版由 glibc 提供。

此外,主机 不再 需要 makeinfo 和 pod2man 工具。

移除 mpc8315e-rdb 机器

MPC8315E-RDB 已陈旧过时且无法获得。考虑到维护负担,本版本移除了支持它的 mpc8315e-rdb 机器配置。这使官方 PowerPC 参考硬件支持出现空缺; 如果将来找到合适的机器及相应支持资源,这一状况可能改变。

移除 Python 2

由于上游支持于 2020 年 1 月结束,现已移除 Python 2 支持,建议改用 Python 3。 若确有必要,社区的 meta-python2 层包含 Python 2、相关类及多种 Python 2 模块, 但不应将其视为受支持的组件。

默认启用可复现构建

为避免输出文件出现不必要的差异,改善二进制可复现性, Poky 发行版配置(DISTRO = "poky")现在默认继承 reproducible_build 类。

ptest 功能的影响更加显著

Poky 发行版配置(DISTRO = "poky")默认启用 ptest,以便运行时测试各种组件。 本版本新增的一项必要依赖,使构建 core-image-minimal 等简单镜像时所需构建的组件 数量也显著增加。如果不需要核心组件的运行时测试,建议从 DISTRO_FEATURES 移除 "ptest",以显著节省构建时间。例如,在配置中添加:

DISTRO_FEATURES_remove = "ptest"

已移除的配方

以下配方已移除:

  • chkconfig:已过时

  • console-tools:已过时

  • enchant:由 enchant2 取代

  • foomatic-filters:已过时

  • libidn:不再需要,移至 meta-oe

  • libmodulemd:由 libmodulemd-v1 取代

  • linux-yocto:移除 4.19、5.2 版本配方(现在提供 5.4)

  • nspr:不再需要,移至 meta-oe

  • nss:不再需要,移至 meta-oe

  • python:移除 Python 2(推荐 Python 3)

  • python-setuptools:移除 Python 2 版本(推荐 python3-setuptools)

  • sysprof:不再需要,移至 meta-oe

  • texi2html:已过时

  • u-boot-fw-utils:功能由 libubootenv 取代

features_check 类取代 distro_features_check

distro_features_check 类扩展了功能,现在支持 ANY_OF_MACHINE_FEATURES、 REQUIRED_MACHINE_FEATURES、CONFLICT_MACHINE_FEATURES、 ANY_OF_COMBINED_FEATURES、REQUIRED_COMBINED_FEATURES 和 CONFLICT_COMBINED_FEATURES。因此,此类重命名为 features_check。 distro_features_check 仍存在,但会产生警告并转向新类。 为准备将来移除旧类,建议将目前继承 distro_features_check 的配方改为继承 features_check。

已移除的类

以下类已移除:

  • distutils-base:移至 meta-python2

  • distutils:移至 meta-python2

  • libc-common:没有其他使用者,并入 glibc 配方

  • python-dir:移至 meta-python2

  • pythonnative:移至 meta-python2

  • setuptools:移至 meta-python2

  • tinderclient:已过时,予以移除

SRC_URI 校验和行为

过去,配方通常同时为 SRC_URI 中远程获取的文件提供 SHA256 和 MD5 校验和, 尽管实际上只要求其中一个。MD5 本身较弱,额外价值有限, 因此校验失败时现在仅打印 SHA256。如果指定了 md5sum,仍会进行验证。

npm 获取器变更

本版本完全重写了 npm 获取器。它现在只获取软件包本身的源码,不再获取依赖。 新增的 npmsw 获取器则显式获取 shrinkwrap 文件及依赖。 这样就不再需要指向本地文件、用法略显别扭的 NPM_LOCKDOWN 和 NPM_SHRINKWRAP 变量,lockdown 文件也完全不再需要。此外,SRC_URI 的 npm:// 条目 现在通过 package 参数指定包名,而不是与通用参数重名的 name。 所有使用 npm 获取器的配方都需要相应修改。

新写法示例:

SRC_URI = "npm://registry.npmjs.org;package=array-flatten;version=1.1.1 \
           npmsw://${THISDIR}/npm-shrinkwrap.json"

以下示例从 Git 而不是 npm 仓库获取源码:

SRC_URI = "git://github.com/foo/bar.git;protocol=https \
           npmsw://${THISDIR}/npm-shrinkwrap.json"

devtool 和 recipetool 也已更新以配合 npm 获取器变更。 除了为 npm 源码生成可用且更完整的配方,devtool 的命令行还有一处小变化: --fetch-dev 重命名为 --npm-dev,因为它仅适用于 npm。

打包变更

  • intltool 已从 packagegroup-core-sdk 移除,因为现代软件构建很少需要它, gettext 已能完成其过去的大多数工作。它也从 packagegroup-core-self-hosted 移除,因为标准构建不需要它。

  • git:git-am、git-difftool、git-submodule 和 git-request-pull 不再基于 Perl,因此现在随主 git 包安装,而不在 git-perltools 中。

  • glibc 构建的 ldconfig 二进制文件移至独立的 ldconfig 包 (注意没有 glibc- 前缀)。如果 DISTRO_FEATURES 包含 ldconfig, 主 glibc 包的 RRECOMMENDS 就会包含此包。

  • libevent 现在如 Debian 一样,将每个共享库拆分到独立软件包。 这些库会通过正常的共享库依赖处理引入,因此除某些情况下少安装不必要的库外, 不应影响现有配置。

  • linux-firmware 新增 bcm4366c 软件包,并将可用的 NVRAM 配置文件加入 bcm43340、bcm43362、bcm43430 和 bcm4356-pcie 包。

  • harfbuzz 将新库 libharfbuzz-subset.so 拆分为独立包, 在不需要该库时减少主包体积。

新增警告

以下情况下,do_package_qa 现在会显示警告:

  • 配方安装包含 MimeType 键的 .desktop 文件, 但未继承新增的 mime-xdg 类

  • 配方向 ${datadir}/mime/packages 安装 .xml 文件, 但未继承 mime 类

x86 默认镜像类型由 live 改为 wic

大多数 x86 机器配置继承的 conf/machine/include/x86-base.inc, 现在默认在 IMAGE_FSTYPES 中指定 wic,而不是 live。 live 镜像类型可能在将来移除,因此建议改用 wic。

其他变更

  • 移除了未记录在文档中的 SRC_DISTRIBUTE_LICENSES,改用新的 AVAILABLE_LICENSES。后者根据 ${COMMON_LICENSE_DIR} 和 ${LICENSE_PATH} 中找到的许可证文件动态设置。

  • 大端 microblaze 机器的调优定义现在为 microblaze,而不是 microblazeeb。

  • newlib 不再内置系统调用。libgloss 应提供系统调用、crt0.o 及其他不再属于 newlib 的函数。如果使用 TCLIBC = "newlib", 现在应用程序必须同时链接 newlib 和 libgloss, 而过去许多配置仅使用 newlib 就能运行。