yocto project的概念

YOCTO Project的组件

bitbake是openEmbedded构建系统的核心工具,负责解析元数据(metadata).从中生成任务列表,然后执行这些任务。请参考bitbake用户手册:

https://note.youdao.com/ynoteshare/mobile.html?id=ca1cd1e6bfc990190ea9551c9df31060

bitbake:处理数据文件解析和执行。数据本身有多种类型,如下所示:

  1. recipes:提供特定软件的详细信息。
  2. class data:抽象出常见的构建信息(如:如何构建Linux内核等)
  3. configuration data:针对特定的机器定义特定设置,策略决策等,配置数据充当粘合剂将所有的内容绑定在一起。

bitbake知道如何将多个数据源组合在一起,并将每个数据源作为一个layer引用。

1、bitbake工具

bitbake是openEmbedded构建系统的核心工具,负责解析元数据,从中生成任务列表,然后执行这些任务。若要查看bitbake支持的选项列表,请使用以下任一命令:

cd poky
source oe-init-build-env
bitbake --help

这里比较重要的几个参数“-f”,“-c”,“-D”
比如打印调试信息:

bitbake learnyocto –D

如果异常信息较多,最好是配合grep一起使用
下面介绍一些bitbake的一些命令

bitbake clean 项目

build$ bitbake learnyocto:do_cleanall
build$ ls –l /tmp/work/core2-64-poky-linux/learnyocto/1.0+git\$\{SRCPV}-r0**

只剩下temp目录。
或者也可以这样清理

bitbake learnyocto –c cleanall

bitbake编译

bitbake最常见的用法是:bitbake packagename。packagename是要构建的包的名称(即目标)。
在这里要需要说明两点:
1、目标通常相当于配方文件名的第一部分,下划线前面的部分,因此不要轻易出现多个下划线(如:”foo”表示名为foo_1.3.0-r0.bb的配方),
2、不能使用驼峰命名规则,这个也会在开发过程中出现部分问题
因此,例如要处理matchbox-desktop_1.2.3.bb的配方文件时,可以如下调用:

bitbake matchbox-desktop 

可能存在几种不同版本的matchbox-desktop。bitbake版本由用户配置选择。
有关bitbake如何在不同的目标版本和提供程序之间进行选择,参考bitbake用户使用手册

bitbake还尝试首先执行依赖的相关任务,例如,在构建matchbox-desktop之前,如果系统没有构建的交叉编译环境,bitbake将构建一个交叉编译器和glibc。

一个有用的bitbake选项是-k或-continue选项。此选项指示bitbake在遇到错误后尽可能长时间尝试继续处理任务。当发生错误时,无法重新生成失败的目标和依赖它的目标。但是,使用此选项时,仍可能处理其他依赖项。

2、recipes配方文件

以.bb为后缀的文件就是recipes文件。一般来说,配方包含有关单个软件的信息。此信息包括下载源代码的位置或来源,如果需要还包含哪些补丁文件需要被使用,要应用的特殊配置选项、如何编译源文件以及如何打包已经编译的输出文件。

“package”术语有时候也是用来指recipes。然而,由于单词”package”用于OpenEmbedded构建系统(即ipk或.deb文件)的打包输出中了,因此本文档在提及配方时避免使用术语“”“package”。

3、classes类文件

类文件(.bbclass)包含有用于配方文件之间共享的信息,一个例子是autotools类,它包含自动工具使用的任何应用程序的公共设置。yocto项目参考手册中class一章提供了有关Classes和如何使用这些classes的详细信息

4、configuretions文件

配置文件(.conf)定义了控制OpenEmbedded生成过程的各种配置变量。这些配置文件分布在多个地方,在配置文件中定义机器配置选项、分发配置选项、编译器调优选项、常规公共配置选项和用户配置选项(build/conf/local.conf)

5、layers元数据

layers是包含相关元数据的存储库,这些元数据告诉OpenEmbedded构建系统如何构建目标。Yocto项目的layer model促使yocto项目开发环境中的协作,共享,定制和复用。Layerer在逻辑上分离项目的信息。例如,可以使用一个layer来保存特定硬件的所有配置信息。通过隔离特定硬件的配置,可以使用不同的layer类共享其他元数据,而这些layers的元数据可能在多个硬件上是通用的,可以复用。

OpenEmbedded嵌入式构建系统概念

