

bitbake.conflayer.conf<layer>/conf/layer.confbblayers.conflocal.conf<dist-name>.conf<layer>/conf/distro/<distro-name>.confDISTRO 변수를 사용하여 결정<machine-name>.conf<layer>/conf/machine/<machine-name>.confMACHINE 변수를 사용하여 결정
.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 = " " 의무화_removeVARIABLE_remove는 제거
:remove_ 사용 금지:remove = " " 의무화remove 특징append는 한칸 띄우고 사용하지만, remove는 그럴 필요가 없음qtbase에서, PACKAGECONFIG에 eglfs를 append하는 경우PACKAGECONFIG:append = " eglfs"qtbase에서, PACKAGECONFIG에 eglfs를 remove하는 경우PACKAGECONFIG:remove = "eglfs":append 쳐놔도 마지막에 :remove가 있다면, VARIABLE에 VAL이 먹히지 않음OVERRIDESOVERRIDES 변수를 두면, : 콜론으로 분리해 선택 조건을 나열한다.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_IPKpackage-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 :