文章目录
bitbake基础知识
1 基本概念
recipes,即指所有配置文件,bb文件以及bbappend后缀的文件,主要作用:
- 描述package信息,如作用,主页,许可等
- recipe的版本
- 存在的依赖关系,如requeir,include等
- 源码信息,如何获取,补丁文件
- 编译信息,
- 安装信息
configuration,即以conf后缀的文件,主要作用:
- 定义各种配置变量,控制编译流程
- 定义机器配置,发布信息配置,编译器配置,通用配置以及用户配置等
- 根本的配置bitbake.conf
classes,即以bbclass后缀的文件,主要作用:
- 抽象的recipes,主要为了共享
- 主要定义了基本的task,如fetch、unpack、configure、compile、install、package等
- 也可能被重写
layers,主要是功能模块化,一是隔离不同的实现,二是方便移植集成。一般的格式是
meta-layer1
meta-layer2
classes
config
recipes-layer3
items
foo.bb
file
append,即以.bbappend后缀的文件,主要用来扩展或重写recipes里的信息,它是以bb文件为基础。同时支持扩展符匹配,如
busybox_1.21.%.bbappend
busybox_1.21.1.bb
busybox_1.21.2.bb
busybox_1.21.3.bb
2 基本语法
https://www.cnblogs.com/chegxy/p/15731481.html
https://www.cnblogs.com/chegxy/p/17135106.html
2.1 变量赋值
bitbake的变量,通过=号赋值,如果值用引号包起来,里面的空格保留;如果未赋值,值为none;如果值比较长,可用反斜杠分行赋值
VARIABLE = "value" 值为value
VARIABLE = " value" 值为左空+value
VARIABLE = "value " 值为右空+value
VARIABLE = "" 值为none
VARIABLE = " " 值为空
VARIABLE = 'I have a " in my value' 单引号中的双引号保留
FOO = "barbaz" 两种等价
FOO = "bar\
baz"
2.2 变量扩展
引用变量扩展,大括号必须
A = "avalbefaoreB"
B = "pre${A}post" B值为preavalbefaoreBpost,大括号强制
A = "avalafterB" B值为preavalafterBpost,大括号强制
?号扩展
如果A已赋值(=或?),则保持原样,否则其值为aval
A = "aval"
A ?= "aval"
A ?= "aval" 如果A已赋值(=或?),则保持原样,否则其值为aval,
??号扩展
如果W已赋值(=或?,??不影响),则保持原样,否则其值为x
W = "x"
W ?= "x"
W ??= "x"
W ??= "x" 如果W已赋值(=或?,??不影响),则保持原样,否则其值为x
立即扩展
“:=”, “.=”, “=.”, “+=”, and “=+”
T = "123"
A := "test ${T}" A为test 123 立即扩展,虽然T后面变了
T = "456"
B := "${T} ${C}" B为456 cvalappend,因为B在立即扩展时,C未定义,故等到最后,再赋值,最后C有值,故以上
C = "cval"
C := "${C}append" C为cvalappend
B = "bval"
B += "additionaldata" B自动加空隔,为bval additionaldata
C = "cval"
C =+ "test" C自动加空隔,为test cval
B = "bval"
B .= "additionaldata" B不自动加空隔,为bvaladditionaldata
C = "cval"
C =. "test" C不自动加空隔,为testcval
override扩展
关键字
B = “bval”
B:append = " additional data" --》B为bval additional data
C = “cval”
C:prepend = "additional data " --》C为additional data cval
D = “dval”
FOO = “123 456 789 123456 123 456 123 456”
FOO:remove = “123” --》D为456 789 123456 456 456
1扩展时赋值,而不是立即赋值
2不自动加空隔
应用1
inherit foo
FOO = "initial"FOO += "val" foo.bbclass -->FOO为initial
FOO:append = " val" foo.bbclass -->FOO为initial val
应用2
FOO:append = "bar"
FOO+=baz -->FOO为bar baz
FOO:append = "baz" -->FOO为barbaz
变量赋值总结
= | 延后赋值 | |
---|---|---|
.= | 立即赋值 | 不自动加空格 |
+= | 立即赋值 | 自动加空格 |
:= | 立即赋值 | |
? | 延后赋值 | |
?? | 延后赋值 | |
override | 延后赋值 | 不自动加空格 |
2.3 变量flag
bitbake支持为变量增加flag,
FOO[a] = "abc"
FOO[b] = "123"
FOO[a] += "456"
DATE = “${@time.strftime(‘%Y%m%d’,time.gmtime())}”
系统flags
[cleandirs] 创建一个空目录(存在删除重建