OpenEmbedded构建系统是特定于Yocto项目的构建系统。构建系统的核心是任务执行器bitbake.
下图表示生成的high-level工作流程。本节的其余部分将详细的介绍组成工作流程的基本输入、输出、流程和元数据逻辑块通常、构建的工作流程由几个功能区域组成:
在这里插入图片描述

  • 1、user configuration:可用于控制生成过程的元数据(matedata)
  • 2、metadataLayer:提供软件、机器和发行版元数据的各种layers。
  • 3、sourceFile:上游发行版本、本地项目和SCMs
  • 4、Build system: 在bitbake控制下的过程。这个模块扩展了bitbake如何获取源代码、应用补丁、完成编译、分析生成包的输出、创建和测试包、生成映像及生成交叉编译工具
  • 5、package Feeds:包含输出包(rpm/deb/ipk)的目录。这些输出包随后用于构建由构建系统生成image或软件开发工具包。如果启用了运行时包管理,还可以使用web服务器或其他方式复制和共享这些提要,以便在运行时扩展或者更新设备上的现有映像。
  • 6、images:由工作流程生成的images
  • 7、Application Development SDK:与images一起生成或与bitbake单独生成的交叉开发工具

1、用户配置

用户配置有助于定义构建。通过用户配置,可以告诉bitbake要为其构建image的目标体系结构、将下载的源代码存储在何处(build/downloads)以及其他构建属性。

下图显示了常规工作流程图的“用户配置”框图:在这里插入图片描述
bitbake需要一些基本配置文件才能完成构建。这些文件是*.conf文件。至少需要poky/build/conf目录下的local.conf文件。

当git clone poky项目、或者下载并解压yocto项目版本时,可以将源目录(poky)改成任意名称。为了方便我们说的源码目录就是默认的poky目录。

poky目录下的meta-poky layer包含一个conf目录,其中包含模板配置文件。在执行source时,这些模板文件用作创建实际配置文件的基础。如下:

byd@ubuntu:/media/C/Learn/poky/meta-poky/conf$ ls
bblayers.conf.sample layer.conf site.conf.sample conf-notes.txt  local.conf.sample  distro  local.conf.sample.extended

如果poky/build/目录不存在时,source构建环境脚本会创建build目录,bitbake在构建期间使用build目录进行所有的工作。build目录有一个conf目录,其中包含本地conf及其bblayers.conf配置文件。如果这些文件不存在,会在source oe-init-build-env的时候创建。
这个local.conf文件提供了许多定义build环境的基本变量。
local.conf中主要完成的事情:

  • 1、目标板machine选择:由MACHIN变量控制;
  • 2、源码下载目录:由DL_DIR变量控制
  • 3、共享状态目标:由SSTATE_DIR变量控制
  • 4、编译输出目录:由TMPDIR变量控制
  • 5、Distribution策略:由DISTRO变量控制
  • 6、包装格式:由PACKAGE_CLASSES变量控制
  • 7、SDK的目标体系结构:由SDKMACHINE变量控制
  • 8、额外image包:由EXTRA_IMAGE_FEATURES变量控制

重要的内容:
在conf/local.conf文件中设置的配置也可以在conf/site,conf和conf/auto.conf配置文件中设置
bblayers.conf文件中告诉bitbake要在build期间使用那些layers.默认情况下,此文件中列出的层包括 构建系统最少所需的layers。但是,必须手动添加自定义的Layers。
当使用bitbake target命令启动构建时,bitbake会对配置文件按顺序加载,指定的顺序以此是site.conf auto.conf local.conf。比如在site.conf和local.conf文件中定义同样的一个变量“variable1”,但是值不同时,以最后的local.conf文件中的“variable1”值为准

2、metadata Machine 配置和Policy配置

更加详细的了解build系统用于进一步控制build的layers.这些layers为软件、machine和policies(策略)提供元数据(matedata)。
一般来说,有三类的layers输入存在:

  • 1、metadata(.bb+Patches):
    包含用户提供的recipes文件、patches和append文件的软件layers。一个很好的软件Layer的例子是meta-qt5.meta-qt5适用于流行的跨平台应用开发框架的Qt5.0版本。适用于桌面,嵌入式和移动应用程序。
  • 2、**mechine BSP配置:
    板级支持包BSP层提供特定的machine的配置。这种类型的信息是特定目标体系结构的。一个很好的BSPlayers例子是meta-yocto-bsp
  • 3、Policy Configuration:
    Distribution Layers为特定分发而构建的images或者sdk提供了顶层或通用策略。例如meta-poky目录就是一个Distro Layer,在meta-poky/conf/distro目录中包含distro的配置文件(poky.conf配置文件)

