Yocto介绍
介绍
yocto是一个 构建嵌入式 Linux 系统的自动化工具链,它帮助开发者为特定硬件平台定制精简、高效的 Linux 系统镜像。Poky 是 Yocto 项目提供的一个 完整的示例构建环境,包含了Linux 操作系统的技术栈/层级结构所有必须的工具和配方,配置参数。本章主要介绍OpenEmbedded 工作流程如何集成各个软件包到一个完整的的linux操作系统技术栈和可引导的文件系统镜像。下面看下poky的结构和组件。
构建开源软件
构建开软软件包经过如下的流程:
- 获取源代码
- 解压源代码
- 打包源代码补丁和新增功能
- 配置编译环境参数
- 编译和链接
- 拷贝二进制编译成果物和配置文件到目标文件夹
- 打包上面的成果物,变成可以安装到其它系统的文件
开源软件包构建流程图
元数据文件详细介绍
元数据细分为两类:配置文件和配方
- 配置文件
配置文件指的是后缀.conf
的文件,比如:bitbake.conf
,layer.conf
,bblayers.conf
,local.conf
,<distribution-name>.conf
,<machine-name>.conf
, - 配方(Recipes)
定义了每个软件包的构建工作流。配方包含了BitBake如何构建特定的软件指令。以.bb
为后缀。
为了提供效率,将编译方式一样的配方做成模版(class),以.bbclass
文件为后缀。
BitBake另一种复用的方法是采用附加文件方式,后缀.bbappend
配置文件,对已有的配方进行修改,和微调。 - 工作流程
- 代码获取:配方会指定源代码的位置,BitBake 可以从构建主机本地获取源代码,也可以通过网络从外部源代码仓库远程下载。配方(Recipes)使用
SRC_URI
变量指定代码位置 - 源代码解包与打补丁
- 配置,编译和安装
- 输出分析和打包:
PACKAGE_CLASSES
变量决定 BitBake 使用哪种打包方式 - 镜像创建:
IMAGE_INSTALL
变量用于列出你希望包含在最终镜像中的软件包,支持多种格式打包方式:ext2, ext3, ext4, and jffs。 - SDK生成
- 代码获取:配方会指定源代码的位置,BitBake 可以从构建主机本地获取源代码,也可以通过网络从外部源代码仓库远程下载。配方(Recipes)使用
开源嵌入式系统编译架构
主要由三个基本组成部分,构建系统,构建环境,元数据层,如下图所示:
编译系统架构
如下所示:
tree -L 1
.
├── bitbake
├── build
├── contrib
├── documentation
├── get-pip.py
├── LICENSE
├── LICENSE.GPL-2.0-only
├── LICENSE.MIT
├── MAINTAINERS.md
├── MEMORIAM
├── meta
├── meta-poky
├── meta-selftest
├── meta-skeleton
├── meta-yocto-bsp
├── oe-init-build-env
├── README.hardware.md -> meta-yocto-bsp/README.hardware.md
├── README.md -> README.poky.md
├── README.OE-Core.md
├── README.poky.md -> meta-poky/README.poky.md
├── README.qemu.md
├── scripts
└── SECURITY.md10 directories, 13 files
penEmbedded 构建系统大部分是自包含的,并且不会将其组件安装到构建主机的系统目录中,因此在同一台构建主机上使用不同版本的构建系统和不同的构建环境是相当容易的。
编译环境架构
进入build文件夹,在子文件夹conf
里面的文件bblayers.conf
和local.conf
说明配置的环境变量。BBLAYERS
变量用于指定构建过程中包含的所有层(Layers)。层是包含配方(recipes)、配置文件和其他构建所需文件的目录结构
元数据层
元数据层是用于组织和管理构建所需元数据的目录结构。它们包含了配方、任务、类、配置文件等,用来定义如何构建软件、如何处理依赖关系以及如何设置构建配置。
层架构如下:
元数据层的目录名通常由meta开头,后跟一个连字符和该层的名称。
支持自定义做配方,在里面通过修改.bb配置文件做定制。