1 工作流

下图表示OpenEmbedded构建系统生成的高级工作流:


Yocto理论篇 | OpenEmbedded构建系统之Sources_源文件

通常,构建的工作流由几个功能区域组成:

  • User Configuration:可用于控制生成过程的元数据。
  • Metadata Layers:提供软件、板子和发行版元数据的各种层。
  • Source Files:上游发布、本地项目和SCMs。
  • Build System:在BitBake控制下的进程。这个模块扩展了BitBake如何获取源代码、应用补丁、完成编译、分析生成包的输出、创建和测试包、生成镜像以及生成交叉开发工具。
  • Package Feeds:包含输出包(RPM、DEB或IPK)的目录,这些输出包随后用于构建由构建系统生成的镜像或软件开发工具包(SDK)。如果启用了运行时包管理,还可以使用web服务器或其他方式复制和共享这些提要,以便于在运行时扩展或更新设备上的现有镜像。
  • Images:工作流生成的镜像。
  • Application Development SDK:与镜像一起或与BitBake单独生成的交叉开发工具。

2 Sources

为了使OpenEmbedded构建系统从而创建镜像或其他,它必须能够访问源文件。通用工作流图使用“Upstream Project Releases”、“Local Projects”和“SCMs (optional)”框表示源文件。此图表示镜像源,它在定位源文件时也起着作用,并带有“Source Materials”框。

BitBake使用SRC_URI变量来指向源文件,而不考虑它们的位置。每个配方必须有一个指向源的SRC_URI变量。

另一个在源文件的来源中起重要作用的区域是由DL_DIR变量指向的。这个区域是一个缓存,可以保存以前下载的源文件。您还可以指示OpenEmbedded构建系统从Git存储库创建tarball(这不是默认行为),并使用BB_GENERATE_MIRROR_TARBALLS变量将它们存储在DL_DIR中。

明智地使用DL_DIR目录可以节省构建系统在查找文件时跨越Internet的行程。使用下载目录的一个好方法是让DL_DIR指向构建目录之外的区域。这样做可以在需要时安全地删除构建目录,而不必担心删除任何下载的源文件。

下面是对常规工作流图的源文件区域的更详细的查看:

Yocto理论篇 | OpenEmbedded构建系统之Sources_嵌入式_02


2.1 Upstream Project Releases

上游项目版本以存档文件的形式存在于任何地方(例如tarball或zip文件)。这些文件对应于各个配方。例如,图中的BusyBox、Qt和Dbus都有特定版本。存档文件可以用于任何可以使用配方构建的已发布产品。

2.2 Local Projects

本地项目是用户提供的自定义软件。这些软件位于项目的本地位置,可能是用户项目的目录(例如,包含该组使用的开发源树的本地目录)。

包含本地项目的规范方法是使用externalsrc类来包含该本地项目。你可以使用local.conf或者一个配方的append file来覆盖或设置配方指向磁盘上的本地目录来拉入整个源码树。

2.3 Source Control Managers (Optional)

构建系统可以从中获取源文件的另一个途径是使用各种源代码管理器(SCMs)的抓取器,比如Git或Subversion。在这种情况下,将克隆或切换存储库。BitBake中的do_fetch任务使用SRC_URI变量和参数的前缀来确定正确的抓取器模块。

在获取存储库时,BitBake使用SRCREV变量来确定要从中生成的特定版本。

2.4 Source Mirror(s)

有两种镜像:预镜像和常规镜像。PREMIRRORS和MIRRORS变量分别指向这些变量。BitBake在向上游查找任何源文件之前检查预镜像。如果共享目录不是由DL_DIR变量定义的目录,则预镜像是合适的。预镜像通常指向本地的共享目录。

常规镜像可以是Internet上的任何站点,如果主站点由于某种原因无法正常运行,则可以将其用作源代码的替代位置。