Yocto Project开发(三):OpenEmbedded构建系统

PokyYocto项目的参考发行版,它包含 OpenEmbedded构建系统(BitBakeOpenEmbedded-Core)以及一组元数据,可帮助我们开始构建自己的发行版。

OpenEmbedded工作流

OpenEmbedded构建系统 采用了“工作流程”来完成镜像和SDK的生成。下图概述了该工作流程:
Yocto Project开发(三):OpenEmbedded构建系统_第1张图片
以下是“工作流程”的简短步骤:

  • 源获取:构建系统从指定位置获取并下载源代码。构建系统支持标准方法,如tarball或源代码存储库系统,如Git
  • 源解压和打补丁:下载源代码后,构建系统会将源提取到应用修补程序的本地工作区。
  • 配置,编译和安装:构建系统提供了各种模式来构建标准软件包,例如基于MakeGNU AutotoolsCMake的包。运行配置和编译软件的常用步骤后,构建系统讲软件安装到临时暂存区域。
  • 输出分析和打包:在输出分析中,由前一个步骤生成和安装的软件按照功能分成:运行时文件,调试文件,开发文件,文档和语言环境。在分析之后,我们选择的二进制包格式(DEBRPMIPK)用于汇总和打包软件。
  • QA和健全性检查:在整个构建过程中运行不同的QA和健全性检查。
  • 镜像创建:创建二进制文件后,构建系统会生成二进制包提要,用于创建最终的根文件镜像。镜像可以以多种格式被创建,包括用于解压在格式化的文件系统中的tar.bz2,它们可以被直接比特复制到合适的存储设备。
  • 软件开发工具包生成:作为格外的步骤:构建系统生成用于并行应用程序开发的自定义可扩展SDKeSDK)。

通常,构建的“工作流程”包含几个功能区域:

  • 用户配置: 可用于控制构建过程的元数据。
  • 元数据层: 提供软件,机器和发行版元数据的各种层。
  • 源文件: 上游版本,本地项目和SCM
  • 构建引擎: BitBake 控制下的进程 。该块扩展了BitBake如何获取源代码,应用补丁程序,完成编译,分析包生成的输出,创建和测试包,生成镜像以及生成交叉开发工具。
  • 包源: 包含输出包(RPMDEBIPK)的目录,随后用于构建系统生成的镜像或软件开发工具包(SDK)。
  • 镜像: 工作流程生成的镜像。
  • 应用程序开发SDK: 与镜像一起生成或使用BitBake单独生成的交叉开发工具。
    下面介绍其中几个重点的功能区域。

用户配置

用户配置有助于定义构建。通过用户配置,你可以告诉BitBake你要为其构建镜像的目标体系结构,存储下载源的位置以及其他构建属性。

下图显示了常规工作流程图的“用户配置”框的扩展表示 :
Yocto Project开发(三):OpenEmbedded构建系统_第2张图片
下面程序清单显示了在构建已经运行后的前2级目录,我们重点关注配置目录conf

$ tree -L 2 build
build
├── cache
├── conf
│   ├── bblayers.conf
│   ├── local.conf
│   ├── sanity_info
│   └── templateconf.cfg
├── nohup.out
└── tmp
    ├── abi_version
    ├── buildstats
    ├── cache
    ├── deploy
    ├── hosttools
    ├── log
    ├── pkgdata
    ├── saved_tmpdir
    ├── sstate-control
    ├── stamps
    ├── sysroots
    ├── sysroots-components
    ├── sysroots-uninative
    ├── work
    └── work-shared

新创建的环境仅仅包含conf子目录和2个文件:bblayers.conflocal.conf。前面的文章已经遇到过local.conf,这个文件包含用户构建环境的所有配置设置。文件bblayers.conf包含用户构建环境的层设置,比如下面这个典型的bblayers.conf文件:

# POKY_BBLAYERS_CONF_VERSION is increased each time build/conf/bblayers.conf
# changes incompatibly
POKY_BBLAYERS_CONF_VERSION = "2"

BBPATH = "${TOPDIR}"
BBFILES ?= ""

BBLAYERS ?= " \
  /absolute/path/to/poky/meta \
  /absolute/path/to/poky/meta-poky \
  /absolute/path/to/poky/meta-yocto-bsp \
  /absolute/path/to/poky/meta-altera \
  "

这个文件中最重要的变量是BBLAYERS,他是空格分隔的,到所有该构建环境包含的层的路径列表。

元数据层

元数据层是分组和组织菜谱,类,配置文件和其他元数据到逻辑实体中的容器。通常,存在三种类型的层输入:

  • 元数据(.bb+补丁): 包含用户提供的配方文件,补丁和附加文件的软件层。一个很好的例子可能是 meta-qt5,该层适用于桌面和嵌入式的流行的Qt跨平台应用程序开发框架。
  • 机器BSP配置: 板支持包(BSP)层(即下图中的“BSP层”),提供特定于机器的配置。此类信息特定于特定目标体系结构。来自 PokyBSP层的一个很好的例子是meta-yocto-bsp层。
  • 发行配置: 发行层(即下图中的“Distro Layer”),为正在为特定分发构建的镜像或SDK提供顶级或一般策略。例如,默认发行层是meta-poky层。
    Yocto Project开发(三):OpenEmbedded构建系统_第3张图片
    通常,所有层都具有类似的结构。如果要分发图层,它们都包含许可文件COPYING.MITREADME作为良好实践的说明文件,特别是如果要分发图层,配置目录和配方目录的时候会非常有效。当然,这里面最重要的文是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 += "yocto"
BBFILE_PATTERN_yocto = "^${LAYERDIR}/"
BBFILE_PRIORITY_yocto = "5"

LAYERSERIES_COMPAT_yocto = "thud"

# This should only be incremented on significant changes that will
# cause compatibility issues with other layers
LAYERVERSION_yocto = "3"

LAYERDEPENDS_yocto = "core"

REQUIRED_POKY_BBLAYERS_CONF_VERSION = "2"

第一个赋值向BBPATH变量增加层目录。之后是层的菜谱被增加到BBFILES变量。BBFILE_COLLECTIONS是层名字列表,BBFILE_PATTERNBBFILE_PRIORITY都以这个层名字为条件来匹配路径或者确定优先级的。

构建引擎

OpenEmbedded构建系统使用 BitBake 生成镜像和软件开发工具包(SDK)。该构建引擎主要完成的工作包括:获取源代码,应用补丁程序,完成编译,分析包生成的输出,创建和测试包,生成镜像以及生成交叉开发工具。这部分的内容会在下一篇文章中全面展开讲解。

未完待续。。。

你可能感兴趣的:(Yocto)