3 理解和创建层
OpenEmbedded 构建系统支持将 Metadata 组织到多个层中,以隔离不同 类型的定制。层模型的入门信息见概述与概念手册的 “Yocto Project 层模型”。
调用下文的 bitbake-layers 前,务必先用项目环境设置脚本
初始化构建环境。
否则 Shell 无法找到命令或构建配置。
3 创建自己的层
创建层的一般步骤如下:
检查已有层: 创建之前,先确认是否已有层包含所需元数据。 OpenEmbedded 元数据索引 列出社区中可用于 Yocto Project 的层,可能有完全符合或接近需求的层。
备注
BSP 层介绍见板级支持包开发指南的 “BSP 层”。
创建新层: 创建层目录。
bitbake-layers create-layer可简化通用层 创建,将其放在 Source Directory 中其他层旁边。最简单的用法是在当前目录创建 "your_layer_name":
$ bitbake-layers create-layer your_layer_name
虽非强制要求,仍建议目录名以 "meta-" 开头,例如:
meta-mylayer meta-GUI_xyz meta-mymachine
除少数例外,层名遵循:
meta-root_name
这样可避免工具、组件或变量假定层名带 "meta-" 时出现问题。例如,后续 配置文件中的多个变量会追加去掉 "meta-" 的层名称。
以下命令在当前目录创建
meta-scottrif:$ bitbake-layers create-layer meta-scottrif NOTE: Starting bitbake server... Add your new layer with 'bitbake-layers add-layer meta-scottrif'
如命令提示所述,要让 OpenEmbedded Build System 使用该层,需将其 加入 build/conf/bblayers.conf。详见 “使用 bitbake-layers 脚本添加层”。
默认创建的内容包括:
带默认定义的
conf/layer.conf配置文件。典型配置项如下:
BBPATH:将层根目录加入 BitBake 搜索路径,用于定位类文件 (
.bbclass)、配置文件及include、require引入的文件。 与可执行程序的PATH类似,BitBake 使用第一个同名匹配文件, 因此建议自定义层中的类和配置文件名称保持唯一。文件包含机制详见 BitBake 用户手册的 Locating Include Files。
BBFILES:定义层中所有配方的位置。
BBFILE_COLLECTIONS:为层定义唯一标识符,供 OpenEmbedded Build System 引用。例如,"yoctobsp" 代表 "meta-yocto-bsp" 层。
其他层通过 LAYERDEPENDS 指定依赖时使用此名称。
BBFILE_PATTERN:解析时立即展开,提供层目录。
BBFILE_PRIORITY:当不同层存在同名配方时,确定选择优先级。
LAYERVERSION:定义层版本号,其他层可在 LAYERDEPENDS 中指定对这一确切版本的依赖。
LAYERDEPENDS:列出依赖层,使用 BBFILE_COLLECTIONS 定义的名称。
LAYERSERIES_COMPAT:列出兼容的 Yocto Project 发行版 小写代号, 例如 "blacksail"。
此变量有助于判断某层是否跟进了当前版本。
recipes-example子目录,其中的example子目录包含example.bb示例配方。COPYING.MIT许可证声明。脚本假定层自身内容采用多数层常用的 MIT 许可证。描述新层内容的
README。
如果优先级不采用默认 "6",可使用
--priority,或创建后编辑conf/layer.conf的 BBFILE_PRIORITY。示例配方名称和版本可 通过--example-recipe-name和--example-recipe-version修改。理解命令最简单的方法是实际试用,也可运行
bitbake-layers create-layer --help查看用法。添加内容: 根据层类型添加文件。机器支持配置放在
conf/machine/, 发行版策略放在conf/distro/,新配方放在recipes-*子目录。备注
符合 Yocto Project 要求的层目录结构见 BSP 开发指南的 “文件系统布局示例”。
按需测试兼容性: 如需为层及使用它的应用申请 Yocto Project 兼容标志, 请按兼容性申请流程操作,详见 “确保层与 Yocto Project 兼容”。
3 创建层的推荐实践
为便于维护,并避免影响其他机器的构建,请考虑:
避免覆盖其他层的完整配方: 不要复制整份配方后修改。应使用追加文件 (
.bbappend),仅覆盖需要修改的部分。避免复制包含文件: 为使用该文件的各配方添加
.bbappend。若新配方 需要包含文件,使用相对于原层目录的路径,例如require recipes-core/package/file.inc, 而非requirefile.inc。如果不得不覆盖包含文件,可能说明其 设计存在不足。应尝试解决根因,例如请维护者增加变量,使需要覆盖的内容 容易调整。合理组织层: 正确使用追加文件中的覆盖,并妥善放置机器专用文件,可以 避免错误元数据影响其他机器。例如:
修改变量以支持不同机器: 假设
meta-one层支持机器 "one", 在base-files.bbappend中修改 DEPENDS,增加 "foo" 依赖:DEPENDS = "foo"
任何包含
meta-one的构建都会增加该依赖,但可能并非所有机器都 需要。例如,为 "two" 构建时,只要 build/conf/bblayers.conf 包含meta-one,它的base-files也会依赖foo。要仅对 "one" 生效,应添加机器覆盖:
DEPENDS:one = "foo"
:append和:prepend也应采用同样策略:DEPENDS:append:one = " foo" DEPENDS:prepend:one = "foo "
以下
linux-yocto.inc片段是实际示例,仅为部分受支持架构调整内核 编译和链接选项:DEPENDS:append:aarch64 = " libgcc" KERNEL_CC:append:aarch64 = " ${TOOLCHAIN_OPTIONS}" KERNEL_LD:append:aarch64 = " ${TOOLCHAIN_OPTIONS}" DEPENDS:append:nios2 = " libgcc" KERNEL_CC:append:nios2 = " ${TOOLCHAIN_OPTIONS}" KERNEL_LD:append:nios2 = " ${TOOLCHAIN_OPTIONS}" DEPENDS:append:arc = " libgcc" KERNEL_CC:append:arc = " ${TOOLCHAIN_OPTIONS}" KERNEL_LD:append:arc = " ${TOOLCHAIN_OPTIONS}" KERNEL_FEATURES:append:qemuall = " features/debug/printk.scc"
将机器专用文件放到专用位置: 如果
base-files.bb等基础配方通过 SRC_URI 引用文件,可以用追加文件提供自己的版本。例如,meta-one/recipes-core/base-files/base-files.bbappend可通过 FILESEXTRAPATHS 扩展 FILESPATH:FILESEXTRAPATHS:prepend := "${THISDIR}/${BPN}:"
将文件放在
meta-one/recipes-core/base-files/base-files/后, "one" 构建就能找到它。但若其他机器的构建也包含meta-one,且 该位置是 FILESPATH 首个匹配位置,其他机器也会使用它。应改放到机器专用子目录,例如
meta-one/recipes-core/base-files/base-files/one/。这样既能保证 仅用于 "one",也使构建过程更快定位文件。因此,若要将 SRC_URI 引用的文件限制于特定机器构建,就应将 它们放入层内的机器专用子目录。
申请 Yocto Project 兼容性: 如需为层或使用它的应用使用兼容标志, 参阅 “确保层与 Yocto Project 兼容”。
遵循层命名惯例: 将自定义层存放在
meta-layer_name格式的 Git 仓库。在本地集中放置层: 将仓库克隆到 Source Directory,与其他层并列。
3 确保层与 Yocto Project 兼容
确保自建层能与现有 Yocto Project 层良好协作,可使社区成员更容易使用,也 可能获得使用 Yocto Project Compatible 标志的许可。
备注
只有 Yocto Project 成员组织可以使用此标志,不向一般用户开放。加入方式 见 Yocto Project 网站。
兼容性计划通过层申请流程,授权层及应用使用标志。流程包括:
通过
yocto-check-layer脚本测试。其约束来自层的实际使用经验及已知 问题。必须获得 "PASS" 才能完成兼容性登记。填写 https://www.yoctoproject.org/compatible-registration/ 上的申请表。
获得许可需满足:
能够勾选脚本检查已获得 "PASS"。
对表单问题回答 "Yes",或为 "No" 提供可接受解释。
属于 Yocto Project 成员组织。
下文介绍申请表和检查脚本。
3 申请 Yocto Project 兼容性计划
用表单申请层认证,成功后即可为层及使用它的应用使用兼容标志。
表单位于 https://www.yoctoproject.org/compatible-registration,按表单说明完成申请。
内容包括:
联系信息: 填写所需联系信息,并列出层兼容的 Yocto Project 已发布版本。
接受标准: 为清单各项回答 "Yes" 或 "No",在表单底部解释否定回答。
建议事项: 回答关于 Linux 内核使用和构建成功情况的问题。
3 yocto-check-layer 脚本
该脚本评估层与 Yocto Project 的兼容性。提交申请前应先运行,必须得到 "PASS" 才能成功处理申请。
测试分 COMMON、BSP 和 DISTRO 三类。发行版层需要通过 COMMON 与 DISTRO, BSP 层需要通过 COMMON 与 BSP。
在构建目录执行:
$ source oe-init-build-env
$ yocto-check-layer your_layer_directory
将命令中的层目录替换为实际路径。
通过 --dependency 传入层依赖:
$ source oe-init-build-env
$ yocto-check-layer --dependency <layer1_directory> <layer2_directory> ... -- your_layer_directory
BSP 层还应传入 --machines:
$ source oe-init-build-env
$ yocto-check-layer --machines <machine1> <machine2> ... -- your_layer_directory
这些机器对应 BSP 层 conf/machine/ 中的配置。
脚本判断层类型,然后运行相应测试。主要测试如下:
common.test_readme:检查层存在非空README。common.test_security:检查层内或所在 Git 仓库顶层存在SECURITY.md或类似文件。common.test_parse:检查 BitBake 能无错误解析,即bitbake -p。common.test_show_environment:检查全局和配方环境无错误,即bitbake -e。common.test_world:检查bitbake world可用。common.test_world_inherit_class:继承 yocto-check-layer 后检查bitbake world可用。common.test_patches_upstream_status:检查所有补丁包含 补丁上游状态。common.test_signatures:确保 BSP 和 DISTRO 层不附带改变签名的配方。common.test_layerseries_compat:检查层兼容性设置正确。bsp.test_bsp_defines_machines:检查 BSP 层提供机器配置。bsp.test_bsp_no_set_machine:确保添加 BSP 层时不自动设置机器。bsp.test_machine_world:确保选择任意机器时bitbake world都可用。bsp.test_machine_signatures:确保某台机器的构建只影响其专用任务的签名。distro.test_distro_defines_distros:检查 DISTRO 层提供发行版配置。distro.test_distro_no_set_distros:确保添加 DISTRO 层时不自动设置发行版。
完整列表见 OpenEmbedded-Core (OE-Core) 的 scripts/lib/checklayer/cases。
3 启用层
构建系统使用新层前,需在 Build Directory 的
build/conf/bblayers.conf 中,将层路径加入 BBLAYERS。
下面启用 meta-mylayer,注意它位于之前检出的官方 poky 仓库之外:
# POKY_BBLAYERS_CONF_VERSION is increased each time build/conf/bblayers.conf
# changes incompatibly
POKY_BBLAYERS_CONF_VERSION = "2"
BBPATH = "${TOPDIR}"
BBFILES ?= ""
BBLAYERS ?= " \
/home/user/poky/meta \
/home/user/poky/meta-poky \
/home/user/poky/meta-yocto-bsp \
/home/user/mystuff/meta-mylayer \
"
BitBake 按 BBLAYERS 从上到下解析各 conf/layer.conf,处理过程中
将该层的配方、类和配置加入源码目录。
3 通过自己的层追加其他层元数据
向另一配方追加元数据的文件称为 BitBake 追加文件,后缀为 .bbappend,
被追加的配方后缀为 .bb。
通过自己层中的 .bbappend,可以增加或修改另一层的配方内容,无需复制
原配方。追加文件位于自己的层,主 .bb 文件位于其他层。
这种方式不仅避免重复,还能自动沿用另一层对原配方的更新。如果复制配方, 则必须手动合并这些变化。
追加文件必须与对应配方具有相同基础名称。例如,someapp_3.1.bbappend
只适用于 someapp_3.1.bb。因此两者与版本号绑定;原配方升级并改名时,
追加文件也需改名,并可能需要更新。
BitBake 启动时发现没有匹配配方的 .bbappend 会报错。最佳做法是改名以
匹配新版本,同时检查追加内容是否仍适用。
也可以在追加文件名使用 %。例如,someapp_6.%.bbappend 适用于所有
6.* 次要版本,只有主版本更新时才会出错。
另外还可使用 BBMASK,尤其适合无法修改追加文件的情况。
3 通过层覆盖文件
以 formfactor 主配方及追加文件为例。主配方 formfactor_0.0.bb 位于
OpenEmbedded-Core (OE-Core) 的 meta/recipes-bsp/formfactor:
SUMMARY = "Device formfactor information"
DESCRIPTION = "A formfactor configuration file provides information about the \
target hardware for which the image is being built and information that the \
build system cannot obtain from other sources such as the kernel."
SECTION = "base"
LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://${COREBASE}/meta/COPYING.MIT;md5=3da9cfbcb788c80a0384361b4de20420"
SRC_URI = "file://config file://machconfig"
S = "${UNPACKDIR}"
PACKAGE_ARCH = "${MACHINE_ARCH}"
INHIBIT_DEFAULT_DEPS = "1"
do_install() {
# Install file only if it has contents
install -d ${D}${sysconfdir}/formfactor/
install -m 0644 ${S}/config ${D}${sysconfdir}/formfactor/
if [ -s "${S}/machconfig" ]; then
install -m 0644 ${S}/machconfig ${D}${sysconfdir}/formfactor/
fi
}
注意主配方的 SRC_URI,它告诉构建系统到哪里查找文件。
以下 formfactor_0.0.bbappend 来自 Raspberry Pi BSP 层 meta-raspberrypi,
位于 recipes-bsp/formfactor:
FILESEXTRAPATHS:prepend := "${THISDIR}/${PN}:"
构建系统默认通过 FILESPATH 查找文件。追加文件设置 FILESEXTRAPATHS 扩展搜索位置,这是添加文件搜索目录最可靠、推荐的方法。
示例加入 ${THISDIR}/${PN},展开为追加
文件同目录下的 formfactor 子目录,即
meta-raspberrypi/recipes-bsp/formfactor 下的子目录。需要建立对应结构,
保存层将要提供的文件或补丁。
由于引用 THISDIR,必须使用立即展开的 :=。末尾冒号同样重要,
确保列表条目仍由冒号分隔。
备注
THISDIR 由 BitBake 自动定义,切勿自行设置。使用 FILESEXTRAPATHS 的 ":prepend",可确保自己的路径优先搜索。
并非所有追加文件都增加文件。许多仅增加 systemd 等构建选项,
这类追加文件无需使用 FILESEXTRAPATHS。
最终,在 FILESOVERRIDES 包含 rpi 的 Raspberry Pi 上,
do_fetch 会使用
meta-raspberrypi/recipes-bsp/formfactor/formfactor/rpi/machconfig;
do_install 中非零文件大小检查通过,文件便会安装。
3 通过层安装额外文件
再看 xserver-xf86-config。主配方 xserver-xf86-config_0.1.bb 位于
OpenEmbedded-Core (OE-Core) 的 meta/recipes-graphics/xorg-xserver:
SUMMARY = "X.Org X server configuration file"
HOMEPAGE = "http://www.x.org"
SECTION = "x11/base"
LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://${COREBASE}/meta/COPYING.MIT;md5=3da9cfbcb788c80a0384361b4de20420"
SRC_URI = "file://xorg.conf"
S = "${UNPACKDIR}"
CONFFILES:${PN} = "${sysconfdir}/X11/xorg.conf"
PACKAGE_ARCH = "${MACHINE_ARCH}"
ALLOW_EMPTY:${PN} = "1"
do_install () {
if test -s ${UNPACKDIR}/xorg.conf; then
install -d ${D}/${sysconfdir}/X11
install -m 0644 ${UNPACKDIR}/xorg.conf ${D}/${sysconfdir}/X11/
fi
}
以下 xserver-xf86-config_%.bbappend 来自 meta-raspberrypi 的
recipes-graphics/xorg-xserver:
FILESEXTRAPATHS:prepend := "${THISDIR}/${PN}:"
SRC_URI:append:rpi = " \
file://xorg.conf.d/98-pitft.conf \
file://xorg.conf.d/99-calibration.conf \
"
do_install:append:rpi () {
PITFT = "${@bb.utils.contains("MACHINE_FEATURES", "pitft", "1", "0", d)}"
if [ "${PITFT}" = "1" ]; then
install -d ${D}/${sysconfdir}/X11/xorg.conf.d/
install -m 0644 ${UNPACKDIR}/xorg.conf.d/98-pitft.conf ${D}/${sysconfdir}/X11/xorg.conf.d/
install -m 0644 ${UNPACKDIR}/xorg.conf.d/99-calibration.conf ${D}/${sysconfdir}/X11/xorg.conf.d/
fi
}
FILES:${PN}:append:rpi = " ${sysconfdir}/X11/xorg.conf.d/*"
与上例一样,它设置 FILESEXTRAPATHS。另外,当
FILESOVERRIDES 包含 rpi 时,利用 SRC_URI 添加额外源文件。
do_install 再检查相应 MACHINE_FEATURES,启用时安装
这些文件。文件也列入 FILES,确保会打包。
3 设置层优先级
每个层都有优先级。不同层存在同名配方时,数字较大的层优先。优先级也影响同一
配方多个 .bbappend 的应用顺序。可以手动设置,或让构建系统按层依赖计算。
手动设置时,使用 BBFILE_PRIORITY 并追加层的基础名称:
BBFILE_PRIORITY_mylayer = "1"
3 通过层提供全局配置
有时需要在层加入构建后,使某些配置对整个环境生效。layer.conf 是影响
全局的 configuration file,可以用于此目的。
警告
不应在 layer.conf 中无条件提供全局配置。下文
通过层有条件地提供全局配置 介绍仅在满足特定条件时提供配置的方法。
例如,层提供 linux-custom 内核配方,希望让
PREFERRED_PROVIDER_virtual/kernel 指向它:
PREFERRED_PROVIDER_virtual/kernel = "linux-custom"
可以将其定义在 layer.conf。如果层位于 BBLAYERS 末尾,此设置
优先于前面的赋值,但后续解析的机器或发行版等 configuration file
仍可覆盖它。
3 通过层有条件地提供全局配置
有时只有启用层提供的某项功能后,才应应用全局配置。layer.conf 解析较早,
此时 DISTRO_FEATURES 和 MACHINE_FEATURES 尚不可用,无法
直接基于它们条件赋值。可以结合 USER_CLASSES 和条件 require
绕过此限制。
假设 meta-mylayer 提供名为 mylayer-kernel 的
发行版功能,仅当 DISTRO_FEATURES 包含
该功能时,才设置内核 PREFERRED_PROVIDER:
在
meta-mylayer/conf/distro/include/创建包含文件,例如mylayer-kernel-provider.inc,将内核提供者设为linux-custom:PREFERRED_PROVIDER_virtual/kernel = "linux-custom"
在
layer.conf提供包含文件路径:META_MYLAYER_KERNEL_PROVIDER_PATH = "${LAYERDIR}/conf/distro/include/mylayer-kernel-provider.inc"
在
meta-mylayer/classes-global/创建meta-mylayer-cfg.bbclass, 使用layer.conf中的META_MYLAYER_KERNEL_PROVIDER_PATH,按条件 require 上述文件:require ${@bb.utils.contains('DISTRO_FEATURES', 'mylayer-kernel', '${META_MYLAYER_KERNEL_PROVIDER_PATH}', '', d)}bb.utils.contains详情见 lib/bb/utils.py。备注
bb.utils.contains返回空字符串时,require按设计不会失败。回到
layer.conf,将meta-mylayer-cfg加入 USER_CLASSES:USER_CLASSES:append = " meta-mylayer-cfg"
该类将全局继承。但由于
require有条件,只有 DISTRO_FEATURES 启用mylayer-kernel时才会产生实际影响。
相同方法也适用于 机器功能。虽然不是强制要求,
建议将 DISTRO_FEATURES 的包含文件放在层的 conf/distro/include,
将 MACHINE_FEATURES 的包含文件放在 conf/machine/include。
3 管理层
bitbake-layers 可展示多层项目的配方结构。它报告已配置层的路径和优先级,
以及 .bbappend 与对应配方,有助于发现潜在问题。
查看帮助:
$ bitbake-layers --help
可用命令如下:
help:显示一般帮助或指定命令帮助。show-layers:显示当前配置的层。show-overlayed:列出被覆盖配方,即更高优先级层中存在同名配方的情况。show-recipes:列出可用配方及提供它们的层。show-appends:列出.bbappend及其对应配方。show-cross-depends:列出跨层配方依赖。add-layer:向 build/conf/bblayers.conf 添加层。remove-layer:从 build/conf/bblayers.conf 移除层。flatten:将层配置扁平化到独立输出目录,其中包含所有层内容,移除被 覆盖的配方,并将追加文件内容并入对应配方。可能需要手动清理:非配方文件,例如补丁,会被覆盖,命令会对此发出警告。
layer.conf中超出普通层设置的内容需要处理,因为只使用最低优先级 层的layer.conf。追加文件中的覆盖或追加项需要整理。各
.bbappend内容会进入扁平化 配方,但追加或修改的变量值需自行清理。以下示例中,工具用#### bbappended ...标明后续内容来源:... DESCRIPTION = "A useful utility" ... EXTRA_OECONF = "--enable-something" ... #### bbappended from meta-anotherlayer #### DESCRIPTION = "Customized utility" EXTRA_OECONF += "--enable-somethingelse"
理想情况下,整理为:
... DESCRIPTION = "Customized utility" ... EXTRA_OECONF = "--enable-something --enable-somethingelse" ...
layerindex-fetch:从层索引获取层及依赖层,并加入 build/conf/bblayers.conf。layerindex-show-depends:从层索引查找依赖。save-build-conf:将当前 build/conf/local.conf 和 build/conf/bblayers.conf 保存为层中的模板,以后通过 TEMPLATECONF 设置构建。详见 “创建自定义模板配置目录”。create-layer:创建基础层。create-layers-setup:生成配置文件或脚本,用于复现当前构建各层的目录 结构和修订版本。详见 “保存和恢复层配置”。show-machines:列出当前各层提供的机器。
3 使用 bitbake-layers 脚本添加层
创建通用层后,必须加入 build/conf/bblayers.conf,让构建 系统知道该层并从中搜索元数据。
使用 bitbake-layers add-layer:
$ bitbake-layers add-layer your_layer_name
下面添加 meta-scottrif,再显示配置文件中的层:
$ bitbake-layers add-layer meta-scottrif
NOTE: Starting bitbake server...
Parsing recipes: 100% |##########################################################| Time: 0:00:49
Parsing of 1441 .bb files complete (0 cached, 1441 parsed). 2055 targets, 56 skipped, 0 masked, 0 errors.
$ bitbake-layers show-layers
NOTE: Starting bitbake server...
layer path priority
==============================================================================================
meta /home/scottrif/bitbake-builds/layers/openembedded-core/meta 5
meta-poky /home/scottrif/bitbake-builds/layers/meta-yocto/meta-poky 5
meta-yocto-bsp /home/scottrif/bitbake-builds/layers/meta-yocto/meta-yocto-bsp 5
workspace /home/scottrif/bitbake-builds/build/workspace 99
meta-scottrif /home/scottrif/bitbake-builds/build/meta-scottrif 6
加入该文件后,构建系统就能在构建期间定位此层。
备注
构建系统按照列表从上到下搜索层。
3 保存和恢复层配置
构建能够正常工作且层集合正确后,可以将各层名称、来源仓库和 SCM 修订版本 保存到配置文件,便于以后在原机器或其他机器复现。方法如下:
$ bitbake-layers create-layers-setup /srv/work/alex/meta-alex/
NOTE: Starting bitbake server...
NOTE: Created /srv/work/alex/meta-alex/setup-layers.json
NOTE: Created /srv/work/alex/meta-alex/setup-layers
工具需要一个参数指定输出位置。输出包括 JSON 层配置和 setup-layers
脚本,可在其他位置或主机恢复这些层。参数可指向自定义层,此时它成为必须
首先检出的“引导层”,也可以指向完全独立的位置。
恢复步骤如下:
克隆引导层或其他存放 JSON 配置和设置脚本的仓库。
不加选项直接运行脚本:
alex@Zen2:/srv/work/alex/my-build$ meta-alex/setup-layers Note: not checking out source meta-alex, use --force-bootstraplayer-checkout to override. Setting up source meta-intel, revision 15.0-hardknott-3.3-310-g0a96edae, branch master Running 'git init -q /srv/work/alex/my-build/meta-intel' Running 'git remote remove origin > /dev/null 2>&1; git remote add origin https://git.yoctoproject.org/meta-intel' in /srv/work/alex/my-build/meta-intel Running 'git fetch -q origin || true' in /srv/work/alex/my-build/meta-intel Running 'git checkout -q 0a96edae609a3f48befac36af82cf1eed6786b4a' in /srv/work/alex/my-build/meta-intel Setting up source poky, revision 4.1_M1-372-g55483d28f2, branch akanavin/setup-layers Running 'git init -q /srv/work/alex/my-build/poky' Running 'git remote remove origin > /dev/null 2>&1; git remote add origin https://git.yoctoproject.org/poky' in /srv/work/alex/my-build/poky Running 'git fetch -q origin || true' in /srv/work/alex/my-build/poky Running 'git remote remove poky-contrib > /dev/null 2>&1; git remote add poky-contrib ssh://git@push.yoctoproject.org/poky-contrib' in /srv/work/alex/my-build/poky Running 'git fetch -q poky-contrib || true' in /srv/work/alex/my-build/poky Running 'git checkout -q 11db0390b02acac1324e0f827beb0e2e3d0d1d63' in /srv/work/alex/my-build/poky
备注
此方法也可更新已有检出目录。
备注
脚本可独立运行,构建机器只需安装 python3 和 git。
备注
create-layers-setup 和 setup-layers 都有其他可定制行为的选项,
可通过 --help 查看。