yocto 编译与bb的语法

Image : BootLoader、kernel、rootfs

Machine : 平台相关控制、cpu类型、内存大小、外围驱动

Distro : 软件的特性,版本选择,文件系统参数,客制化软件

Bitbake :编译工具

Recipe : 对应一个bb文件,详细的描述了一个源码的编译过程(获取,补丁,配置,编译,安装,打包,检查等)

Meta : 把具有某种关联醒的recipe集合到一起,形成一个 “类”

编译技巧:

为单个配方文件执行任务相对简单。您指定有问题的文件,BitBake 会解析它并执行指定的任务。如果您不指定任务,BitBake 会执行默认任务,即“构建”。BitBake 这样做时遵循任务间依赖关系。

foo_1.0.bb以下命令在配方文件上运行构建任务,这是默认任务:

bitbake -b foo_1.0.bb

以下命令对foo.bb配方文件运行 clean 任务:
bitbake -b foo.bb -c clean

了解执行环境中使用的配置文件和类文件的一个好方法是运行以下 BitBake 命令:

bitbake -e > mybb.log

如果一个名为的配方a_1.2.bb存在,BitBake 将默认选择 1.2。.conf 但是,如果您在BitBake 解析的文件中定义以下变量,则可以更改该首选项:

PREFERRED_VERSION_a = “1.1”

一种常见的约定是使用配方文件名来定义元数据。例如,在bitbake.conf配方名称和版本中用于设置变量PN和 PV:

PN = “@bb.parse.varsfromfile(d.getVar(′FILE′,False),d)[0]or′defaultpkgname′"PV="{@bb.parse.vars_from_file(d.getVar('FILE', False),d)[0] or 'defaultpkgname'}" PV = "@bb.parse.varsf​romf​ile(d.getVar(′FILE′,False),d)[0]or′defaultpkgname′"PV="{@bb.parse.vars_from_file(d.getVar(‘FILE’, False),d)[1] or ‘1.0’}”
在此示例中,名为“something_1.2.3.bb”的配方会将 PN设置为“something”,将PV设置为“1.2.3”。

bb文件的语法:

“=”运算符不会立即展开右侧的变量引用。相反,扩展被推迟到实际使用分配给的变量。结果取决于引用变量的当前值。以下示例应阐明此行为:

A = “Bbaz"B="{B} baz" B = "Bbaz"B="{C} bar”
C = “foo”
At this point, ${A} equals “foo bar baz”
C = “qux”
At this point, ${A} equals “qux bar baz”
B = “norf”
At this point, ${A} equals “norf baz”

如果对不存在的变量使用变量扩展语法,则字符串保持原样。例如,给定以下赋值,BAR只要 FOO不存在,就会扩展为文字字符串“${FOO}”。

BAR = “${FOO}”

您可以使用“?=”运算符来实现对变量的“更软”赋值。如果在解析语句时未定义变量,这种类型的赋值允许您定义变量,但如果变量有值,则不理会该值。这是一个例子:

A ?= “aval”
如果A在解析此语句时设置,则变量保留其值。但是,如果A未设置,则变量设置为“aval”。

笔记

这个任务是即时的。因此,如果存在对单个变量的多个“?=”赋值,则其中第一个最终会被使用。

3.1.8使用空格附加 (+=) 和前置 (=+)
附加和前置值很常见,可以使用“+=”和“=+”运算符来完成。这些运算符在当前值和前置或附加值之间插入一个空格。

这些运算符在解析过程中立即生效。这里有些例子:

B = “bval”
B += “additionaldata”
C = “cval”
C =+ “test”
变量B包含“bval additionaldata”和C“test cval”。

3.1.9没有空格的附加 (.=) 和前置 (=.)
如果要在没有插入空格的情况下附加或前置值,请使用“.=”和“=”。运营商。

这些运算符在解析过程中立即生效。这里有些例子:

B = “bval”
B .= “additionaldata”
C = “cval”
C =. “test”
变量B包含“bvaladditionaldata”和C“testcval”。

3.1.10附加和前置(覆盖样式语法)
您还可以使用覆盖样式语法附加和前置变量的值。使用此语法时,不会插入空格。

这些运算符与“:=”、“.=”、“=.”、“+=”和“=+”运算符的不同之处在于它们的效果是在可变扩展时间应用而不是立即应用。这里有些例子:

B = “bval”
B:append = " additional data"
C = “cval”
C:prepend = "additional data "
D = “dval”
D:append = “additional data”
变量B 变为“bval 附加数据”并C变为“附加数据 cval”。变量D变为“dvaladditional data”。

笔记

使用覆盖语法时必须控制所有间距。

3.1.11移除(覆盖样式语法)
您可以使用删除覆盖样式语法从列表中删除值。指定要删除的值会导致从变量中删除该值的所有出现。

当您使用此语法时,BitBake 需要一个或多个字符串。保留了周围的空间和间距。这是一个例子:

FOO = “123 456 789 123456 123 456 123 456”
FOO:remove = “123”
FOO:remove = “456”
FOO2 = " abc def ghi abcdef abc def abc def def"
FOO2:remove = "
def
abc
ghi
"
变量FOO变为“789 123456”并FOO2变为“abcdef”。

像“:append”和“:prepend”一样,“:remove”在变量扩展时应用。

3.1.12 覆盖式 操作优势
与“+=”和“=+”运算符相比,覆盖样式操作“:append”、“:prepend”和“:remove”的一个优点是覆盖样式运算符提供有保证的操作。例如,考虑一个foo.bbclass需要将值“val”添加到变量的类FOO,以及一个使用foo.bbclass如下的配方:

inherit foo
FOO = “initial”
如果foo.bbclass使用“+=”运算符,如下所示,那么 的最终值FOO将是“initial”,这不是我们想要的:

FOO += “val”
另一方面,如果foo.bbclass 使用“:append”运算符,则最终值FOO将是“初始值”,如预期的那样:

FOO:append = " val"
笔记

从来没有必要将“+=”与“:append”一起使用。以下分配序列将“barbaz”附加到 FOO:

FOO:append = “bar”
FOO:append = “baz”
将前面示例中的第二个赋值更改为使用“+=”的唯一效果是在附加值中的“baz”之前添加一个空格(由于“+=”运算符的工作原理)。

覆盖样式操作的另一个优点是您可以将它们与其他覆盖结合起来,如“条件语法(覆盖) ”部分所述。

覆盖样式操作可以对继承的变量起作用,而 += 对继承的变量不起作用

链接:https://docs.yoctoproject.org/bitbake/bitbake-user-manual/bitbake-user-manual-intro.html#introduction