下图是通用的工作流程图中的这三个层的展开图
在这里插入图片描述

一般来说,所有的layers都有相似的结构。如果要发布的话都包含一个许可文件(如COPYYING.MIT),最好包含一个README文件,conf目录和recipes目录。可以查看

3、Distro Layer配置

DistroLayer为自己的发行版本提供策略配置。最好的做法就是在自己layer中定义相关类型的配置,起到隔离的作用。比如bitbake工具可以在conf/local.conf配置中找到与meta-poky/conf/distro/distro.conf文件中同名的参数设置时会重载后面的配置,意思是build/conf/local.conf配置优先meta-poky/conf/distro/distro.conf文件中的配置。

build$ ls ../meta-poky/
classes conf  README.poky  recipes-core

下面是Distro Layer中一些代表目录的解释和参考:

  • classes:类文件(.bbclass)包含可在发行版中共享的公共功能。当自己的recipes继承某个类时,该类中的设置和函数就会生效;
  • conf:这个目录包含层conf/layer.conf、conf/distro/distro.conf和其他的一些文件。
  • recipes-:recipes和*.bbappend文件会影响整个发行版的通用功能,此目录可以包括recipes和.bbappend文件,以添加特定于发行版的配置、初始化脚本、自定义image
    recipes的步伐。recipes-目录中的层次结构和内容可能会有所不同。通常,这些目录包含recipes文件(.bb)、recipes附件文件(.bbappend)、配置文件的特定发行版目录等等

4、BSP Layer配置

BSP层提供针对特定硬件的machine配置,就是与硬件体系相关的layer,如包含BootLoader、kernel和驱动等。此层中的所有内容都为特定的machine生成images或SDK。为BSP层定义了一个通用的结构或是形式。
BSP层的配置目录包含machine的配置文件(conf/machine/${machine}.conf),当然也还有conf/layer.conf)。如下所示:

byd@ubuntu:/media/C/Learn/poky/meta-yocto-bsp$ tree
.
├── conf
│   ├── layer.conf
│   └── machine
│       ├── beaglebone-yocto.conf
│       ├── edgerouter.conf
│       ├── genericx86-64.conf
│       ├── genericx86.conf
│       └── include
│           └── genericx86-common.inc
├── lib
│   └── oeqa
│       ├── controllers
│       │   ├── beaglebonetarget.py
│       │   ├── edgeroutertarget.py
│       │   ├── grubtarget.py
│       │   └── __init__.py
│       └── selftest
│           └── cases
│               └── systemd_boot.py
├── README.hardware
├── recipes-bsp
│   ├── formfactor
│   │   ├── formfactor
│   │   │   ├── beaglebone-yocto
│   │   │   │   └── machconfig
│   │   │   ├── genericx86
│   │   │   │   └── machconfig
│   │   │   └── genericx86-64
│   │   │       └── machconfig
│   │   └── formfactor_0.0.bbappend
│   └── gma500-gfx-check
│       ├── gma500-gfx-check
│       │   ├── gma500-gfx-check.conf
│       │   └── gma500-gfx-check.sh
│       └── gma500-gfx-check_1.0.bb
├── recipes-graphics
│   └── xorg-xserver
│       ├── xserver-xf86-config
│       │   ├── beaglebone-yocto
│       │   │   └── xorg.conf
│       │   ├── genericx86
│       │   │   └── xorg.conf
│       │   └── genericx86-64
│       │       └── xorg.conf
│       └── xserver-xf86-config_0.1.bbappend
├── recipes-kernel
│   └── linux
│       ├── linux-yocto_5.4.bbappend
│       ├── linux-yocto_5.8.bbappend
│       └── linux-yocto-dev.bbappend
└── wic
    ├── beaglebone-yocto.wks
    ├── edgerouter.wks
    └── genericx86.wks.in

该Layer其他目录按功能划分,用于特定的recipes:recipes-bsp\recipes-core\recipes-kernel等等

5、Software Layer

软件的layer为构建期间使用的其他软件包提供元数据。磁层不包括特定发行版或machine的元数据,即平台无关性的软件,比如bustbox/Qt等第三方包
此层包含项目所需要的recipes,append文件和patches文件。
概念的东西基本就是上述的这些。下篇将开始介绍yocto工程中的目录内容,了解目录所包含的内容,能有效快速的掌握yocto
参考:
1、https://fulinux.blog.csdn.net/article/details/109860712
2、https://fulinux.blog.csdn.net/article/details/110004470

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值