
do_package()

do_package()는 레시피의 ${D} 디렉토리를 Source로 사용한다.${D}는 do_install()의 결과이다.${D}는 default로, ${D}=${WORKDIR}/image이다.


packageoe-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"로 설정했기 때문에 실행되는 것이다.
PACKAGESPACKAGES변수에는 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}-binPACKAGES:${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_CLASSESbuild/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 += "라이브러리이름'버전'"를 자동 추가해서 넣어준다.


$PACKAGES3-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"
packages-split/${PN}-staticdev 패키지만 존재
${WORKDIR}/deploy-rpms/
Custom Image에 저 패키지만 설치
dependency 문제
빈 패키지라도 만들어라 설정.
${PN}-${PV}-${PR}.arch.rpm으로 생성
custom image 생성 완료build/conf/local.conf)에서 패키지 형식을 지정 한다고 했는데, 기본적으로 .rpm 이므로 아래의 환경처럼 패키징이된다.
근데 근본적인 질문이 있는데요... 이 packaging split 을 왜하는건가요...?
그리고 저 만들어진 결과의 rpm 은 어떻게 쓰이나요?ㅜㅜ
마지막에 rootfs이미지 만들때 쓰이는건가요:?;