bitbake.conf
layer.conf
<layer>/conf/layer.conf
bblayers.conf
local.conf
<dist-name>.conf
<layer>/conf/distro/<distro-name>.conf
DISTRO
변수를 사용하여 결정<machine-name>.conf
<layer>/conf/machine/<machine-name>.conf
MACHINE
변수를 사용하여 결정.bb
, .bbappend
, .class
<layer>/classes/<class-name>.bbclass
<recipe-name>.bbappend
.bb
, .bbappend
에 정의된 함수는 특정 파일에 지역적.class
에 정의된 함수는 전역적/bin/sh
실행python
은 비트베이크에게 아래에 나오는 코드를 파이썬 코드로 해석할 것을 지시한다.python
을 사용하면 모든 파이썬 모듈을 가져올 수 있고, 다양한 함수 사용성에 대한 이점을 취할 수 있다.def
파이썬(d
): do_
prefix가 붙는다!!BB_DEFAULT_TASK
변수로, base
클래스에 의해 설정된다.base.bbclass
내 있는 task를 대신하기 위해선, EXPORT_FUNCTIONS 키워드를 사용해야한다.myclass.bbclass
인데, 그래서 myclass_<task_name>
형식이다.PACKAGECONFIG[python3] = "-DPYTHON3_NUMPY"
do_mytask[nostamp] = "1"
등과 같이 bitbake의 변수나 함수는 '속성'(flag)를 가질 수 있다.
d.getVarFlag(변수, 속성)
d.setVarFlag(변수, 속성, 값)
을 사용할 수 있다.func[run] = "1"
python func () {
run = d.getVarFlag('func', 'run')
if run == 1:
# 작업 수행
...
d.setVarFlag('func', 'run', 0) # func[run] = "0"
else:
# 지금은 수행하지 않음
}
1.1. Shell: 당연히 쉘 에선 띄워쓰기를 주면 변수에 할당되지 않는다. 개별 명령어로 알아 듣는다.
1.2. bitbake 에선 변수 설정 assign 시, 띄워쓰기 가능
2.1. Shell: 위에서부터 순차적으로 대입된다.
line 5
의 A="change"
는 line4
의 B
에게 영향을 주지 않는다.2.2. bitbake는 실제 레시피 사용 시, 변수 확장 실행
bbplain "B: ${B}"
때, 변수확장이 적용되어 아래의 A가 B 에 assign$ bitbake myhello
VARIABLE = "value"
=
hard assignment?=
: soft assignment
=
선언되지 않았다면 사용되는 변수 값MACHINE ?= "qemuarm"
MACHINE =
로 hard assignment가, 위든 아래든 set 되었다면 ?=
문장은 무시MACHINE =
이 set되지 않았다면, MACHINE ?= "qemuarm"
이 최종 적용 뒤에 MACHINE =
이 set 되면 =
한게 먹힌다.?=
가 여러 개 선언되면 제일 첫 번째 것이 적용된다.??=
: weak assignmentMACHINE =
이 위든 아래든 set되면 =
적용=
이 없으면, ??=
중 제일 뒤에꺼 최종 적용=
hard assignment=
는 hard assignment?=
soft assignment?=
가 여러 개 선언되면 제일 첫 번째 것이 적용된다.MACHINE ?= "qemuarm"
.... 중략 ...
MACHINE = "qemux86"
??=
weak assignmentMACHINE =
이 위든 아래든 set되면 =
적용=
이 없으면, ??=
중 제일 뒤에꺼 최종 적용:=
즉시 위로 보기T = "123"
A := "${D} ${A} test ${T}"
A = "test 123"
+=
공백하나 추가A = "11"
A += "12"
-> A = "11 12"
.=
공백 없이 추가A = "11"
A .= "12"
-> A = "1112"
_append
공백 없이 추가A = "11"
A_append = "12"
-> A = "1112"
:append
_
사용 금지:append = " "
의무화_prepend
공백 없이 앞에 추가A = "11"
A_prepend = "12"
-> A = "1211"
:prepend
_
사용 금지:prepend = " "
의무화_remove
VARIABLE_remove
는 제거:remove
_
사용 금지:remove = " "
의무화remove
특징append
는 한칸 띄우고 사용하지만, remove
는 그럴 필요가 없음qtbase
에서, PACKAGECONFIG
에 eglfs
를 append하는 경우PACKAGECONFIG:append = " eglfs"
qtbase
에서, PACKAGECONFIG
에 eglfs
를 remove하는 경우PACKAGECONFIG:remove = "eglfs"
:append
쳐놔도 마지막에 :remove
가 있다면, VARIABLE에 VAL이 먹히지 않음OVERRIDES
OVERRIDES
변수를 두면, :
콜론으로 분리해 선택 조건을 나열한다.OR
처리한다.A
와 변수 B
는 각각 machine
, os
를 가졌으므로 가진 변수가 override된다.yocto kirkstone부터, :
으로하자.
$ bitbake -e | grep "^A=\|^B=\|^C="
OVERRIDES = "sun:rain:snow"
PROTECTION:rain = "umbrella"
PROTECTION:snow = "sweater"
# ===================================== #
결국 PROTECTION = "sweater"
OVERRIDES
에 hail
을 넣어보자.OVERRIDES = "sun:rain:snow:${OTHER}"
OTHER = "hail"
PROTECTION:rain = "umbrella"
PROTECTION:hail = "duck"
# ===================================== #
PROTECTION = "duck"
local.conf
# ==== local.conf ==== #
MACHINE = "qemux86-64"
$ bitbake -e | grep "^MACHINE"
-> MACHINEOVERRIDES="qemuall:qemux86-64"
VARIABLE:qemuall:qemux86-64 = "1.4.6" # 사용하는 변수는 이런식으로 쓰면 안된다.
RDEPENDS:${PN}:append:qemuall = "\
${VARIABLE} \
"
RDEPENDS:${PN}:append:qemux86-64 = "\
${VARIABLE} \
"
VARIABLE ?= ""
VARIABLE:qemuall = "1.4.6"
VARIABLE:qemux86-64 = "1.4.7"
RDEPENDS:${PN}:append:qemuall = "\
${VARIABLE} \
"
RDEPENDS:${PN}:append:qemux86-64 = "\
${VARIABLE} \
"
DEPLOY_DIR_IPK
package-index
# local.conf
DEPLOY_DIR_IPK_pn-package-index = "새 할당 변수 값"
변수_pn-<레시피> = "새 값"
DATE = "${@time.strftime('%A %B %d, %Y', time.gmtime())}"
TODAY := "Today is: ${DATE}."
do_install () {
DATE="${@time.strftime('%A %B %d, %Y', time.gmtime())}"
bbplain "${DATE}"
}
def
: 전역 파이썬 함수def
func(d):
d
: 전역 Bitbake 변수를 담은 딕셔너리def
키워드를 사용하면, 어느 파일에서 정의되든지 간에 전역으로 정의할 수 있다.python
: