분류

2018년 1월 31일 수요일

Yocto 학습 : 작업 #2 - 첫 번째 빌드

---------------------------------------------------------------------------------------------------
이 문서는 Yocto Training - HOME 문서를 한글 화 한 것입니다. 저자이신 Daiane Angolini 님의 수락 하에 한글 화 작업을 진행하고 있습니다. 일부 주석을 첨부 할 것이며, 필요하면 의역을 통해 일부 내용이 변경 되거나 누락 될 수 있습니다. 하지만 기본은 구글이 번역하겠습니다.

원본은 https://community.nxp.com/docs/DOC-94849 입니다.
---------------------------------------------------------------------------------------------------


보유한 소스 코드를 동기화 합니다.
소스 코드는 주기적으로 업데이트 해 주는 것이 좋습니다. 첫 번째 단계는 동기화 입니다.
$repo sync


로컬 분기점 생성


repo start <새 분기 이름> --all 

로컬 분기를 만드는 이유 :
만약에 어떤 소스 코라도 변경 한 상태에서(다른 선호 커널을 선택하는 등의) 다시 동기화를 하고 싶다 거나, dylan 대신 마스터를 하는 경우에 변경 사항을 유지한 상태로 프로젝트를 동기화 할 수 있습니다.
※ 로컬 분기 없이 동기화 할 경우 변경한 소스가 모두 사라지는 경험을 하실 수도 있습니다. 


빌드를 위한 보드 선택


새 빌드 디렉터리 생성 
$ source setup-environment build
이제 새로운 빌드 디렉터리가 생성 되었습니다.
※어째서인지 콘솔을 죽였다 살리면 저는 source setup-environment build 명령은 콘솔을 재시작 하거나 시스템 재시작시 반드시 사용해야 하는군요;

dora의 기본 보드는 imx6qsabresd 입니다. 원하는 경우 QSB 또는 imx28을 선택할 수 있습니다.
$ vi conf/local.conf 

※개인적으로 core-image-base에 ssh를 추가설치 하였습니다.


${yoctodir}/build/conf/local.conf 파일을 변경해야 합니다.
conf에 추가할 수 있는 내용을 보시려면 클릭
CORE_IMAGE_EXTRA_INSTALL += "openssh"
CORE_IMAGE_EXTRA_INSTALL += "openssh-sftp-server"

local.conf에 들어가는 자세한 파라미터에 대한 내용은 이 파일을 확인하세요 

#{yoctodir}./sources/poky/meta/conf/documentation.conf
이 링크를 사용하셔도 됩니다. 

타겟 보드에 설치되는 gcc 버전을 변경하고 싶다면 위해 추가적으로 해야 할 일이 또 있습니다. (yocto를 통해 arm 보드에 gcc 버전을 변경하는 방법입니다.)
TCMODE 를 변경해줘야 합니다. TCMODE는 아래에 폴더에 있는 파일을 선택하는 명령입니다.
$ls ./sources/poky/meta/conf/distro/include/ 

예) linaro 버전의 gcc를 사용할 때 예 
local.conf 및 tcmode-external-linaro.inc 의 예제 (클릭하면 확대되요) 
생성 내용은 이 링크를 참조하세요 
local.conf 파일은 아래와 비슷한 구성을 하고 있을 것입니다.

MACHINE ??= 'imx6qsabresd'
DISTRO ?= 'poky'
PACKAGE_CLASSES ?= "package_rpm"
EXTRA_IMAGE_FEATURES = "debug-tweaks"
USER_CLASSES ?= "buildstats image-mklibs image-prelink"
PATCHRESOLVE = "noop"
BB_DISKMON_DIRS = "\
      STOPTASKS,${TMPDIR},1G,100K \
      STOPTASKS,${DL_DIR},1G,100K \
      STOPTASKS,${SSTATE_DIR},1G,100K \
      ABORT,${TMPDIR},100M,1K \
      ABORT,${DL_DIR},100M,1K \
      ABORT,${SSTATE_DIR},100M,1K"
CONF_VERSION = "1"

BB_NUMBER_THREADS = '2'
PARALLEL_MAKE = '-j 2'

DL_DIR ?= "${BSPDIR}/downloads/"
ACCEPT_FSL_EULA = "1"

MACHINE 부분의 'imx6qsabresd' 를 자신이 사용하는 보드 이름으로 변경하세요. 지원되는 보드의 목록은 아래 명령을 사용하면 확인할 수 있습니다.
※늘곰씨는 $ source setup-environment build_imx6solo 를 통해 빌드 루트를 생성하였고, MACHINE 을 imx6solosabresd 보드로 변경하였습니다. 하지만 이미지 생성의 문제인지 부팅이 되지 않는 상태에 빠졌고, imx6qsabresd 를 사용해서 해결되었습니다. mcimx6q-sdb 제품의 이미지는 imx6solo가 아닌 imx6qsabresd 입니다. 



