版本 2.1 (krogoth)
本节介绍如何从上一版本迁移到 Yocto Project 2.1 版本(代号“krogoth”)。
Python 函数中的变量展开
${VARNAME} 等变量表达式不再在 Python 函数中自动展开。
这样 Python 函数可生成 shell 脚本或其他代码,而不意外展开其中的表达式。
依赖旧行为的代码应通过 d.getVar() 展开单个变量,
更复杂的表达式则使用 d.expand()。
覆盖项必须使用小写
覆盖项一直约定使用小写,现在这一点成为强制要求。
BitBake 数据存储假定字符为小写,以略微提升解析性能。
实际上,所有进入 OVERRIDES 的值现在都必须为小写,例如
MACHINE、TARGET_ARCH、DISTRO,
以及要使 _pn-recipename 覆盖生效时的配方名称。
getVar() 和 getVarFlag() 必须提供 expand 参数
过去未指定 expand 时默认 False,现在不再有默认值,必须明确指定。
所有省略最后一个 expand 参数的调用都需要更新。
可在层的根目录运行以下 sed 命令:
sed -e 's:\(\.getVar([^,()]*\)):\1, False):g' -i `grep -ril getVar *`
sed -e 's:\(\.getVarFlag([^,()]*,[^,()]*\)):\1, False):g' -i `grep -ril getVarFlag *`
备注
这为将来将默认值改为更合理的 True 做准备。 需要逐步迁移,因为突然改变默认值可能产生难以发现的副作用。
Makefile 环境变更
EXTRA_OEMAKE 默认值从 "-e MAKEFLAGS=" 改为 ""。
旧默认值源于历史偶然,导致许多类(如 autotools* 和 module)
及配方必须覆盖它,才能与合理的构建系统配合。升级时,依赖旧默认值的配方必须
将 EXTRA_OEMAKE 设回 "-e MAKEFLAGS=",或通过该变量显式覆盖所需值。
通常仅当 Makefile 使用 "=" 而非 "?=" 为变量设置不适合交叉编译的默认值时,
才需要这样做。
libexecdir 恢复为 ${prefix}/libexec
将 ${libdir}/${BPN} 用作 libexecdir 与主流发行版不同,
后者使用 ${prefix}/libexec 或 ${libdir}。
这也不符合 GNU 编码规范
(https://www.gnu.org/prep/standards/html_node/Directory-Variables.html):
规范建议使用 ${prefix}/libexec,由软件包自身处理包专属的嵌套目录。
此外,各配方的 libexecdir 不同,使配方间调用安装在该目录的程序十分困难。
文件系统层次标准
(https://refspecs.linuxfoundation.org/FHS_3.0/fhs/ch04s07.html)
现在认可 ${prefix}/libexec/,允许发行版在 ${prefix}/lib 和
${prefix}/libexec 之间选择而不违反 FHS。
不再在 site 文件中缓存 ac_cv_sizeof_off_t
对于继承 autotools* 的配方,不再在 autoconf 的 site 文件中
缓存 ac_cv_sizeof_off_t。该值并非过去假定的每架构固定值,
而会随大文件支持是否启用而变化。大多数使用 autoconf 的软件不受影响。
但如果配方绕过了 autotools* 的标准 do_configure,
且软件使用非常旧的 autoconf,配置时可能无法判断正确的 off_t 大小。
最佳做法是按需为软件打补丁,使类的默认实现正常工作,
让 autoreconf 成功生成有效的配置脚本,并移除自定义覆盖的
do_configure,使用默认实现。
镜像生成与文件系统生成分离
过去镜像配方的 do_rootfs 先组装文件系统,再生成镜像。 本版本将镜像生成拆分为独立的 do_image 任务,使操作和代码更清晰。
通常不会出现问题,但直接修改或引用 do_rootfs 的定制可能需要更新。 尤其是原来添加在 do_rootfs 后的任务,应改为置于 do_image_complete 后,确保执行时机正确。
重构还将后处理定义和函数从 image 移至 rootfs-postcommands,但功能保持不变。
已移除的配方
2.1 移除了以下配方:
gcc4.8:保留 4.9 和 5.3。qt4:上游不再支持 Qt 4,全部 Qt 4.x 支持移至独立的meta-qt4层。x11vnc:移至meta-oe。linux-yocto-3.14:不再支持。linux-yocto-3.19:不再支持。libjpeg:由libjpeg-turbo取代。pth:已过时。liboil:不再需要,移至meta-multimedia。gtk-theme-torturer:不再需要,移至meta-gnome。gnome-mime-data:不再需要,移至meta-gnome。udev:由eudev取代,以便sysvinit与新内核兼容。python-pygtk:已过时。adt-installer:已过时,详情见“移除 ADT”。
类变更
以下类有变化:
autotools_stage:功能已由 autotools* 提供,予以移除。 继承旧类的配方应改为继承 autotools*。boot-directdisk:并入image-vm。很少直接使用旧类,通常不会有问题。bootimg:并入 image-live。很少直接使用旧类,通常不会有问题。packageinfo:用途仅限于现已移除的 Hob 界面,因此移除。
构建系统用户界面变更
构建系统用户界面有以下变更:
基于 GTK+ 的 Hob:无人维护,且基于过时的 GTK+ 2,因而移除。 Toaster Web 界面功能更强且仍积极维护,详情见 Toaster 用户手册的 “使用 Toaster 网页界面”。
BitBake 的 "puccho" 界面:无人维护且不再实用,予以移除。
移除 ADT
应用开发工具包(ADT)已移除,因为其功能几乎完全与 标准 SDK 和 可扩展 SDK 重叠。 这些 SDK 的构建和使用方法见 Yocto 项目应用开发与软件开发套件(SDK/eSDK)手册。
备注
Yocto Project Eclipse IDE 插件仍受支持,不受此变更影响。
Poky 参考发行版变更
Poky 发行版有以下变更:
meta-yocto重命名为meta-poky,更准确地反映其提供 Poky 参考发行版的用途。meta-yocto-bsp保持原名,因为它为 Yocto Project 提供参考机器,与 Poky 本身无关。 build/conf/bblayers.conf 中的引用应自动更新, 除非其他位置依赖该名称,否则无需修改。Poky 默认启用 uninative,隔离构建系统与主机发行版的 C 库, 使不同主机发行版之间复用 native 共享状态产物成为可能。 启用后,构建开始时会下载包含预构建 C 库的压缩包。
该功能由
meta/conf/distro/include/yocto-uninative.inc启用。 非 Poky 发行版也可包含此文件,以启用相同功能。如需自建
uninative压缩包,可构建uninative-tarball配方, 通过 HTTP/HTTPS 等方式向构建机器提供它,并设置类似yocto-uninative.inc的配置。Poky 现在默认在多数情况下禁用静态库生成,节省构建时间和产物空间。
通过
meta/conf/distro/include/no-static-libs.inc实现, 非 Poky 发行版也可包含此文件启用相同功能。如果配置脚本不支持
--disable-static,或确实需要静态库, 配方可以设置以下变量,避免向配置命令行传入此选项:DISABLE_STATIC = ""
独立的
poky-tiny发行版现在使用 musl C 库,而非大幅精简的glibc。 musl 专为小体积设计,使发行版更小且更易维护。如果此前为
poky-tiny定制了glibc,升级时需要针对 musl 重做这些定制。
打包变更
打包有以下变更:
主
util-linux包中的runuser和mountpoint, 分别拆分到util-linux-runuser和util-linux-mountpoint。python-elementtree并入python-xml。
调优文件变更
调优文件有以下变更:
ARM 调优包含文件移除 "no-thumb-interwork" 功能。 ARM EABI 要求互操作,因此尝试通过调优禁用它已无意义。
备注
gcc 4.7 已弃用 ARM OABI 支持。
tune-cortexm*.inc和tune-cortexr4.inc因测试不足而移除。 在 OpenEmbedded 正式支持无 MMU 的 CPU 之前,若需要,最好在独立层维护这些文件。
支持 GObject 自省
本版本支持通过 GObject 自省生成 GLib Introspective Repository(GIR)文件, 这是从运行时环境访问基于 GObject 软件的标准机制。 可以启用、禁用并测试此数据的生成,详情见 Yocto Project 开发任务手册的 “启用 GObject 内省支持”。
其他变更
其他变更如下:
最低 Git 版本提升到 1.8.3.1。主机发行版若没有足够新的版本, 可以安装提供它的 buildtools。更多信息见 所需的 Git、tar、Python、make 和 gcc 版本。
移除存在错误且不完整的 RPM 4 包管理器支持,保留经过充分测试和维护的 RPM 5 支持。
过去,IMAGE_FEATURES 不含 package-management 时, 不论依赖如何都会移除以下软件包:
update-rc.d base-passwd shadow update-alternatives run-postinsts
2.1 起仅在 IMAGE_FEATURES 包含 "read-only-rootfs" 时移除它们, 因为即使没有包管理器,读写镜像也可能需要它们, 例如运行时添加、修改或删除用户。
devtool modify 现在默认提取源码,这是最常见的预期行为。
-x和--extract不再产生操作。 如需使用已有源码树,运行devtool modify时必须指定-n或--no-extract。如果机器未提供 formfactor,或未声明是否连接键盘,默认假定连接了键盘, 而不是没有键盘。这主要影响 Sato 界面。
.debug目录现在自动打包。软件向非标准目录安装二进制文件时, 无需再设置FILES_${PN}-dbg捕获相应.debug目录,系统会自动发现并添加。buildstats 输出移除了不准确的磁盘和 CPU 百分比数据, 改用
getrusage()数据及修正的 IO 统计。读取该输出的自定义代码可能需要更新。meta/conf/distro/include/package_regex.inc已弃用,内容移至各个配方。备注
此文件很可能在后续版本移除,建议删除配置中的所有引用。
meta-yocto-bsp提供的genericx86和genericx86-64参考机器移除v86d/uvesafb。多数现代 x86 开发板不需要它,它只会在启动时增加内核错误消息。 若仍需uvesafb支持,只需将v86d加入镜像。调试符号文件中现在移除构建系统根目录路径。因此,远程 GDB 使用未剥离的 构建系统根目录的方式不再有效(该方式从未作为受支持方法记录)。 支持的类似方案是将
IMAGE_GEN_DEBUGFS设为 "1", 在镜像旁生成包含未剥离二进制文件和相关调试源码的配套调试镜像。