LXR | KVM | PM | Time | Interrupt | Systems Performance | Bootup Optimization

Yocto 2:Yocto基本概念、编译流程、目录

关键词:Recipe、Layer、Metadata、Poky、bitbake等等。

1 关键概念

深入了解Yocto之前,先了解一些基本概念。在Software – Yocto Project有说明。

这里摘录一段中文翻译:

  • 配置文件: 包含全局定义变量,用户定义变量和硬件配置信息。配置文件告诉构建系统需要构建什么,什么需要放入镜像,以支持一个特定平台。
  • 配方Recipe: 元数据最常见的形式。Recipe可以包含一列用来构建二进制镜像文件的设定和任务(指令)。Recipe描述了你从哪获取代码,需要应用哪个(代码)补丁。同时Recipe还描述了对于其他Recipe或库的依赖,以及配置和编译选项。Recipe存放在Layer中
  • 层Layer: 相关Recipe的集合。Layer允许你将元数据(metadata)集合在一起,自定义你的构建。有时候你的构建是可以支持多种不同架构的,那么这种数据,可以通过Layer方式将它们独立出来。
  • 元数据Metadata: Yocto Project在构建Linux发行版本时,构建系统会解析的文件(数据),Metadata是Yocto Project中很关键的一个元素。通常来说,元数据包含recipe,配置文件,其他参考构建指令的信息,以及控制构建什么/如何构建(what and how)的数据元数据也包括命令(command),软件版本信息,从何处获取,其他用来做补丁的文件或是特定场景下需要自定义软件的信息。OpenEmbedded Core是重要的一组被验证过的元数据。
  • OpenEmbedded-Core:OE-Core是基础recipe,类文件,和相关文件的元数据组合,在基于OpenEmbedded的系统中很常用,Yocto Project也使用它。OE-Core由OpenEmbedded社区将其开发的原始仓库取其核心,充分验证过的recipe的集合而形成的关键核心。
  • Poky: 一个参考嵌入式发行版本,同样也用来作为提供基本功能的发行,可以用来说明(学习)如何自定义发行版本,可以测试Yocto Project组件,还可以为用户下载Yocto Project。Poky不是产品级的,但它是一个很好的定制化工作起点。Poky是在OE-Core上层的一个Layer集成
  • 构建系统 - "Bitbake": 调度和执行引擎,用来解析指令(recipe)和配置数据。然后它创建依赖树,安排编译,调度编译,最后执行定制化Linux镜像/发行版本的构建。BitBake是类似Make的一个构建工具。BitBake recipe指定一个特定包是如何被构建的,包括所有包的依赖,源代码路径,配置,编译,构建,安装,和移除指令。Recipe也在标准变量中存储包的元数据。相关Recipe形成一个Layer。构建过程中,追踪依赖,执行编译或交叉编译。作为交叉构建的第一部,bitbake框架首先创建适用于目标平台的eSDK套装。
  • 包Packages: 构建系统的输出,用来创建最终的镜像。
  • Extensible Software Development Kit (ESDK): 一个自定义的SDK,应用开发者可以用来将他们的库和代码改动写入镜像,为其他应用开发者提供代码。
  • 镜像image: 加载到设备上的Linux发行版本(操作系统)的二进制形式。

参考《【Yocto学习系列(二)】Yocto术语》。

2 Pocky通用编译流程

 编译流程概述如下:

  1. 确定架构、patch以及BSP/Policy配置等。
  2. 编译系统从本地、SCM、外部仓库抓取源码。
  3. 下载后,进行解压、打补丁、配置、编译等工作。
  4. 然后根据二进制包格式将编译结果安装到临时目录。
  5. 在整个编译过程中进行QA和sanity check等。
  6. 对本地编译结果,以及外部预编译文件生成最终root镜像。
  7. 输出root镜像以及SDK等。

3 目录结构

├── bitbake--主要包含bitbake脚本,作为Metadata解析器,读取Yocto Metadata并运行其定义的task。
├── build--主要包含用户配置文件,并将编译输出到此目录。
├── contrib--
├── documentation--帮助文档,可以生成pdf或者html版本用户手册。
├── LICENSE--License声明。
├── LICENSE.GPL-2.0-only
├── LICENSE.MIT
├── MEMORIAM
├── meta--对应OpenEmbedded-Core的Metadata,包含Recipes、Classes,以及qemux86/qemuarm的机器配置。
├── meta-poky--在meta目录基础上,增加Poky参考发布版本的必须Metadata。
├── meta-selftest--OpenEmbedded验证编译系统的selftest的Recipes和Append文件。
├── meta-skeleton--BSP和Kernel开发的Recipes模板。
├── meta-yocto-bsp--Yocto项目的参考BSP Metadata。
├── oe-init-build-env--设置OpenEmbedded编译环境的脚本。
├── README.hardware -> meta-yocto-bsp/README.hardware
├── README.OE-Core
├── README.poky -> meta-poky/README.poky
├── README.qemu
└── scripts--Yocto项目附加功能所需要的脚本。

在执行bitbake编译后,在build目录下会生成一系列目录:

build/
├── bitbake-cookerdaemon.log
├── cache
│   ├── bb_codeparser.dat
│   ├── bb_persist_data.sqlite3
│   ├── bb_unihashes.dat
│   ├── hashserv.db
│   ├── hashserv.db-shm
│   ├── hashserv.db-wal
│   ├── local_file_checksum_cache.dat
│   └── sanity_info
├── conf
│   ├── bblayers.conf--配置了bitbake查找layers所需要遍历的目录,定义在BBLAYERS中。
│   ├── local.conf--用户编译环境配置文件。
│   └── templateconf.cfg
├── downloads--存放下载的源码。
├── sstate-cache--shares state cache。
└── tmp--编译系统存放所有的编译输出。 ├── abi_version ├── buildstats--build statistics。 ├── cache--缓存解析Metadata的结果,包括Recipes和配置文件。 ├── deploy--保存OpenEmbedded编译过程的结果。
├── images--生成的镜像文件。
├── licenses
└── rpm--rpm安装包。
├── hosttools--指向编译主机的程序。
├── log--编译日志文件。
├── pkgdata
├── saved_tmpdir
├── sstate-control
├── stamps--bitbake task运行时间戳。
├── sysroots
-components--do_prepare_recipe_sysroot任务拷贝相应Recipe的sysroot内容。
├── sysroots
-uninative--非本地编译的sysroot内容。
├── work--包含bitbake编译架构相关包子目录。
├──qemux86_64-poky-linux/core-image-minimal/1.0-r0/rootfs--各仓库编译安装到rootfs中,然后打包生成镜像。
└── work-shared

参考文档:

Yocto开发篇_fulinux的博客-CSDN博客

Yocto Project Reference Manual — The Yocto Project ® 3.1.23 documentation

《 利用Yocto构建嵌入式Linux教程02--基本概念介绍

利用Yocto构建嵌入式Linux教程03--Yocto构建系统的配置文件

posted on 2023-03-22 23:59  ArnoldLu  阅读(6039)  评论(0编辑  收藏  举报

导航