make menuconfig
시, ncurses
library를 필요로한다.pthread, openssl
을 필요로 한다면, 그 sw는 pthread, openssl
라이브러리가 없이는 빌드할 수 없다.lspci
dlopen
foo_1.0.bb
가 bar
를 의존한다면, 비트베이크는 bar
를 제공하는 모든 레시피를 나열한다.bar
의 의존성은 다음에 의해 만족된다.bar_<version>.bb
형식의 모든 레시피bar
가 있는 레시피virtual/kernel
프로바이더는 이런 매커니즘이 적용되고 있는 좋은 예이다.virtual/<namespace>
는 하나의 모듈에 대해 여러 프로바이더가 존재할 때 사용하는 규칙이다.virtual/kernel
을 추가할 수 있고, 비트베이크는 이 의존성을 보장한다.= "linuxmymachine"
처럼 하나를 선택할 수 있다.DEPENDS
는 build-time dependency를 명시한다.Recipe
내에 DEPENDS
가 있으면 먼저 dependency로써, bitbake build 한다.myhello
의 do_configure
태스크를 실행하기 전, myhellolib
의 do_populate_sysroot
태스크가 수행된다.myhellolib_0.1.bb
레시피DESCRIPTION = "Static library recipe"
LICENSE = "MIT"
LIC_FILES_CHKSUM="file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302"
SRC_URI="git://XXXXXXX/myhello.git;protocol=ssh;branch=master"
SRCREV="${AUTOREV}"
S="${WORKDIR}/git"
do_compile() {
${CC} ${CFLAGS} -c print.c
${CC} ${CFLAGS} -c arith.c
${AR} rcs libmyhello.a print.o arith.o
}
do_install() {
install -d ${D}${libdir}
install -m 0755 libmyhello.a ${D}${libdir}
install -d ${D}${includedir}
install -m 0644 mylib.h ${D}${includedir}
}
myhello_0.8.bb
#include <stdio.h>
#include <stdlib.h>
#include "mylib.h"
int main(){
print("myhello component\n",5);
print("I will use lspci!\n",5);
system("lspci");
return 0;
}
RDPENDS
는 rutime dependency를 명시한다.RDEPENDS_${PN} += "레시피이름"
이 아니다!!RDEPENDS_${PN} += "Package_name"
이다.RDEPENDS_${PN} = "T"
가 P.bb에 있다면, P의 do_build task가 depend T의 do_build task로 하여 만들어진다.RDEPENDS_${PN}-dev += "perl"
${PN}-dev
package) 에서 perl
을 참조한다.BitBake, which the OpenEmbedded build system uses, supports specifying versioned dependencies. Although the syntax varies depending on the packaging format, BitBake hides these differences from you. Here is general syntax to specify version with the RDEPENDES variable:
RDEPENDS_${PN} = "package (operator version)"
For operator, you can specify the following:
=
<
>
<=
>=
For example, the following sets up a dependency on version 1.2 or greater of the package foo:
RDEPENDS_${PN} = "foo (>= 1.2)"
lspci
$ lspci
명령어➜ build git:(dunfell) ✗ lspci
00:00.0 Host bridge: Intel Corporation Xeon E3-1200 v6/7th Gen Core Processor Host Bridge/DRAM Registers (rev 05)
00:01.0 PCI bridge: Intel Corporation Xeon E3-1200 v5/E3-1500 v5/6th Gen Core Processor PCIe Controller (x16) (rev 05)
00:01.1 PCI bridge: Intel Corporation Xeon E3-1200 v5/E3-1500 v5/6th Gen Core Processor PCIe Controller (x8) (rev 05)
00:01.2 PCI bridge: Intel Corporation Xeon E3-1200 v5/E3-1500 v5/6th Gen Core Processor PCIe Controller (x4) (rev 05)
00:08.0 System peripheral: Intel Corporation Xeon E3-1200 v5/v6 / E3-1500 v5 / 6th/7th/8th Gen Core Processor Gaussian Mixture Model
...
중략
0-1. myhello 컴포넌트의 src인 userprog_lspci.c
#include <stdio.h>
#include <stdlib.h>
#include "mylib.h"
int main(){
print("myhello component\n",5);
print("I will use lspci!\n",5);
system("lspci");
return 0;
}
0-2. myhello 컴포넌트 레시피
0-3. RDEPENDS_${PN}=package_name 형식으로 넣어야 하기 때문에, 현재 컴포넌트에서 어떤 패키지가 RDEPENDS를 요구하는지 볼 것
$ runqemu core-image-minimal-tiny
3-1. /usr/lib
3-2. /usr/bin
3-3. 실행
lshw
packagegroup-dhyang.bb
에 RRECOMMENDS를 사용해보자.RRECOMMENDS_${PN} = "lshw"
패키지를 명시해보았다.$ bitbake packagegroup-dhyang
git://git.openembedded.org/meta-openembedded
$ git checkout dunfell
packagegroup-dhyang
이 bitbake build
될 것이다.$ bitbake packagegroup-dhyang
IMAGE_INSTALL
에 추가하고 bitbake build, runqemulshw
명령어가 잘 먹는다.NO_RECOMMENDATIONS = "1"
NO_RECOMMENDATIONS = "1"
로 set하면, 모든 recommended-only packages의 설치를 막는다.BAD_RECOMMENDATIONS = "package_name package_name ..."
BAD_RECOMMENDATIONS = "package_name package_name ..."
로 특정 recommended-only package 설치를 막는다.PACKAGE_EXCLUDE = "package_name package_name ... "
DEPENDS = "package (>= 1.2)"
RDEPENDS_${PN} = "package (>= 2.1)"
과 같이 버전을 지정할 수 있다.
=
, >
, <
, >=
, <=
$ bitbake -g recipe
$ bitbake -g recipename
위 커맨드는 '현재 build'에서 다음의 파일을 생성해 Write한다.
'myhello'등만 남겨뒀는데 엄청나게 복잡한 디펜던시..가 보인다.
$ dot -Tpdf task-depends.dot -o outfile.pdf
로 변환할 수 있다.
$ evince outfile.pdf
띄운 pdf 파일인데 겁나 복잡하다...
$ bitbake -g -u taskexp recipe
$ bitbake -g -u taskexp core-image-minimal-tiny
python2 -m pip install (gi|pgi)