do_package()
do_package()
는 레시피의 ${D}
디렉토리를 Source로 사용한다.${D}
는 do_install()
의 결과이다.${D}
는 default
로, ${D}=${WORKDIR}/image
이다.package
oe-core/meta/recipes-bsp/u-boot
의 예:u-boot
의 ${WORKDIR}
${D}
를 이용해do_package()
: ${D}(${WORKDIR}/image
) -> package
${D} = "${WORKDIR}/image"
${WORKDIR}/package
do_package()
: 아래의 PACKAGES
변수 내 지정된 값으로 packages-split
내부에 디렉토리들 생성한다.${WORKDIR}/packages-split
do_packagedata()
: do_populate_sysroot()
가 하위 태스크로 실행된다.do_populate_ipk()
는 local.conf
에서PACKAGE_CLASSES = "package_ipk"
로 설정했기 때문에 실행되는 것이다.PACKAGES
PACKAGES
변수에는 global-PACKAGES, local-PACKAGES 가 있다. (가칭임)PACKAGES
변수가 package-split
에서 directory를 생성한다.PACKAGES
값이다.local.conf
등에서 수정가능하다.$ bitbake -e | egrep "^PACKAGES="
PACKAGES="defaultpkgname-src defaultpkgname-dbg defaultpkgname-staticdev defaultpkgname-dev defaultpkgname-doc defaultpkgname-locale defaultpkgname"
${PN}-deb ${PN}-staticdev ${PN}-dev ${PN}-doc ${PN}-locale ${PACKAGE_BEFORE_PN} ${PN}
u-boot
레시피 에서의 예PACKAGE_BEFORE_PN += "${PN}-env ${PN}-extlinux"
packages-split
${WORKDIR}/packages-split
: global-PACKAGES + local-PACKAGES append 로 directory 생성됨$FILES_${PN}
변수do_package()
태스크에서 package-split
을 구성할 때, ${FILES}
변수가 사용된다.FILES
변수는, (이전에 PACKAGES
변수가 package-split
내부 디렉토리를 만들었다면)${FILES}_${PN}
을 보고 위치시킨다.$ bitbake -e | egrep "^FILES_*"
$ bitbake -e myhello | egrep "^FILES_*"
AND
느낌으로 첫 매칭되면 바로 들어감$FILES_
변수 테이블FILES_ | path |
---|---|
FILES:${PN} | /usr/bin/* /usr/sbin/* /usr/libexec/* /usr/lib/lib*.so.* /etc /com /var /bin/* /sbin/* /lib/*.so.* /lib/udev /usr/lib/udev /lib/udev /usr/lib/udev /usr/share/${PN} /usr/lib/${PN}/* /usr/share/pixmaps /usr/share/applications /usr/share/idl /usr/share/omf /usr/share/sounds /usr/lib/bonobo/servers |
FILES:${PN}-bin PACKAGES:${PN}-bin 이 없는 경우가 많음PACKAGES:${PN} 에 흡수됨 | /usr/bin/* /usr/sbin/* |
FILES:${PN}-dbg | /usr/lib/debug /usr/lib/debug-static /usr/src/debug |
FILES:${PN}-dev | /usr/include /lib/lib*.so /usr/lib/lib*.so /usr/lib/*.la /usr/lib/*.o /usr/lib/pkgconfig /usr/share/pkgconfig /usr/share/aclocal /lib/*.o /usr/lib/defaultpkgname/*.la /lib/*.la /usr/lib/cmake /usr/share/cmake |
FILES:${PN}-doc | /usr/share/doc /usr/share/man /usr/share/info /usr/share/gtk-doc /usr/share/gnome/help |
FILES:${PN}-locale | /usr/share/locale |
FILES:${PN}-src | - |
FILES:${PN}-staticdev | /usr/lib/*.a /lib/*.a /usr/lib/defaultpkgname/*.a |
FILES_SOLIBSDEV | /lib/lib*.so /usr/lib/lib*.so |
${PN}-libmyhello
생성${PN}-libmyhello
에 들어갈 파일은 ${bindir}/*
, {docdir}/*
do_install()
과정에서 원하는 파일이 ${bindir}/*
, {docdir}/*
에 잘들어가면 상관 없지만,do_install()
에서 명시$ bitbake -e myhello | grep ^PACKAGES
$ bitbake -e myhello | grep ^FILES_
$PACKAGE_CLASSES
build/conf/local.conf
에서 PACKAGE_CLASSES 변수에서 패키지 형식 지정한다. (여러 개 가능)package_deb
, package_ipk
, package_rpm
을 선택 가능하다.${PN}-deb ${PN}-staticdev ${PN}-dev ${PN}-doc ${PN}-locale ${PACKAGE_BEFORE_PN} ${PN}
$ bitbake -e | egrep "^PACKAGES="
$ bitbake -e <COMPONENT> | egrep "^PACKAGES="
PACKAGES
의 기본 값: ${PN}-deb ${PN}-staticdev ${PN}-dev ${PN}-doc ${PN}-locale ${PACKAGE_BEFORE_PN} ${PN}
meta/recipes-multimedia/libtiff/tiff_4.0.10.bb
레시피가 있다.PACKAGES
에서 만들 패키지 이름 지정PACKAGES =+ "tiffxx tiff-utils"
tiffxx tiff-utils
라는 두 가지 패키지 생성된다.PACKAGES += "libcjson-c5"
가 없는데,libjson-c5.ipk
가 자동 생성된다. 이러한 경우는, library
만 생성하는 레시피의 경우 PACKAGES += "라이브러리이름'버전'"
를 자동 추가해서 넣어준다.$PACKAGES
3-1. PACKAGES변수 확인
$ bitbake -e | grep "^PACKAGES=" # bitbake에서 global PACKAGES variable
$ bitbake -e myhello | grep "^PACKAGES=" # myhello 컴포넌트에서 PACKAGES variable
do_package()
에서 PACKAGES 변수 내 지정된 값으로 packages-split 내부에 디렉토리들 생성한다.
${PN}
${PN}-src
${PN}-dbg
${PN}-staticdev
${PN}-dev
${PN}-doc
${PN}-locale
$FILES_${PN}
3-2. FILES_${PN} 변수 확인
$ bitbake -e | egrep "^FILES_*" # bitbake에서 global FILE_* variable
$ bitbake -e myhello | egrep "^FILES_myhello=" # bitbake에서 myhello 컴포넌트의 FILE_myhello variable
$ bitbake -e myhello | grep "^FILES_myhello"
FILES_myhello="/usr/bin* /usr/sbin/* /usr/libexec/* /usr/lib/lib*.so* ..."
로 되어 있다.FILES_myhello-dbg="/usr/lib/debug ... "
로 되어 있다.$
PACKAGES와 $
FILES과 엮이게 된다.do_install() {
${CC} userprog.c ${LDFLAGS} -o ${bindir}/userprog
}
FILES_${PN}-dbg += "${bindir}/userprog"
FILES_${PN} += "${bindir}/userprog"
2.1 아래와 같이 첫 번째 FILES_${PN}인 FILES_${PN}-dbg 에 먹힌다.
2.2 즉, FILES 값에 매치되는 첫 번째 패키지에 파일들이 간다!
Readme.txt
파일을 추가한다.poky/meta-mylayer/recipes-myrecipes/myhello/myhello_0.4.bb
(혼동하지말자.. 여기는 '레시피'파일)do_fetch()
에서 fetch한 파일은 ${S} = "${WORKDIR}/git"
에 fetch된다.do_install()
에서 ${S}/Readme.txt
를 ${D}${docdir}
로 옮긴다.$ bitbake myhello
${D}${docdir}
= ${WORKDIR}/image
${docdir}/
Readme.txt
생성${WORKDIR}/
packages ${docdir}/
Readme.txt
생성${WORKDIR}/
pakcages-split / myhello-doc
${docdir}/Readme.txt
생성git://github.com/markyang92/myhello.git
PACKAGES =+ "libmyhello" FILES_libmyhello = "${bindir}/* ${docdir}/*"
삽입bitbake -e myhello | grep ^FILES_
bitbake -e myhello | grep ^PACKAGES
$ bitbake myhello
RDEPENDS
/ runtime requirement
에 영향을 끼칠 수 있기 때문이다.ALLOW_EMPTY_${PN} = "1"
ALLOW_EMPTY_${PN}-dev = "1"
ALLOW_EMPTY_${PN}-staticdev = "1"
build/conf/local.conf
)에서 패키지 형식을 지정 한다고 했는데, 기본적으로 .rpm 이므로 아래의 환경처럼 패키징이된다.
근데 근본적인 질문이 있는데요... 이 packaging split 을 왜하는건가요...?
그리고 저 만들어진 결과의 rpm 은 어떻게 쓰이나요?ㅜㅜ
마지막에 rootfs이미지 만들때 쓰이는건가요:?;