1. 背景

在嵌入式产品开发中,通常都会定制自己公司的Linux发行版,所谓发行版,即根据自家产品的功能和特性定制bootloader、kernel、rootfs,最后得到这三个的镜像文件。

定制Linux发行版是一件耗时耗力、技术含量比较高的一项大工程,对于很多公司来说,是没有这个人力和财力来做这件事的,所以大多数公司会选择现有的开源工具来定制自己家的 Linux 发行版。

据我所知,当前比较主流的开源工具有两款,分别是 Buildroot 和 Yocto,它们都是开源的工程,思想也大体相同,就是将很多的开发包集成到开源工具中,然后根据自家产品的功能和特性进行配置,配置完成后进行编译时就会只编译并集成被配置的开发包,没被配置的开发包不会下载或者不会被集成到最终的镜像文件中。

在汽车电子行业,Yocto 是主流,至于为啥我也不知道,Buildroot 和 Yocto 我都有研究过一点点,但是在工作中目前只接触过 Yocto,所谓“没有实践就没有发言权”,所以本章就只介绍一下Yocto。

2. 官方资源

官网:https://www.yoctoproject.org/

yocto项目快速开始手册:https://www.yoctoproject.org/docs/2.1/yocto-project-qs/yocto-project-qs.html

yocto项目开发参考手册:https://www.yoctoproject.org/docs/1.5/ref-manual/ref-manual.html

3. 组成

Recipes:.bb/.bbappend文件,即配方文件,描述了从哪获取软件源码,如何配置,如何编译。bbappend和bb的区别主要在于bbappend是基于bb的,功能是对相应的bb文件作补充和覆盖,有点类似于“重写”的概念。

Class:.bbclass文件,即类文件,包含在配方文件之间共享的有用信息。比如autotools该类,其中包含Autotools使用的任何应用程序的常用设置。Yocto项目参考手册中的“ 类 ”一章提供了有关类及其使用方法的详细信息。https://www.yoctoproject.org/docs/2.5/ref-manual/ref-manual.html#ref-classes

Configuration:.conf文件,即配置文件,我们可以用它来改变构建方式,比如conf/local.conf可以配置机器配置选项,分发配置选项,编译器调整选项,常规通用配置选项和用户配置选项 。

conf/bblayers.conf中可以添加用到的layer层路径,从而在编译时将他们添加进去。层是组织文件和目录结构的元数据(配置文件、配方)集合。

4. 配置

Yocto的目的很简单,它要经过一级一级配置,逐步缩小配方,直至得到uboot、kernel、rootfs这三个image。每一级需要哪些配方,由该级对应的配置文件(conf/bb)决定。越上级的配置是越笼统的,越下级的配置越细致。如果下级的配置项相对于上级有补充或者冲突,则以下级的内容为准,可以认为下级会对上级进行“重写”。

有关构建的路线和流程:对于整个发行版构建,虽然每一级的配方由(conf/bb)决定,但是每一级路线和方向的选择,是由我们最终bitbake的对象决定的,BitBake需要一些基本配置文件才能完成构建。这些文件是*.conf文件。最低限度必需的文件作为示例文件驻留 在build/conf。比如我们最终bitbake avi-image-core,我们想要获得rootfs.img,那么:

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

在conf/local.conf文件提供了许多定义构建环境的基本变量:

Target Machine Selection(目标机器选择):      由 MACHINE 控制
Download Directory(下载目录):                 由 DL_DIR 控制
Shared State Directory(共享状态目录):       由 SSTATE_DIR 控制
Build Output(构建输出):                   由 TMPDIR 控制
Distribution Policy(分配策略):                由 DISTRO 控制
Packaging Format(打包格式):               由 PACKAGE_CLASSES 控制
SDK Target Architecture(SDK目标架构):         由 SDKMACHINE 控制
Extra Image Packages(额外的image包):      由 EXTRA_IMAGE_FEATURES 控制

5. 构建工具

Bitbake:BitBake是OpenEmbedded构建系统的核心工具,负责解析元数据,从中生成任务列表,然后执行这些任务。【BitBake是一种类似make的构建工具】

5.1 要查看BitBake支持的选项列表,请使用以下命令之一
bitbake -h
bitbake --help

5.2 显示所有可以bitbake的包
bitbake -s

5.3 仅对某组配方文件执行任务(比如需要构建的配方的名称为matchbox-desktop_1.2.3.bb)
bitbake matchbox-desktop

5.4 完成某项特定任务清除该任务
bitbake matchbox-desktop -c clean

5.5 使用“-k”忽略错误,继续执行其它任务:最常用场景,在您构建系统时,使用 -k 选项,可忽略某个出错任务,继续执行其它构建任务
bitbake -k core-image-staoBitBake

5.6 一次性编译所有内容,内核、文件系统等
bitbake core-image-minimal

5.7 生成内核镜像和设备树文件
bitbake linux-xlnx -C compile

5.8 单独编译u-boot,u-boot-imx(指定编译生成的u-boot镜像到deploy)
bitbake -c compile -f u-boot-imx;bitbake -c deploy -f

