版本 1.6 (daisy)

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

archiver 类

archiver 已重写,配置也更简单。源码归档器的详情见 Yocto Project 开发任务手册的 “在产品生命周期中维护开源许可证合规”。

打包变更

打包有以下变更:

  • binutils 不再生成 binutils-symlinks,改由 update-alternatives 管理目标上首选的 binutils 变体。

  • tc(流量控制)工具从主 iproute2 拆分到 iproute2-tc。

  • gtk-engines 的 schema 移至专门的 gtk-engines-schemas 包。

  • 启用 thumb 优化的 armv7a 软件包架构后缀改为正确的 "t2"。 1.5 中未使用此后缀,因此软件包源中的架构名称会变化。

BitBake

BitBake 有以下变更。

Git 获取要求匹配分支

通过 SRC_URI 从 Git 仓库获取源码时,BitBake 现在会针对分支验证 SRCREV。分支指定方式如下:

SRC_URI = "git://server.name/repository;branch=branchname"

若未指定,则在默认 "master" 分支查找。

如果需要跳过检查,例如获取不属于任何分支的标签对应修订版本, 可在 SRC_URI 的 URL 末尾添加 ";nobranch=1"。

Python 定义替换

BitBake 移除了 bb 模块中此前已弃用的定义,应改用子模块中的对应项:

  • bb.MalformedUrl:使用 bb.fetch.MalformedUrl。

  • bb.encodeurl:使用 bb.fetch.encodeurl。

  • bb.decodeurl:使用 bb.fetch.decodeurl。

  • bb.mkdirhier:使用 bb.utils.mkdirhier。

  • bb.movefile:使用 bb.utils.movefile。

  • bb.copyfile:使用 bb.utils.copyfile。

  • bb.which:使用 bb.utils.which。

  • bb.vercmp_string:使用 bb.utils.vercmp_string。

  • bb.vercmp:使用 bb.utils.vercmp。

SVK 获取器

BitBake 已移除 SVK 获取器。

控制台错误输出重定向

BitBake 控制台界面现在向 stderr 而不是 stdout 输出错误。 如果通过管道或重定向传递 bitbake 输出,并希望保留错误, 需要在命令行末尾添加 2>&1 或等效内容。

task-taskname 覆盖

任务名中的下划线现在在 task-taskname 覆盖中替换为连字符, 使其正常工作。例如,do_populate_sdk 的覆盖是 task-populate-sdk。

变量变更

以下变量有变化。构建系统变量的详情见“变量表”。

TMPDIR

TMPDIR 不能再位于 NFS 挂载点上。 NFS 不提供完整的 POSIX 锁和 inode 一致性,用它存储 TMPDIR 可能产生意外问题。

启动时会检查;若发现位于 NFS 挂载点,就会报错。

PRINC

PRINC 已弃用,构建中发现时会警告。因变更递增 PR 应改用 PR 服务。 更多信息见 Yocto Project 开发任务手册的 “使用 PR 服务”。

IMAGE_TYPES

IMAGE_TYPES 的 "sum.jffs2" 选项改为符合处理顺序的 "jffs2.sum"。

COPY_LIC_MANIFEST

COPY_LIC_MANIFEST 现在必须设为 "1" 才启用,不能再使用任意值。

COPY_LIC_DIRS

COPY_LIC_DIRS 现在必须设为 "1" 才启用,不能再使用任意值。

PACKAGE_GROUP

PACKAGE_GROUP 重命名为 FEATURE_PACKAGES,更准确地反映用途。 旧名称仍可用,但构建系统会发出警告。

预处理与后处理命令变量行为

以下变量现在接受分号分隔的函数调用列表,而不是任意 shell 命令:

迁移时可直接将 shell 命令包装到 shell 函数,再调用该函数。例如:

my_postprocess_function() {
   echo "hello" > ${IMAGE_ROOTFS}/hello.txt
}
ROOTFS_POSTPROCESS_COMMAND += "my_postprocess_function; "

软件包测试(ptest)

软件包测试(ptest)默认会构建但不安装。用法见 “使用 ptest 测试软件包”, 另见“ptest”。

