Yocto는 임베디드 리눅스 개발자를 위한 오픈소스 프로젝트입니다. Yocto는 Poky라는 빌드 시스템을 이용해서 리눅스 이미지를 만들어 냅니다.
프리스케일의 PowerPC 아케텍쳐인 QorIQ 시리즈 프로세서를 사용한 p1020rdb라는 개발보드는 Yocto를 이용해서 패키지를 릴리즈합니다.
Yocto에 대해서 궁금한 사항은 프리스케일 QorIQ SDK Infocenter 또는 Yocto 공식 사이트를 이용합니다.

프리스케일 QorIQ SDK Infocenter : http://www.freescale.com/infocenter/topic/qfamily-sdk/index.html
Yocto 공식 사이트 : https://www.yoctoproject.org/

먼저 iso 이미지를 다운로드 받습니다. 다운로드 받을 수 없는 상황일 때는 제품과 함께 제공되는 DVD에서 iso파일을 복사합니다.
바로 얼마전에 1.7버전까지 릴리즈 되었지만 여기서는 1.5버전으로 설명드리겠습니다.
SDK v1.5 다운로드 링크 : http://www.freescale.com/webapp/sps/site/overview.jsp?code=QORIQSDK_1.5

1. 복사한 iso파일을 호스트 PC에서 mount합니다.
$ sudo mount -o loop QorIQ-SDK-V1.5-SOURCE-20131219-yocto.iso /mnt/cdrom

2. 루트가 아닌 일반 유저 권한으로 아래 경로에서 install 합니다.
$ /mnt/cdrom/install

3. 설치한 디렉토리로 이동합니다.
$ cd QorIQ-SDK-V1.5-20131219-yocto/

4. 아래 스크립트를 실행합니다. 이 스크립트는 호스트 PC에서 Yocto 빌드 시스템을 사용하기 위해 필요한 패키지를 설치해줍니다.
$ . /scripts/host-prepare.sh

5. 해당 머신에 맞게 poky 빌드 시스템을 세팅합니다. P1020RDB의 경우는 -m 옵션 뒤에 “p1020rdb“를 입력합니다.
호스트 PC를 재부팅하는 경우에 다시 Yocto를 사용하기 위해서는 아래 세팅을 다시해야 합니다.
$ source ./fsl-setup-poky -m p1020rdb
p1020 프로세서에 맞게 빌드 세팅이 끝나면 릴리즈 디렉토리로 이동됩니다. 그리고 가능한 패키지 빌드 옵션이 결과로 출력됩니다.

6. SDK의 설치와 머신에 맞게 빌드 세팅이 끝났다면 bitbake라는 툴로 다양한 패키지 빌드를 할 수 있습니다. 가능한 빌드 옵션은 아래와 같습니다.
fsl-image-minimal : contains basic packages to boot up a board
fsl-image-core : contains common open source packages and Freescale-specific
packages.
fsl-image-full : contains all packages in the full package list.
fsl-image-flash : contains all the user space apps needed to deploy the fsl-image-
full image to a USB stick, hard drive, or other large physical media.
fsl-image-kvm : contains guest rootfs in qemu
fsl-toolchain : the cross compiler binary package
package-name(usdpaa) : build a specific package

여기서는 fsl-image-full로 패키지 빌드를 진행합니다. fsl_image_full은 부트로더, 커널, 루트파일시스템(User space packages)이 모두 생성됩니다.
$ bitbake fsl-image-full

7. 빌드가 완료되면 아래의 경로 빌드된 패키지가 나타납니다.
build_<machine>_release/tmp/deploy/images

위에서 p1020rdb로 프로세서(머신)을 빌드 시스템을 세팅했기 때문에 최종 바이너리 경로는 build_p1020rdb_release가 됩니다. 아래는 빌드 된 패키지가 있는 경로에서 ls 출력한 화면입니다.
빌드완성.jpg
하늘색으로 표시된 파일들은 실제 파일이 아님 심볼릭 링크이므로 필요한 경우 함께 복사하는 것이 좋습니다. 여기서 fsl-iamge-full-p1020rdb-20141229053244.rootfs.tar.gz의 경우는 모든 패키지가 압축되어진 루트파일 시스템이므로 SD카드 같은 메모리에 퓨징할 경우 이 파일만 가지고도 전체 패키지 퓨징이 가능합니다

패키지 빌드가 성공적으로 되었다면 지금부터는 패키지 안에 포함된 부트로더와 커널을 수정하는 방법에 대해 설명합니다.

< 부트로더 수정 및 빌드 방법>

먼저 부트로더인 U-Boot의 경우 아래와 같이 소스를 가져와서 수정합니다.
−$ bitbake -c patch u-boot
그러면 아래 디렉토리에 소스가 생깁니다.
− $ cd tmp/work/p1020rdb-fsl_networking-linux-gnuspe/u-boot/git-r30/git

그러면 이렇게 수정 후에 U-Boot만 빌드하려면 아래와 같이 합니다.

$ bitbake -c compile -f u-boot
$ bitbake u-boot

생성된 바이너리는 마찬가지로 아래 디렉토리에 생성됩니다.
 build_<board>_release/tmp/deploy/images

 < 커널 수정 후 빌드 방법 >

일반적으로 커널의 make menuconfig를 Yocto에서도 가능합니다.  build_<board>_release 디렉토리에서 아래와 같이 입력합니다.

$ bitbake -c menuconfig virtual/kernel

만약 ssh 환경이라면 아래와 같이 local.conf파일에서 OE_TERMINAL 항목을 수정해야 제대로 커널 configuration 화면이 나타납니다. 

$ vi conf/local.conf 

라인 207줄에서 해당 주석처리를 해제하고 "screen"을 입력합니다.

로컬컨프.jpg

커널 소스는 아래와 같이 수정합니다.
$ bitbake -c patch virtual/kernel
$ cd tmp/work/p1020rdb-fsl_networking-linux-gnuspe/linux-qoriq-sdk/3.8-r11.1/git

커널만 빌드하기 위해서는 아래와 같이 입력합니다.

$ bitbake -c compile -f virtual/kernel
$ bitbake virtual/kernel

마찬가지로 커널 이미지를 아래의 deploy폴더 내에 이미지 폴더에서 찾을 수 있습니다.
build_p1020rdb_release/tmp/deploy/images/