5.9 单独编译交叉开发工具链(可扩展SDK)
bitbake -c populate_sdk_ext imagename

5.10 单独编译交叉开发工具链(标准SDK)
bitbake -c populate_sdk imagename

5.11 执行某个任务的编译
bitbake optee_example -c compile

5.12 在构建系统时,先下载不构建
bitbake -c fetchall core-image-stao

Yocto(一)-介绍相关推荐

  1. YOCTO项目介绍:通过提供模版、工具和方法帮助开发者创建基于linux内核的定制系统

    目录 YOCTO项目介绍 配置内核 build配套 Yocto ,是一个开源社区.它通过提供模版.工具和方法帮助开发者创建基于linux内核的定制系统,支持ARM, PPC, MIPS, x86 (3 ...

  2. (一)Yocto的介绍

    一.概念及介绍 Yocto项目是一个开源协作项目,可帮助开发人员创建基于Linux的定制系统,这些系统专为嵌入式产品而设计,无论产品的硬件架构如何.Yocto Project提供灵活的工具集和开发环境 ...

  3. 《嵌入式Linux系统开发:基于 Yocto Project》笔记

    写在前面 这本书的"译者序"里面有这么一句话: 市面上不缺乏适用于各种开发语言的开发.编译和打包工具,但在Yocto项目出现前,这些零散的工作需要嵌入式开发者自己串起来以交付最终的 ...

  4. IMX6Q yocto工程

    1简介 1.1 yocto工程介绍 摘抄自维基百科:https://zh.wikipedia.org/wiki/Yocto%E8%A8%88%E5%8A%83 Yocto计划(英语:Yocto Pro ...

  5. Yocto基本概念及介绍

    Yocto详解 参考:http://www.yoctoproject.org/docs/2.1/mega-manual/mega-manual.html#creating-a-general-laye ...

  6. 利用Yocto构建嵌入式Linux教程02--Yocto的一些基本概念介绍

    本教程选用的Yocto版本为3.0.4,使用的Linux发行版为Ubuntu 18.04 (LTS),图中所有示例为实际测试截图,有问题请给我留言.微信公众号:嵌入式Linux那些事儿 在Yocto项 ...

  7. yocto recipe构建流程介绍

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

  8. yocto Extensible SDK介绍

    yocto Extensible SDK介绍 使用yocto Extensible SDK 1.1 为什么使用yocto Extensible SDK及其包含了什么 1.2 安装 Extensible ...

  9. Yocto系列讲解[理论篇] 3 - meta layer recipe class概念介绍

    By: fulinux E-mail: fulinux@sina.com Blog: https://blog.csdn.net/fulinus 喜欢的盆友欢迎点赞和订阅! 你的喜欢就是我写作的动力! ...

  10. yocto(一)——yocto介绍

    本文参考yocto官方手册,如有理解不当之处,欢迎留言指出. 项目概述和概念手册:https://docs.yoctoproject.org/overview-manual/index.html 项目 ...

最新文章

  1. va_start() va_end()函数应用
  2. 拿什么兜住网络信息安全网底
  3. 业务系统设计之一:系统菜单设计
  4. jvmti_从javaagent迁移到JVMTI:我们的经验
  5. 如何恢复matlab关联,恢复matlab文件关联
  6. 蓝桥杯大学组python试题_第十届蓝桥杯2019年C/C++ 大学A组省赛试题
  7. bindService执行成功后,低概率出现onServiceConnected没有被调用
  8. SAP UI5 应用开发教程之二十七 - SAP UI5 应用的单元测试工具 QUnit 介绍
  9. java按钮陷下去_付费?广告?捐款?如何让开源软件活下去?
  10. 信息学奥赛一本通(1171:大整数的因子)
  11. 关于GDAL180中文路径不能打开的问题分析与解决
  12. Spark Streaming的介绍和IDEA操作
  13. 结构化编程 —— 顺序、分支(选择)、循环
  14. Linux命令之shutdown
  15. ubuntu16.04下编译安装Autoware
  16. 2018汪文君Google Guava实战
  17. 4G的小程序与5G的Chromium OS?
  18. ZUI————对话框闪退问题
  19. Mysql报错1055
  20. 戴尔寄希望于区块链在印度服务器市场保持竞争力

热门文章

  1. xp系统怎么查看计算机共享文件夹,xp系统提升查看局域网共享文件速度方法分享...
  2. 计算机Word2010在线做题,Word2010试题练习题库(答案).doc
  3. Python四舍五入保留两位小数
  4. 自动html5视频播放插件,视频自动转HTML5播放器插件
  5. 运维团队(OPS)与技术团队有效沟通配合探讨
  6. matlab三角二倍角公式,数学三角函数常用的二倍角公式
  7. ASP.NET文档管理系统(功能强大且实用)
  8. 校赛题解(部分)+反思
  9. 在配置DNS后服务器启动失败问题的排查
  10. 都说web前端开发薪资高,入行就有上万月薪,转行难吗?