构建变更

已知能正常工作的部分配方,以及所有继承 cmake 的配方, 现在默认分离构建目录与源码目录。后续版本的 autotools* 也将默认使用独立 Build Directory。如果基于 Autotools 的软件不能树外构建, 配方应改为继承 autotools-brokensep, 而不是 autotools* 或 autotools_stage。

qemu-native

qemu-native 默认不构建基于 SDL 的图形输出支持。 启用时需在 build/conf/local.conf 添加:

PACKAGECONFIG_pn-qemu-native = "sdl"
ASSUME_PROVIDED += "libsdl-native"

备注

默认 build/conf/local.conf 已包含这些语句。 如果构建无图形界面的系统并使用默认文件,需要注释掉这两行。

core-image-basic

core-image-basic 重命名为 core-image-full-cmdline。

相应地,packagegroup-core-basic 也重命名为 packagegroup-core-full-cmdline。

许可证

顶层 LICENSE 文件已修改,以更准确地说明 OpenEmbedded-Core (OE-Core) 各组件的许可证,但许可本身未变。

通常没有副作用,但有些配方在 LIC_FILES_CHKSUM 中引用 ${COREBASE}/LICENSE,其校验和必须从 3f40d7994397109285ec7b81fdeb3b58 改为 4d92cd373abda3937c2bc47fbc49d690。 更好的方式是让 LIC_FILES_CHKSUM 指向配方所构建源码自带的许可证说明文件, 尽量避免引用 ${COREBASE}/LICENSE。

CFLAGS 选项

默认 CFLAGS 移除了 "-fpermissive"。 受此影响而构建失败的配方,需要修复编译器报告的问题, 或在该配方的 CFLAGS 中重新加入 "-fpermissive"。

自定义镜像输出类型

通过 IMAGE_FSTYPES 选择的自定义镜像输出类型, 如果依赖其他镜像类型,必须通过新的 IMAGE_TYPEDEP 声明。

任务

不再需要 do_package_write,已移除该任务。

update-alternative 提供者

默认 update-alternatives 提供者由 opkg 改为 opkg-utils, 解决了一些棘手的循环依赖。运行时包也从 update-alternatives-cworth 重命名为 update-alternatives-opkg。

virtclass 覆盖

virtclass 覆盖已弃用,应改用等效的 class 覆盖, 例如 virtclass-native 改为 class-native。

已移除和重命名的配方

以下配方已移除:

  • packagegroup-toolset-native:基本无人使用。

  • linux-yocto-3.8:移除 3.8 支持,新增 linux-yocto-3.10 和 linux-yocto-3.14。

  • ocf-linux:功能由 cryptodev-linux 取代。

  • genext2fs:构建系统不再使用,上游无人维护。

  • js:提供的古老 Mozilla JavaScript 引擎已不再需要。

  • zaurusd:移至 meta-handheld。

  • eglibc 2.17:由 eglibc 2.19 取代。

  • gcc 4.7.2:由现已稳定的 gcc 4.8.2 取代。

  • external-sourcery-toolchain:现在于 meta-sourcery 维护。

  • linux-libc-headers-yocto 3.4+git:默认使用 linux-libc-headers 3.10。

  • meta-toolchain-gmae:已过时。

  • packagegroup-core-sdk-gmae:已过时。

  • packagegroup-core-standalone-gmae-sdk-target:已过时。

已移除的类

以下类已过时并移除:

  • module_strip

  • pkg_metainfo

  • pkg_distribute

  • image-empty

参考板级支持包(BSP)

参考 BSP 有以下变更:

  • ARM 参考硬件 BeagleBoard(beagleboard)由 BeagleBone(beaglebone)取代。

  • MIPS 参考硬件 RouterStation Pro(routerstationpro) 由 EdgeRouter Lite(edgerouter)取代。

旧 beagleboard 和 routerstationpro BSP 仍可在新的 meta-yocto-bsp-old 层中获得,位于 源码仓库 的 https://git.yoctoproject.org/meta-yocto-bsp-old/。