Yocto详解

参考:http://www.yoctoproject.org/docs/2.1/mega-manual/mega-manual.html#creating-a-general-layer-using-the-yocto-layer-script 这篇文章第五章不错

1.名词解释

  • Yocto:Yocto是这个开源项目的名称,该项目旨在帮助我们自定义Linux系统
  • Poky:Poky有两个含义。第一个含义是用来构建Linux的构建系统,值得注意的该Poky仅仅是一个概念,而非一个实体:它包含了 BitBake工具、编译工具链、BSP、诸多程序包或层,可以认为Poky即是Yocto的本质;此外Poky还有另外一层意思,使用Poky系统得到的默认参考 Linux 发行版也叫Poky(当然,我们可以对此发行版随意命名)。Poky的两个含义千万不能混淆
  • Metadata:元数据集,所谓元数据集就是发行版内各基本元素的描述与来源 
    • Recipes:.bb/.bbappend文件,配方文件,描述了从哪获取软件源码,如何配置,如何编译。bbappend和bb的区别主要在于bbappend是基于bb的,功能是对相应的bb文件作补充和覆盖,有点类似于“重写”的概念
    • Class:.bbclass文件
    • Configuration:.conf文件,即配置文件,我们可以用它来改变构建方式
  • Layers:即各种meta-xxx目录,将Metadata按层进行分类,有助于项目的维护
  • Bitbake:一个任务执行引擎,用来解析并执行Metadata
  • Output:即各种输出image

  • 总结:假如用烹饪一桌酒席来形容构建发行版,则Yocto就是饭店名,Poky就是厨房(以及提供作为参考的菜的搭配套餐),Metadata就是烹饪资源(.bb/.bbappend表示配方/配方上的贴士,.conf表示厨房里的管事的小组长),Layers就是菜谱的分类(如川菜谱、粤菜谱),Bitbake就是厨师,Output就是得到的一桌酒席

2.Yocto的架构

假设现在有一个已经构建好的Yocto环境。有关Yocto的具体操作和环境构建详见Yocto的使用实例

  • 假设我们的项目名称叫imx6_avi,那么进入我们的项目目录,查看,其结构为
注意:该目录省略了很多不必要的细节,只把重要的文件显示了出来
imx6_avi_super|__Makefile|__build|   |__cache|   |__conf|       |__bblayers.conf|       |__local.conf   ||__sources|__base|__cache|   |__conf|       |__bblayers.conf(和build目录中的一样)|       |__local.conf(和build目录中的一样)|||__meta-avi(放硬件无关的内容,主要和文件系统相关的东西)|   |__classes|   |__conf|   |   |__distro|   |   |   |__imx6.conf|   |   |__layer.conf|   ||   |__recipes-core|   |   |__busybox|   |   |__images|   |   |   |__avi-common-package.inc|   |   |   |__avi-image-core.inc|   |   |   |__avi-image-core.bb|   |   |   |__avi-image.inc|   |   |__ifupdown|   |   |__openssh-keys|   ||   |__recipes-qt|   |__recipes-graphics|   |__recipes-devtools|       ||__meta-imx6-avi|   |__conf|   |   |__machine|   |       |__layer.conf|   |       |__include|   |           |__imx6-avi-super.conf|   |           |__imx6-avi_mini.conf|   |           |   |__recipes-bsp|   |   |__u-boot|   |       |__u-boot-imx6-avi.bb|   ||   |__recipes-core|   |   |__images|   |       |__avi-image-core.bbappend|   ||   |__recipes-kernel          |       |__linux                                                                      |           |__linux-imx6-avi/   |           |    |__defconfig          |           |__linux-imx6-avi.bb |||__meta-Exynos-avi|__meta-qt5-avi|__meta-fsl-arm|__meta-openembedded|__meta-qt5|__poky|__meta-skeketon|__meta-yocto|__meta|__classes|__conf|__recipes-bsp||__recipes-connectivity|   |__dhcp|   |__nfs-utils||__recipes-devtools|__recipes-core
  • 首先来分析一下目录结构,不难发现主要有三级构成:meta-xxx->recipes-yyy->zzz/ttt.bb。比如:meta-avi-> recipes-core->openssh-keys
  • meta-xxx就是layer(菜谱的分类如川菜谱、粤菜谱),recipes-yyy就是Metadata(具体某一本菜谱),zzz就是菜谱上具体的一个配方
  • 从目录中不难看出,主要有这么几个layer

    • meta-avi:由我们创建并维护。和avi有关的项目需要的配方。可以认为这个目录中的配方都是通用的、与平台无关的内容
    • meta-imx6-avi:由我们创建并维护。imx6平台avi项目需要的配方
    • meta-Exynos-avi:由我们创建并维护。Exynos平台avi项目需要的配方
    • meta-qt5-avi:由我们创建并维护。avi项目中qt5需要的配方
    • meta-fsl-arm:飞思卡尔官方推出的配方大全
    • meta-openembedded:openembedded推出的配方大全
    • meta-qt5:qt5官方推出的qt5配方大全
    • poky中的一堆meta:yocto官方推出的参考配方。虽然这些meta被放在了poky里面,但是还是不影响使用的,他们具有和上面那些meta相同的地位,如下图

    不难看出,这里面很多的layer只是我们照搬过来的,目的是为了借用里面现成的配方(可以认为这些layer充当了“库”),而真正由我们维护的仅仅是几个名字中带有avi的layer,而且它们是依赖于那些充当“库”的layer的。如下图 

  • 介绍完了layer,那么问题来了,那么是否可以认为,这些layer全部被enable了呢?答案固然是否定的,我们的项目是imx6_avi_super,显然不可能去包含meta-Exynos-avi这个三星平台专用的layer
  • 具体的layer选择由imx6_avi_super/sources/conf/bblayers.conf负责,直观位置在前面目录中可以体现。仔细观察该文件,重点在BBLAYERS这个变量,里面有一些layer,这些layer就被enable了。不难发现这里面并没有meta-Exynos-avi,这也恰好印证了我们建立开发环境(repo sync)时,从git仓库中拉的是imx6_avi_super这个项目对应的Poky。
