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. js ftpclient linux server,Node.JS用Socket实现FTP Server服务器和Client客户端
  2. 【Netty】ChannelHandler和ChannelPipeline
  3. vue项目-封装API接口
  4. Reorder List
  5. python多线程下载m3u8文件,python 实现多线程下载m3u8格式视频并使用fmmpeg合并
  6. Shell教程(一):简介
  7. 技术人员是如何分析游戏环境的? 《影之诗》牌组趋势分析
  8. c# 读hex_在C#中将string转换为hexstring
  9. DSF深搜入门全排列笔记nyoj366
  10. 《小强与小明》——正在疯传的伟大的故事
  11. 注册了Stack Overflow
  12. 文件的操作,如何做文件上传
  13. 游戏必备组件有哪些_微信广告将升级小程序、小游戏开发者收入方案
  14. html页面广告5秒之后跳过
  15. linux内核page结构体的PG_referenced和PG_active标志
  16. Windows 10 IDM 下载play.kth.se上面的网课视频
  17. Mac系统下Carina初体验
  18. 大型医院HIS系统源码 优质源码 医院管理系统源码
  19. Linux设备驱动子系统第二弹 - SD卡
  20. 机器学习:从决策树到xgboost

热门文章

  1. r语言平均值显著性检验_5.3 两总体均值检验和方差分析的R语言操作(26页)-原创力文档...
  2. 我的第一个hbulider项目
  3. editplus怎么运行java程序
  4. 利用scrapy工具,实现一键获取多个项目数据的功能
  5. word中套用表格样式在哪里_word2010中表格自动套用格式在哪里?
  6. matlab符号计算求解正态分布问题
  7. Linux下为空白SD卡建立BOOT,rootfs分区
  8. 阿里云服务器学生免费领取指南
  9. css3中vw/vh/vmin/vmax的含义与使用方法
  10. PxCook安装文件有问题处理办法