Yocto理论基础之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中有一些常见的注意事项:

  1. 创建layer的过程中切忌直接复制其他layer中的bb文件到当前layer然后在修改,最佳实践是如果需要复用已有的recipes你应该创建.bbappend文件来追加修改。
  2. 在.bbappend文件中正确使用overrides机制,并在层中放置特定于machine的文件,可以确保构建不会使用错误的元数据,也不会对不同machine的构建产生负面影响:
    比如我有一个meta-layer里面的recipes有如下定义:
DEPENDS = "foo"

如果我只想在编译raspberrypi的时候才依赖该组件,我可以这么写:

DEPENDS:rpi = "foo"

同理如果我想在特定machine时追加或者删除变量:

DEPENDS:append:rpi = "foo"
DEPENDS:remove:stm32 = "foo"
  1. 如果在.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" ]; then
        install -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:

  1. 创建layer
bitbake-layers add-layer your_layer_name
  1. 将layer添加到构建系统中
bitbake-layers add-layer meta-mylayer
  1. 查看layer
bitbake-layers show-layers

bitbake-layers的常用指令可以通过–help查看:

bitbake-layers  --help

相关推荐

  1. Yocto理论基础layer

    2024-04-04 00:58:01       22 阅读
  2. 十、使用repo管理yocto各个layer

    2024-04-04 00:58:01       13 阅读
  3. yocto系列配置ubuntu22.04主机

    2024-04-04 00:58:01       24 阅读
  4. 自动化理论基础(2)—开发语言Python

    2024-04-04 00:58:01       26 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-04-04 00:58:01       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-04 00:58:01       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-04 00:58:01       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-04 00:58:01       20 阅读

热门阅读

  1. 网络安全专业术语

    2024-04-04 00:58:01       11 阅读
  2. 蓝桥杯刷题--python-36

    2024-04-04 00:58:01       13 阅读
  3. how to Optimize mysql select clause

    2024-04-04 00:58:01       15 阅读
  4. flutter一个bloc可以对应多个state

    2024-04-04 00:58:01       14 阅读
  5. 讨论 OpenSIPS 预加载路由的问题

    2024-04-04 00:58:01       20 阅读