$ ls ../sources/meta-fsl-arm/conf/machine/*.conf -l
-rw-rw-r-- 1 thkim thkim 539 Jan 17 14:39 ../sources/meta-fsl-arm/conf/machine/imx23evk.conf
-rw-rw-r-- 1 thkim thkim 2440 Jan 17 14:39 ../sources/meta-fsl-arm/conf/machine/imx28evk.conf
-rw-rw-r-- 1 thkim thkim 667 Jan 17 14:39 ../sources/meta-fsl-arm/conf/machine/imx31pdk.conf
-rw-rw-r-- 1 thkim thkim 603 Jan 17 14:39 ../sources/meta-fsl-arm/conf/machine/imx35pdk.conf
-rw-rw-r-- 1 thkim thkim 333 Jan 17 14:39 ../sources/meta-fsl-arm/conf/machine/imx51evk.conf
-rw-rw-r-- 1 thkim thkim 469 Jan 17 14:39 ../sources/meta-fsl-arm/conf/machine/imx53ard.conf
-rw-rw-r-- 1 thkim thkim 460 Jan 17 14:39 ../sources/meta-fsl-arm/conf/machine/imx53qsb.conf
-rw-rw-r-- 1 thkim thkim 638 Jan 17 14:39 ../sources/meta-fsl-arm/conf/machine/imx6dlsabreauto.conf
-rw-rw-r-- 1 thkim thkim 393 Jan 17 14:39 ../sources/meta-fsl-arm/conf/machine/imx6dlsabresd.conf
-rw-rw-r-- 1 thkim thkim 533 Jan 17 14:39 ../sources/meta-fsl-arm/conf/machine/imx6qsabreauto.conf
-rw-rw-r-- 1 thkim thkim 432 Jan 17 14:39 ../sources/meta-fsl-arm/conf/machine/imx6qsabresd.conf
-rw-rw-r-- 1 thkim thkim 432 Jan 17 14:39 ../sources/meta-fsl-arm/conf/machine/imx6slevk.conf
-rw-rw-r-- 1 thkim thkim 615 Jan 17 14:39 ../sources/meta-fsl-arm/conf/machine/imx6solosabreauto.conf
-rw-rw-r-- 1 thkim thkim 468 Jan 17 14:39 ../sources/meta-fsl-arm/conf/machine/imx6solosabresd.conf
-rw-rw-r-- 1 thkim thkim 542 Jan 17 14:39 ../sources/meta-fsl-arm/conf/machine/twr-vf65gs10.conf

프리스케일 이외 지원 보드 목록
$ ls ../sources/meta-fsl-arm-extra/conf/machine/*.conf -l
-rw-rw-r-- 1 thkim thkim 155 Jan 17 14:39 ../sources/meta-fsl-arm-extra/conf/machine/cfa10036.conf
-rw-rw-r-- 1 thkim thkim 199 Jan 17 14:39 ../sources/meta-fsl-arm-extra/conf/machine/cfa10037.conf
-rw-rw-r-- 1 thkim thkim 234 Jan 17 14:39 ../sources/meta-fsl-arm-extra/conf/machine/cfa10049.conf
-rw-rw-r-- 1 thkim thkim 234 Jan 17 14:39 ../sources/meta-fsl-arm-extra/conf/machine/cfa10055.conf
-rw-rw-r-- 1 thkim thkim 229 Jan 17 14:39 ../sources/meta-fsl-arm-extra/conf/machine/cfa10056.conf
-rw-rw-r-- 1 thkim thkim 255 Jan 17 14:39 ../sources/meta-fsl-arm-extra/conf/machine/cfa10057.conf
-rw-rw-r-- 1 thkim thkim 255 Jan 17 14:39 ../sources/meta-fsl-arm-extra/conf/machine/cfa10058.conf
-rw-rw-r-- 1 thkim thkim 466 Jan 17 14:39 ../sources/meta-fsl-arm-extra/conf/machine/cgtqmx6.conf
-rw-rw-r-- 1 thkim thkim 246 Jan 17 14:39 ../sources/meta-fsl-arm-extra/conf/machine/imx233-olinuxino-
maxi.conf
-rw-rw-r-- 1 thkim thkim 190 Jan 17 14:39 ../sources/meta-fsl-arm-extra/conf/machine/imx233-olinuxino-
micro.conf
-rw-rw-r-- 1 thkim thkim 188 Jan 17 14:39 ../sources/meta-fsl-arm-extra/conf/machine/imx233-olinuxino-
mini.conf
-rw-rw-r-- 1 thkim thkim 508 Jan 17 14:39 ../sources/meta-fsl-arm-extra/conf/machine/imx6qsabrelite.conf
-rw-rw-r-- 1 thkim thkim 726 Jan 17 14:39 ../sources/meta-fsl-arm-extra/conf/machine/m28evk.conf
-rw-rw-r-- 1 thkim thkim 767 Jan 17 14:39 ../sources/meta-fsl-arm-extra/conf/machine/m53evk.conf
-rw-rw-r-- 1 thkim thkim 786 Jan 17 14:39 ../sources/meta-fsl-arm-extra/conf/machine/nitrogen6x-lite.conf
-rw-rw-r-- 1 thkim thkim 1641 Jan 17 14:39 ../sources/meta-fsl-arm-extra/conf/machine/nitrogen6x.conf
-rw-rw-r-- 1 thkim thkim 538 Jan 17 14:39 ../sources/meta-fsl-arm-extra/conf/machine/wandboard-dual.conf
-rw-rw-r-- 1 thkim thkim 529 Jan 17 14:39 ../sources/meta-fsl-arm-extra/conf/machine/wandboard-quad.conf
-rw-rw-r-- 1 thkim thkim 465 Jan 17 14:39 ../sources/meta-fsl-arm-extra/conf/machine/wandboard-solo.conf
이제 지원되는 모든 보드의 목록을 알게 되었습니다.
더 많은 지원 보드 목록을 확인하시려면 Freescale/meta-fsl-arm-extra · GitHub
또는, meta-fsl-arm : dora 릴리스 노트를 참조하세요 : Freescale 커뮤니티 BSP 릴리스 노트 1.5 문서

빌드 시작

가장 큰 용량의 이미지는 meta-fsl-demos의 fsl-image-gui 입니다. 이 이미지는 imx53과 QT4.8을 위한 X11, gstreamer, fsl codec(gstreamer에서 사용되는), unit-test, gpu, gpu 샘플(소스 코드와 함께)이 포함되어 있습니다. 그러나 이것을 빌드 하려면 영원의 시간이 걸립니다. (만약에 운이 좋고 강력한 머신을 갖고 있다면, 단 몇 시간 만에 빌드 될 것입니다.)

제 PC에서는 처음 빌드 완료까지 4,5시간이 소요되었습니다. 빌드를 이미 한번 완료했을 경우 아무것도 변경되지 않았다면 3초가 걸리며, 이미지를 제작할 때 15분이 소요될 것 입니다. (750MB의 rootfs입니다. 용량이 큰 파일을 만들수록 더 많은 시간이 소요됩니다.)

※ 늘곰씨는 core2개, 3GB메모리, 60GB 디스크를 할당한 상태에서 작업했을 경우 5시간이 소요 되었습니다. core와 cpu는 되도록 많이 할당하는 것이 작업의 속도를 높여주는 것 같습니다. 처음 코어1개를 할당했을 경우 8시간이 지나도 종료되지 않았습니다.

그 외에도 많은 이미지들이 있습니다. 이미지 확인 명령어는 아래와 같습니다.

$ find ../sources -name *image*.bb
※ bb라는 파일과 py라는 확장자의 파일이 주로 보이는데 .bb 파일이 이미지 인 것 같습니다. 약 30여종이 보입니다.
빌드 디렉터리 내에서 작업해야 합니다.
$ bitbake core-image-base
참고 (24Feb2014) : 빌드 이미지의 필수 디스크 공간은 약 18GB입니다.
※ 저는 bitbake 명령을 root 계정으로 수행할 때 알 수 없는 오류가 발생하였습니다. 검색도 되지 않는 이상한 오류가 납니다.... 그리고 처음 1기가 메모리를 할당 시 1회 메모리 초과 오류가 발생하였고, cpu/core 1개 할당시 8시간이 넘어도 완료되지 않았습니다. 그리고 40gb 하드를 할당하였는데 디스크 초과 오류가 발생했었습니다. 최종 사용되는 디스크는 18gb이지만 빌드 시 사용되는 디스크 공간은 20gb를 초과할 수 있다고 생각됩니다. 
vmware 를 사용하시고 디스크 용량 부족이 발생하셨다면 이 링크를 확인하세요 
vmware+ ubuntu 시스템 파티션 확장법(gparted 사용) ※ bitbake 명령을 통해 빌드 하던 중 시스템 오류 등으로 실패할 경우 bitbake -c clean 타겟 (현재는 core-image-base) 명령을 통해 클린 해주면 됩니다. 전 이상하게 빌드가 자주 실패해서 이 명령을 자주 사용합니다. 

댓글 없음:

댓글 쓰기