当前位置: 首页 > java >正文

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生成

开源嵌入式系统编译架构

主要由三个基本组成部分,构建系统,构建环境,元数据层,如下图所示:
在这里插入图片描述

编译系统架构

如下所示:

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.conflocal.conf说明配置的环境变量。BBLAYERS变量用于指定构建过程中包含的所有层(Layers)。层是包含配方(recipes)、配置文件和其他构建所需文件的目录结构

元数据层

元数据层是用于组织和管理构建所需元数据的目录结构。它们包含了配方、任务、类、配置文件等,用来定义如何构建软件、如何处理依赖关系以及如何设置构建配置。
层架构如下:
请添加图片描述
元数据层的目录名通常由meta开头,后跟一个连字符和该层的名称。
支持自定义做配方,在里面通过修改.bb配置文件做定制。

http://www.xdnf.cn/news/3696.html

相关文章:

  • 【C语言练习】018. 定义和初始化结构体
  • 【c++】模板详解
  • [android]MT6835 Android 移植brctl指令
  • PowerShell从5.1升级到7.X
  • 深挖Java之:运算符与输入器
  • #Paper Reading# DeepSeek-R1
  • DeepSeek与MySQL:开启数据智能新时代
  • Java SE(7)——类和对象(二)
  • 【Java Stream流-59】Java Stream流式编程:高效、优雅的数据处理之道
  • [案例二] 菜单条制作(Menuscript)与工具条制作(Toolbar)
  • Python基础语法
  • 【Arthas】火焰图优化应用CPU(问题原因:获取调用栈)
  • C语言字符函数和字符串函数详解:从基础到实战
  • C语言奇幻指南:宏、头文件与变量的秘密世界
  • 二、机器学习中Python变量基础
  • 防范反序列化攻击:如何安全处理敏感数据序列化
  • 【C/C++】MQTT
  • Git从入门到精通-第三章-获取Git仓库
  • 【Agent搭建】利用coze平台搭建一个AI销售?
  • Spring MVC @RequestBody 注解怎么用?接收什么格式的数据?
  • 重载和覆写有什么区别?
  • 18、状态库:中央魔法仓库——React 19 Zustand集成
  • STM32基础教程——软件I2C
  • 力扣-字符串-165 比较版本号
  • 【算法基础】递归算法 - JAVA
  • C++ STL vector容器详解:从原理到实践
  • Python绘制地球的重力地图
  • <servlet-class>和</url-pattern>的作用
  • Oracle VirtualBox 在 Windows 上的详细安装步骤
  • AnimateCC教学:照片旋转飞舞并爆炸....