Yocto理论基础之layer
- 一、layer介绍
- 二、layer最佳实践
- 三、创建layer
一、layer介绍
在poky源码中我们基本上在每一个meta layer中都能看到一个layer.conf,里面大致内容如下:
# We have a conf and classes directory, add to BBPATH
BBPATH .= ":${LAYERDIR}"# We have recipes-* directories, add to BBFILES
BBFILES += "${LAYERDIR}/recipes-*/*/*.bb \${LAYERDIR}/recipes-*/*/*.bbappend"BBFILE_COLLECTIONS += "yoctobsp"
BBFILE_PATTERN_yoctobsp = "^${LAYERDIR}/"
BBFILE_PRIORITY_yoctobsp = "5"
LAYERVERSION_yoctobsp = "4"
LAYERSERIES_COMPAT_yoctobsp = "dunfell"
这几个基本变量的作用介绍:
- BBPATH:添加当前layer的路径到bitbake编译系统的搜索路径。
- BBFILES:定义当前recipes里面的所有bb文件的路径。
- BBFILE_COLLECTIONS:为layer添加一个唯一标识名,供bitbake系统快速查找对应的meta layer
- BBFILE_PATTERN_yoctobsp:在bitbake解析期间立即展开以提供当前layer的所有目录。
- BBFILE_PRIORITY_yoctobsp:当构建系统在不同layer中找到相同名称的recipes时,为该layer中的recipes设置优先级,让构建系统决定使用哪个。
- LAYERVERSION_yoctobsp:设置当前layer的版本,这样如果不同layer之间如果有依赖关系(LAYERDEPENDS 控制)可以精细化控制到依赖layer的某一个具体版本。
- LAYERDEPENDS:指定当前layer依赖的其他layer名称。
- LAYERSERIES_COMPAT_yoctobsp:当前layer兼容的yocto版本。
二、layer最佳实践
维护和开发layer中有一些常见的注意事项:
- 创建layer的过程中切忌直接复制其他layer中的bb文件到当前layer然后在修改,最佳实践是如果需要复用已有的recipes你应该创建.bbappend文件来追加修改。
- 在.bbappend文件中正确使用overrides机制,并在层中放置特定于machine的文件,可以确保构建不会使用错误的元数据,也不会对不同machine的构建产生负面影响:
比如我有一个meta-layer里面的recipes有如下定义:
DEPENDS = "foo"
如果我只想在编译raspberrypi的时候才依赖该组件,我可以这么写:
DEPENDS:rpi = "foo"
同理如果我想在特定machine时追加或者删除变量:
DEPENDS:append:rpi = "foo"
DEPENDS:remove:stm32 = "foo"
- 如果在.bbappend文件中有附加自己的文件,理论上你需要添加到原bb文件的SRC_URI变量中,为了构建系统能够找到你的文件,你需要将你使用如下变量追加当前layer的路径,简单示例如下:
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" ]; theninstall -d ${D}/${sysconfdir}/X11/xorg.conf.d/install -m 0644 ${WORKDIR}/xorg.conf.d/98-pitft.conf ${D}/${sysconfdir}/X11/xorg.conf.d/install -m 0644 ${WORKDIR}/xorg.conf.d/99-calibration.conf ${D}/${sysconfdir}/X11/xorg.conf.d/fi
}FILES:${PN}:append:rpi = " ${sysconfdir}/X11/xorg.conf.d/*"
三、创建layer
bitbake提供了一些指令供我们快捷的创建layer:
- 创建layer
bitbake-layers add-layer your_layer_name
- 将layer添加到构建系统中
bitbake-layers add-layer meta-mylayer
- 查看layer
bitbake-layers show-layers
bitbake-layers的常用指令可以通过–help查看:
bitbake-layers --help