LCONF_VERSION = "6"BBPATH = "${TOPDIR}"
BSPDIR := "/home/username/yocto/imx6_avi_super"
BBFILES ?= ""
BBLAYERS = " \
${BSPDIR}/sources/poky/meta \
${BSPDIR}/sources/poky/meta-yocto \
\
${BSPDIR}/sources/meta-openembedded/meta-oe \
${BSPDIR}/sources/meta-openembedded/meta-multimedia \
${BSPDIR}/sources/meta-qt5 \
${BSPDIR}/sources/meta-qt5-avi \
\
${BSPDIR}/sources/meta-fsl-arm \
\
${BSPDIR}/sources/meta-avi \
${BSPDIR}/sources/meta-imx6-avi \

  • 这些layer目前是被enable了,那么是否可以认为,这些layer中的配方也全部被使能了呢?答案固然是否定的,我们的发行版中不可能把所有的软件包放进去。在Yocto中,这个选择配置操作是由好多个conf、bb文件协同完成的,并不存在一个总的大纲,这也是和buildroot最大的不同之处(buildroot是由menuconfig来进行大纲式的配置)。可以理解为Yocto是“分封制”,皇帝说的不一定能落实,具体还是各种大小地方官说了算;而buildroot是“中央集权制”,皇帝一人说了算 
  • 如何理解Yocto的配置方法?这要从发行版的定制流程说起。我们的目的很简单,是要得到uboot、kernel、rootfs这三个image;Yocto的目的也很简单,它要经过一级一级配置,逐步缩小配方,直至得到uboot、kernel、rootfs这三个image。每一级需要哪些配方,由该级对应的配置文件(conf/bb)决定。越上级的配置是越笼统的,越下级的配置越细致。如果下级的配置项相对于上级有补充或者冲突,则以下级的内容为准,可以认为下级会对上级进行“重写”。这其实有点类似交通法规 

  • 有关构建的路线和流程:对于整个发行版构建,虽然每一级的配方由(conf/bb)决定,但是每一级路线和方向的选择,是由我们最终bitbake的对象决定的,比如我们最终bitbake avi-image-core,我们想要获得rootfs.img,那么:

    • 第一步Poky就会从local.conf开始,一路向下,一级一级配置,直到配置到和rootfs有关的那一堆bb,最终形成完整完全的配方
    • 然后获取配方需要的资源,比如各种软件包,比如kernel的源码
    • 最后把所有的资源编译出我们需要的镜像

  • 最后说一下bitbake,比如我们要选择编译rootfs.img,那么使用bitbake avi-image-core即可,但是很多时候并不直接采用这种做法。大多数情况下我们会在项目目录下写一个Makefile,里面包含各种各样的功能,内部以bitbake指令实现

3.配置文件详解

上一节简单介绍了Yocto是如何配置我们的项目,这一节开始分析具体的配置文件

  • local.conf:

Yocto基本概念及介绍相关推荐

  1. 4.Yocto项目概念

    目录 4.1约克托项目组件 4.1.1比特贝克 4.1.2食谱recips 4.1.3类class 4.1.4配置conf 4.2层layer 4.3开放式构建系统概念 4.3.1用户配置 4.3.2 ...

  2. RabbitMQ学习总结(1)——基础概念详细介绍

    一.基础概念详细介绍 1.引言 你是否遇到过两个(多个)系统间需要通过定时任务来同步某些数据?你是否在为异构系统的不同进程间相互调用.通讯的问题而苦恼.挣扎?如果是,那么恭喜你,消息服务让你可以很轻松 ...

  3. RabbitMQ学习总结(一)——基础概念详细介绍

    2019独角兽企业重金招聘Python工程师标准>>> 一.基础概念详细介绍 1.引言 你是否遇到过两个(多个)系统间需要通过定时任务来同步某些数据?你是否在为异构系统的不同进程间相 ...

  4. 虚拟化+docker概念基本介绍

    虚拟化+docker概念基本介绍 前言 一.虚拟化 (1)虚拟化概述 (2)cpu的时间分片(cpu虚拟化) (3)cpu虚拟化性能瓶颈 (4)虚拟化工作原理 ①虚拟化类型 ②虚拟化功能 二.Dock ...

  5. yocto recipe构建流程介绍

    yocto recipe构建流程介绍 1.recipe构建过程简介 2.查找日志和工作文件 3.设置配置参数 4.recipes间共享文件 5.打包 1.recipe构建过程简介 在使用devtool ...

  6. 云计算的概念及介绍(通俗解释)

    云计算的概念及介绍 一.什么是云计算 2006年,亚马逊把基于分布式操作系统聚集起来的强大计算能力,通过互联网的方式输送给千千万万的普通用户,人们给这种计算的在线服务,起的名字叫做云计算. 通俗解释就 ...

  7. 【云计算】Pod概念及介绍

    CSDN话题挑战赛第2期 参赛话题:万家争鸣的云计算修罗场 我想分享的云计算技能/知识点 Pod概念及介绍 该技能/知识点的背景介绍 在docker中,最小的调度单位是Container(容器),容器 ...

  8. 【仿真-simulation】仿真概念的介绍

    系列文章目录 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 TODO:写完再整理 文章目录 系列文章目录 前言 一.做机器人没有仿真的后果 二.机器人仿真介绍 1.机器人仿真优点 ...

  9. linux 插件 概念,服务端概念功能介绍

    服务端概念 服务端是为客户端服务的,服务的内容诸如向客户端提供资源,保存客户端数据.是实现游戏特色化的重要途径,也是最直接可以通过游戏表现出来的技术,比如你要修改某个NPC的参数,重加载后,在游戏内立 ...

最新文章

  1. 1数字图像获取:1.1图像数字化
  2. leetcode算法题--合并区间
  3. 9开头的两位数相乘速算法
  4. 用状态机STATE MACHINE实现有选择的文件转换
  5. Windows7右键菜单栏添加打开cmd项
  6. html360度视角观赏,360度全景图是如何生成的?
  7. java中线程调度遵循的原则_深入理解Java多线程核心知识:跳槽面试必备
  8. Linux平台Segmentation fault(段错误)调试方法
  9. Windows下基于IIS服务的SSL服务器的配置
  10. 《PMP学习笔记》11.7 子过程:实施风险应对
  11. 水平居中和transform: translateY(-50%) 实现元素垂直居中
  12. 18:(基于对抗的学习)Learning a Self-Expressive Network for Subspace Clustering
  13. ADIDAS的完整形式是什么?
  14. 抛弃Telemetry,用Faythe连接OpenStack和Prometheus
  15. [矩阵求逆+二分图匹配]BZOJ 3168 [Heoi2013]钙铁锌硒维生素
  16. html验证码图片,js+h5 canvas实现图片验证码
  17. 微信+WeTest:小程序云端测试系统上线
  18. 视频系统 存储服务器 黄灯闪烁,服务器网口黄灯闪烁
  19. 【BSP视频教程】STM32H7视频教程第2期:STM32H7四通八达的总线矩阵,从系统框架整体把控H7
  20. java-接口之运动员教练员综合案例

热门文章

  1. VS调用matlab
  2. JDK1.8 十大新特性详解
  3. Java 设计模式 -- 建造者模式
  4. Hadoop MapReduce的模式、算法和用例
  5. 2048游戏-AI程序算法分析
  6. 跟我一起写 Makefile(十一)
  7. 视觉直观感受7种常用排序算法
  8. 【OpenCV3】图像旋转与平移——cv::warpAffine()详解
  9. 【OpenCV3】OpenCV3.0 在WIN8+VS2012环境下的配置
  10. Mybatis的第三章动态sql总结