Yocto 分析

一,概念

Yocto项目是一个开源协作项目,主要用来构建Rootfs, 同类的工具有BuildRoot

二,基本术语

Yocto: 开源项目名称,构建自定义的Linux 系统
Poky: Yocto项目中提供一个构建Linux的完成示例。
BitBake: OpenEmbedded构建系统的核心工具,负责解析元数据,从中生成任务列表,然后执行这些任务。
Layers: 包含相关元数据(即指令集)的存储库,它们告诉OpenEmbedded构建系统如何构建目标。方便项目中各个模块的隔离,有助于项目的维护。例如(meta-skeleton , meta-yocto-bsp) 默认以meta-xxx开头
Recipes: 具有.bb后缀的文件,通常,xxx.bb文件包含了软件的信息。
Metadata: 元数据是Yocto项目的核心,基本元素的描述与来源。
Yocto 代表饭店名,知道是做什么的。Pocky代表厨房(如何做出一道美味的菜品), Layers代表菜系(湘菜,川菜,北方菜) Recipes代表具体的菜谱(描述一道菜具体是怎么做的), MetaData代表做菜的原材料。 各种材料准备好了,BitBake代表厨师(看如何做出一道菜的)。

三,流程

Yocto 分析

用户配置: 一些用户设置的的元数据,能够控制构建流程。
元数据层:各种不同的层,提供了软件,主机和发行等相关的元数据(类似于meta-yocto-bsp, meta-poky等层)
源文件:上游仓库,本地项目和一些版本控制软件。相当于你源代码的来源。
构建系统(上图很大的淡蓝色块): 由Bitbake控制的一些过程。这一块介绍了bitbake如何下载源代码,打补丁,完成编译,分析软件包构建过程产生的输出,创建软件包并且测试,生成映像和生成跨平台开发工具。
软件包目录(上图右边的绿色部分): 这是一些包含了软件包(由Bitbake生成,通常是RPM, DEB或者IPK格式)的路径,这些软件包接下来会被用来构建linux映像或者软件开发套件。注意上图中linux镜像和开发套件的生成还是在淡蓝色逻辑块中,也就是说linux映像和开发套件的生成还是由构建系统来完成的。如果运行时包管理机制被打开的话, 这些软件包也可以通过web服务器或者其他方法被拷贝和分享,用来拓展和更新现有的正在运行中的linux映像。
镜像文件:工作流程产生的镜像,注意上图右下角的Images使用了复数,一次构建可以产生多个映像。
应用开发套件:与镜像一起生成或者单独生成的跨平台应用开发工具组。

连起来解释的话,上图左边深灰色是一些一些用户配置文件(比如说local.conf),针对不同软件的配方文件和层,目标开发板的配置文件,打包策略配置文件。 Bitbake(淡蓝色部分)会去读取这些配方和配置文件,然后

去配方和配置文件指定的地方(上图深黄色部分)下载源代码(source fetching)。
下载好之后进行配置,开始打补丁(patch application),
使用一些自动工具(比如说使用autoconf生成configure脚本,config.h等文件)
分析各个包之间的依赖关系(analysis for package relationship)
根据打包策略生成deb, rpm或者ipk包
对软件包进行测试(QA tests)
使用这些软件包生成linux映像和软件开发套件(SDK)

参考文档:

https://zhuanlan.zhihu.com/p/68308344
https://zhuanlan.zhihu.com/p/82217693
https://embedded.blog.****.net/article/details/89049111?utm_medium=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.channel_param&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.channel_param