版本 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-oelibmodulemd:由libmodulemd-v1取代linux-yocto:移除 4.19、5.2 版本配方(现在提供 5.4)nspr:不再需要,移至 meta-oenss:不再需要,移至 meta-oepython:移除 Python 2(推荐 Python 3)python-setuptools:移除 Python 2 版本(推荐 python3-setuptools)sysprof:不再需要,移至 meta-oetexi2html:已过时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-python2distutils:移至 meta-python2libc-common:没有其他使用者,并入 glibc 配方python-dir:移至 meta-python2pythonnative:移至 meta-python2setuptools:移至 meta-python2tinderclient:已过时,予以移除
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 现在会显示警告:
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就能运行。