当前位置: 首页 > 操作系统 > Linux > 正文

使用 Yocto Project 构建自定义嵌入式 Linux 发行版

时间:2014-03-29 IBM Jeffrey M. Osier-Mix

概述

Yocto Project 是一个开源协作项目,它提供了一些模板、工具和方法来支持面向嵌入 式产品的自定义 Linux 系统,不管硬件架构是什么。我想要告诉那些对 yocto 这个名称不甚理解的用 户的是,术语 yocto 是最小的 SI 单元。最为一个前缀,yocto 表示 10^-24。

本文将提供一个 分步指导,向您介绍如何使用 Yocto Project 的行业标准开源工具为嵌入式设备创建自定义的 Linux 操作系统,并使用 QEMU 在一台虚拟机中启动操作系统。Yocto Project 是由大型硬件公司和操作系统 供应商资助的、由 Linux 基金会赞助的开源项目,提供了一些行业领先的工具、方法和元数据来构建 Linux 系统。

Yocto Project 的两大主要组件由 Yocto Project 和 OpenEmbedded 项目一起维 护,这两个组件是 BitBake 和 OpenEmbedded-Core,前者是构建引擎,后者是运行构建过程所使用的一 套核心配方 (recipe)。下一节会介绍所有项目组件。

Yocto Project 简介

作为一个协作 项目,Yocto Project 有时也称为 “umbrella” 项目,它吸纳了许多不同的开发流程部分。在整个 Yocto Project 中,这些部分被称为项目,包括构建工具、称为核心配方 的构建指令元数据、库、实用 程序和图形用户界面 (GUI)。

Poky

Poky 是 Yocto Project 的一个参考构建系统。它包 含 BitBake、OpenEmbedded-Core、一个板卡支持包 (BSP) 以及整合到构建过程中的其他任何程序包或 层。Poky 这一名称也指使用参考构建系统得到的默认 Linux 发行版,它可能极其小 (core-image- minimal),也可能是带有 GUI 的整个 Linux 系统 (core-image-sato)。

您可以将 Poky 构建系 统看作是整个项目的一个参考系统,即运行中进程的一个工作示例。在下载 Yocto Project 时,实际上 也下载了可用于构建默认系统的这些工具、实用程序、库、工具链和元数据的实例。这一参考系统以及 它创建的参考发行版都被命名为 Poky。您还可以将此作为一个起点来创建您自己的发行版,当然,您可 以对此发行版随意命名。

所有构建系统都需要的一个项目是工具链:一个编译器、汇编程序、链 接器以及为给定架构创建二进制可执行文件所需的其他二进制实用程序。Poky 使用了 GNU Compiler Collection (GCC),不过您也可以指定其他工具链。Poky 使用了一种名为交叉编译 的技术:在一个架 构上使用工具链为另一个架构构建二进制可执行文件(例如,在基于 x86 的系统上构建 ARM 发行版) 。开发人员常常在嵌入式系统开发中使用交叉编译来利用主机系统的高性能。

元数据集

元数据集按层 进行排列,这样一来每一层都可以为下面的层提供单独的功能。基层是 OpenEmbedded- Core 或 oe-core,提供了所有构建项目所必需的常见配方、类和相关功能。然后您可以通过在 oe-core 之上添加新层来定制构建。

OpenEmbedded-Core 由 Yocto Project 和 OpenEmbedded 项目共同 维护。将 Yocto Project 与 OpenEmbedded 分开的层是 meta-yocto 层,该层提供了 Poky 发行版配置 和一组核心的参考 BSP。

OpenEmbedded 项目本身是一个独立的开源项目,具有可与 Yocto Project 交换的配方(大部分)以及与 Yocto Project 类似的目标,但是两者具有不同的治理和范围。

板卡支持包

BSP 包含为特定板卡或架构构建 Linux 必备的基本程序包和驱动程序。这通 常由生产板卡的硬件制造商加以维护。BSP 是 Linux 操作系统与运行它的硬件之间的接口。注意,您也 可以为虚拟机创建 BSP。

BitBake

BitBake 是一个构建引擎。它读取配方并通过获取程序 包来密切关注它们、构建它们并将结果纳入可引导映像。BitBake 由 Yocto Project 和 OpenEmbedded 项目共同维护。

Hob

为了让嵌入式 Linux 开发更容易,Yocto Project 提供了几种不同 的图形工作方法。项目的一个较新的添加项叫作 Hob,它向 BitBake 和构建过程提供一个图像前端。两 者的开发工作仍在继续,包含社区用户研究。

开源许可证合规性

遵守开源许可证是任何 Linux 开发工作的一个极其重要的部分。Yocto Project 的一个目标是尽可能容易地实现合规性。可以 极为轻松地使用 Yocto Project 工具来创建清单(甚至构建整个源存储库)和过滤构建过程,用它们排 除使用特定许可证的程序包。该项目使用了 Linux 基金会的 “开放遵守计划” (Open Compliance Program),该计划包含一个 Software Package Data Exchange? (SPDX?) 规范。

EGLIBC

嵌入式 GLIBC (EGLIBC) 是 GNU C Library (GLIBC) 的一个变体,旨在能够在嵌入式系统上运行。 EGLIBC 的目标包括减少内存占用、让组件可配置、更好地支持交叉编译和交叉测试。EGLIBC 是 Yocto Project 的一部分,但在它自己的治理结构内加以维护。