yocto 编译与bb的语法相关推荐

  1. yocto编译错误- Error executing a python function in exec_python_func() autogenerated

    yocto编译错误 主要错误信息 **ERROR: fsl-image-validation-imx-1.0-r0 do_rootfs: Error executing a python functi ...

  2. yocto 编译流程分析

    yocto 编译流程分析 2015年04月15日 10:55:13 日月星辰007 阅读数:4955 git clone 一份poky 的工程到本地. source poky/oe-init-buil ...

  3. rockchip的yocto编译环境的搭建

    作者:良知犹存 转载授权以及围观:欢迎添加微信公众号:Conscience_Remains 总述   嵌入式的朋友们,应该知道Linux驱动开发过程中,需要进行搭建交叉编译工具链环境.移植u-boot ...

  4. yocto编译linux,好实用!用 Yocto 在 Ubuntu 上创建最小化 Linux 发行版

    导读 本文主要聚焦在如何使用 Yocto 在 Ubuntu 上创建一个最小化的 Linux 发行版.Yocto 项目在嵌入式 Linux 的世界非常著名,这是因为它用起来非常灵活.方便.Yocto 的 ...

  5. 编译原理实验-LL1语法分析器(自动生成First集、Follow集求法)java实现

    编译原理实验-LL1语法分析器(自动生成First.Follow)java 博主在做实验时,参考众多他人代码,发现bug众多,在@moni_mm代码基础上,与伙伴把能看到的BUG都做出修正,同时增添了 ...

  6. IMX8M系列 yocto编译镜像及demo编译(MYD-JX8MX)

    IMX8M系列 yocto编译镜像及demo编译(MYD-JX8MX) 前段时间由于工作需要,研究了一下米尔的MYD-JX8MX开发板,用的是NXP 的IMX8M型号芯片,说实话,官方提供的文档描述的 ...

  7. Yocto 编译libsdl2-native 报错

    Yocto Version : DISTRO_VERSION = "3.4+snapshot-${METADATA_REVISION}" Ubuntu Version: ubunt ...

  8. CSS的预编译——less语言基本语法教程(入门)

    less语言基本语法教程(入门) 一.CSS解析 css是一门标记性语言,语法简单,对使用者的要求也比较低. 缺点:1.对于css:使用css时需要书写大量的看似没有逻辑的代码,不方便维护和扩展,不利 ...

  9. 【编译原理】LR语法分析器的设计与实现

    LR语法分析器的设计与实现 本文为当时编译原理实验作业,要求用设计的思想完成,小题大做,仅供参考 文章目录 LR语法分析器的设计与实现 实验要求 实现功能 输入输出 样例 一.LR语法分析器问题定义 ...

  10. 编译原理之简单语法分析器(c语言)

    语法分析是编译过程的核心部分,其基本任务是根据语言的语法规则进行语法分析,如果不存在语法错误即给出正确的语法结果,并为语义分析和代码生成做准备. 语法分析器的两种方式 语法分析器的任务主要是确定是否可 ...

最新文章

  1. RTP与RTSP的区别
  2. php -- 检查是否存在
  3. 32位的cpu不能安装linux_Python3.5.2 安装教程【64位/32位】
  4. SQL SERVER大话存储结构(2)
  5. python自带的sum()函数和numpy库中的sum()函数的区别
  6. Windows下适用于PHP 7.1的memcache扩展工具编译
  7. fastapi 用户指南(路径参数、查询参数、请求体)
  8. mysql C where语句_mysql – 在WHERE子句中使用substr的SELECT语句
  9. LeetCode-144-Binary Tree Preorder Traversal
  10. 汇编实验 三 编程、编译、连接、跟踪
  11. java new char 初始化_java考试复习
  12. Shell编程语言(一)
  13. java基于ssm+mysql的宠物店管理系统 计算机毕业设计
  14. 美团架构师谈论程序员进阶架构师所需能力模型
  15. Codeforces Round #701 D. Multiples and Power Differences LCM性质
  16. 记录uni-app的时间选择器
  17. 沟通的艺术(笔记)——前言
  18. 使用Synopsys VCS使用constraint遇到的一个奇怪问题
  19. 计算机诞生与发展思维导图,逻辑思维与思维导图的关系
  20. 在Web前端基于CAD图实现等值线在线分析

热门文章

  1. 高性能零售IT系统的建设05-从0打造一个每秒万级并发的互联网交易系统的技术全架构
  2. 英语口语8级是这么炼成的!
  3. 中国气象台API(2017.09)
  4. 标准差和标准误差的区别
  5. 【51单片机】74HC595串转并 使用
  6. BTA分论坛现场直击 | 区块链行业应用有待落地,游戏上链冰火两重天
  7. 小刘同学的第一百三十一篇博文
  8. python绘制树状excel表格_Python-使用XlsxWriter模块在Excel工作表中绘制柱形图
  9. 《我的团长我的团》 - 观后感
  10. 2019配电安规电子版_2018年配电安规.docx