版本 2.4 (rocko)

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

内存常驻模式

BitBake 的默认运行方式现在支持持久模式,取代过去的“内存常驻模式” (oe-init-build-env-memres)。只需将 BB_SERVER_TIMEOUT 设为超时秒数, BitBake 服务器就会在调用之间常驻相应时长。由于无需独立环境设置脚本, oe-init-build-env-memres 已移除。

打包变更

打包方式有以下变更:

  • python3 变更:

    • 主 "python3" 包现在引入完整的标准 Python 3 发行内容,而不是子集, 与传统 Linux 发行版的预期一致。若只需子集,请指定 python-core, 再加上仍然提供的一个或多个独立软件包。

    • python3:bz2.py、lzma.py 和 _compression.py 从 python3-misc 移至 python3-compression。

  • binutils:libbfd 库现在单独打包为 "libbfd"。 perf 等工具仅需要 libbfd 而不需要全部 binutils 时,可以节省空间。

  • util-linux 变更:

    • su 单独打包为 "util-linux-su",仅在 DISTRO_FEATURES 包含 "pam" 时构建。除非需要,否则不应安装 util-linux 的这一实现,因为 su 通常由 shadow 提供。"pam" 启用时,主 util-linux 包通过 RDEPENDS 依赖 util-linux-su。

    • switch_root 单独打包为 "util-linux-switch-root",适用于小型 Initramfs 镜像,不必安装远大于它的整个 util-linux 或 busybox。 主 util-linux 包通过 RRECOMMENDS 推荐此包。

    • ionice 单独打包为 "util-linux-ionice"。 主 util-linux 包通过 RRECOMMENDS 推荐此包。

  • initscripts:sushell 单独打包为 "initscripts-sushell"。 启用 selinux 时可仅引入 sushell,无需整个 initscripts。 DISTRO_FEATURES 包含 "selinux" 时,主 initscripts 包通过 RDEPENDS 依赖 sushell 包。

  • glib-2.0:现在通过 RRECOMMENDS 推荐 shared-mime-info, 因为缺少 MIME 数据库时 GIO 的许多功能无用。如果该包太大且不需要, 可以使用 BAD_RECOMMENDATIONS 移除此依赖。

  • Go 标准运行时:从主 go 配方拆分为独立的 go-runtime 配方。

已移除的配方

  • acpitests:无人维护。

  • autogen-native:Grub、oe-core 和 meta-oe 均不再需要。

  • bdwgc:OpenEmbedded-Core 中没有使用者,移至 meta-oe。

  • byacc:仅用于 rpm 5.x,移至 meta-oe。

  • gcc (5.4):移除 5.4 系列,改用 6.3 / 7.2。

  • gnome-common:上游已弃用,不再需要。

  • go-bootstrap-native:Go 1.9 自行完成引导构建,因此移除。

  • guile:过去仅用于 autogen-native 和 remake,现在两者均不再需要。

  • libclass-isa-perl:过去用于 LSB 4,现在不再需要。

  • libdumpvalue-perl:过去用于 LSB 4,现在不再需要。

  • libenv-perl:过去用于 LSB 4,现在不再需要。

  • libfile-checktree-perl:过去用于 LSB 4,现在不再需要。

  • libi18n-collate-perl:过去用于 LSB 4,现在不再需要。

  • libiconv:过去仅用于上一版本已移除的 uclibc。 glibc 和 musl 有自己的实现。meta-mingw 仍需要它,因此移至该层。

  • libpng12:过去用于 LSB。当前 libpng 为 1.6.x。

  • libpod-plainer-perl:过去用于 LSB 4,现在不再需要。

  • linux-yocto (4.1):移除,改用 4.4、4.9、4.10 和 4.12。

  • mailx:过去仅用于 LSB 兼容,上游已停止。

  • mesa (git version only):Git 版本配方相对于发布版已陈旧。

  • ofono (git version only):Git 版本配方相对于发布版已陈旧。

  • portmap:已过时,由 rpcbind 取代。

  • python3-pygpgme:陈旧且无人维护。原来的使用者 dnf 已改用官方 gpgme Python 绑定。

  • python-async:移除,改用 Python 3 版本。

  • python-gitdb:移除,改用 Python 3 版本。

  • python-git:移除,改用 Python 3 版本。

  • python-mako:移除,改用 Python 3 版本。

  • python-pexpect:移除,改用 Python 3 版本。

  • python-ptyprocess:移除,改用 Python 3 版本。

  • python-pycurl:OpenEmbedded-Core 中没有使用者,移至 meta-oe。

  • python-six:移除,改用 Python 3 版本。

  • python-smmap:移除,改用 Python 3 版本。

  • remake:作为 virtual/make 提供者无法正常工作,因此 OpenEmbedded-Core 不再需要。

内核设备树支持移动

现在更容易在内核配方中启用设备树支持。设备树代码移至 kernel-devicetree 类。继承 kernel 并设置 KERNEL_DEVICETREE 的配方会自动启用此功能。 为避免破坏现有配置,旧的 meta/recipes-kernel/linux/linux-dtb.inc 仍可使用, 但会触发弃用警告,并将在后续版本移除。建议从自定义内核配方中移除引入该文件的 require,避免 2.4 之后版本出现问题。

软件包 QA 变更

  • 移除 "unsafe-references-in-scripts" QA 检查。

  • LIC_FILES_CHKSUM 引用 ${COREBASE}/LICENSE 时会警告, 因为该文件描述的是 OE-Core 的许可证。如果配方采用 MIT 许可证,且无法采用 推荐的源码树内文件引用方式,请使用 ${COMMON_LICENSE_DIR}/MIT。

README 文件变更

  • Poky 主 README 移至 meta-poky 层,重命名为 README.poky。 旧位置创建了符号链接,原有引用仍有效。

  • README.hardware 移至 meta-yocto-bsp。 旧位置创建了符号链接,原有引用仍有效。

  • 新增 README.qemu,介绍 qemu* 机器。

其他变更

  • 移除 ROOTFS_PKGMANAGE_BOOTSTRAP 及所有引用。自定义配方中也应移除此变量。

  • 移除 meta-yocto 目录。

    备注

    Yocto Project 2.1 将 meta-yocto 重命名为 meta-poky, 当时保留 meta-yocto 子目录以避免破坏现有配置。

  • maintainers.inc 为 OE-Core 每个配方列出主要负责人,现从 meta-poky 移至 OE-Core,即从 meta-poky/conf/distro/include 移至 meta/conf/distro/include。

  • buildhistory 现在每次构建只创建一个提交,而非每个子目录一个。 前提是按通常方式设置 BUILDHISTORY_COMMIT = "1" 启用提交。 过去逐目录提交是为了方便查看特定目录变更;现在可以将子目录作为 git show 或 git diff 的最后一个参数查看。

  • 所有 x86 机器配置包含的 x86-base.inc,现在使用 ?= 将 IMAGE_FSTYPES 设为 "live",而不是通过 += 追加,使默认值更容易覆盖。

  • 启用多配置时,BitBake 会触发多个 "BuildStarted" 事件,每个配置一个。 详情见 BitBake 用户手册的 “Events”。

  • security_flags.inc 默认设置 GCCPIE,通过相应选项在 gcc 中启用位置无关可执行文件(PIE),大幅增加面向返回编程(ROP)攻击的难度。

  • OE-Core 现在提供实现 "create-layer" 子命令的 bitbake-layers 插件。 因此 yocto-layer 脚本已弃用,很可能在下一版本移除。

  • vmdk、vdi 和 qcow2 镜像类型现在通过 CONVERSION_CMD 与 "wic" 结合使用。等效类型分别为 wic.vmdk、wic.vdi 和 wic.qcow2。

  • do_image_<type>[depends] 取代 IMAGE_DEPENDS_<type>。 自定义镜像类型类需要更新。

  • 引入 OpenSSL 1.1,但因其他软件仍存在兼容问题,PREFERRED_VERSION 默认仍选择 1.0.x。openssl 1.0 配方的 PROVIDES 现在包含 "openssl10", 仍依赖 OpenSSL 1.0 的软件配方可在 DEPENDS 中使用此标记。

  • 为确保行为一致,从命令行预读取和后读取额外配置文件的 BitBake "-r" 和 "-R" 选项(prefile 和 postfile)现在仅影响当前命令。 此前这些选项会持续影响后续执行。