版本 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已改用官方gpgmePython 绑定。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)现在仅影响当前命令。 此前这些选项会持续影响后续执行。