
make menuconfig 시, ncurses library를 필요로한다.pthread, openssl을 필요로 한다면, 그 sw는 pthread, openssl 라이브러리가 없이는 빌드할 수 없다.lspcidlopenfoo_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. 실행

lshwpackagegroup-dhyang.bb에 RRECOMMENDS를 사용해보자.
RRECOMMENDS_${PN} = "lshw" 패키지를 명시해보았다.$ bitbake packagegroup-dhyang
meta-oe layer가 추가되어 있지 않으면 ERROR 발생할 것임git://git.openembedded.org/meta-openembedded
$ git checkout dunfell
build 디렉토리인 ${TOPDIR}에서 conf/bblayers.conf에서 meta-oe 를 추가한다.packagegroup-dhyang 이 bitbake build 될 것이다.$ bitbake packagegroup-dhyang
IMAGE_INSTALL에 추가하고 bitbake build, runqemu
lshw 명령어가 잘 먹는다.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)