Yocto는 embedded 환경에 Linux를 편리하게 적용하기위한 목적의 프로젝트로 보다 자세한 내용은 project home page인 https://www.yoctoproject.org에서 확인할 수 있다. 이 글에서는 Intel Baytrail을 사용하는 MinnowboardMAX에 Yocto linux를 올리는 과정을 설명한다.
환경설정
- Ubuntu 14.04 (64bit)
sudo apt-get install gawk wget git-core diffstat unzip texinfo gcc-multilib build-essential chrpath socat libsdl1.2-dev xterm
- 64bit firmware가 설치된 MinnowBoardMax: Firmware update에 대한 자세한 내용은 MinnowboardMax에 대한 Intel의 문서를 참조.
- Yocto build system (poky)와 Intel corei64 BSP
:2016년 현재의 최종 stable release인 Jethro branch를 받는다.- Poky build system
git clone -b jethro git://git.yoctoproject.org/poky.git
- Intel core-i7 64 BSP
git://git.yoctoproject.org/meta-intel -b jethro
- Poky build system
Build
Poky는 build system이고 meta-intel은 Intel core-i7 64를 위한 BSP이다. Poky에서 meta-intel BSP를 build할 수 있도록 약간의 수정이 필요 하다. bblayers.conf file에 meta-intel BSP를 build에 포함하도록 BBLAYERS에 추가하고, local.conf file에는 MACHINE을 intel-corei7-64로 설정해 준다.
$> cd poky poky$> source oe-init-build-env build$> echo "BBLAYERS += \"$HOME/Yocto/meta-intel\"" >> conf/bblayers.conf build$> echo "MACHINE = \"intel-corei7-64\"" >> conf/local.conf build$> bitbake core-image-sato
Flashing
Build가 완료되면 build/tmp/deploy/images/intel-corei7-64/core-image-minimal-intel-corei7-64.hddimg에 image가 만들어지는데 이것을 Yocto에서 지원하는 mkefidisk.shscript 를 이용해서 USB drive 혹은 SDcard에 flash한다.
sudo $HOME/Yocto/poky/scripts/contrib/mkefidisk.sh /dev/sdb tmp/deploy/images/intel-corei7-64/core-image-minimal-intel-corei7-64.hddimg /dev/sda
이 예제에서 사용된 /dev/sdb는 build machine에 연결된 USB drive의 경로로 device 연결 후 dmesg 혹은 mount command로 확인할 수 있고 가장 마지막에 있는 /dev/sda는 target device에서의 경로라고 하는데 명확한 내용을 찾기 힘들어서 그냥 /dev/sda로 설정했더니 별 문제는 없었다. 😉
Booting-up
Flashing한 USB drive를 연결한 상태에서 booting을 완료하면 UEFI shell로 진입하는데 다음의 command로 Yocto를 실행시킬 수 있다.
Shell> fs0: Shell> bootx64
Build 환경에 대한 정보표시
현재의 layer들 보기
$> bitbake-layers show-layers layer path priority ========================================================================== meta /home/XXX/Yocto/poky/meta 5 meta-yocto /home/XXX/Yocto/poky/meta-yocto 5 meta-yocto-bsp /home/XXX/Yocto/poky/meta-yocto-bsp 5 meta-intel /home/XXX/Yocto/meta-intel 5
Overlay된 recipe들 보기
$> bitbake-layers show-overlayed Parsing recipes..done. === Overlayed recipes === xf86-input-evdev: meta 2:2.8.2 meta-intel 2:2.6.0 xf86-input-synaptics: meta 2:1.7.3 meta 2:0.15.2+gitAUTOINC+934bc0012f meta-intel 2:1.6.3 xserver-xorg: meta 2:1.15.0 meta-intel 1:1.9.3
적용된 BB appends 보기
$> bitbake-layers show-appends Parsing recipes..done. === Appended recipes === alsa-state.bb: /home/XXX/Yocto/poky/meta-yocto-bsp/recipes-bsp/alsa-state/alsa-state.bbappend formfactor_0.0.bb: /home/XXX/Yocto/poky/meta-yocto-bsp/recipes-bsp/formfactor/formfactor_0.0.bbappend linux-yocto_3.14.bb: /home/XXX/Yocto/poky/meta-yocto-bsp/recipes-kernel/linux/linux-yocto_3.14.bbappend /home/XXX/Yocto/meta-intel/common/recipes-kernel/linux/linux-yocto_3.14.bbappend linux-yocto-rt_3.14.bb: /home/XXX/Yocto/meta-intel/common/recipes-kernel/linux/linux-yocto-rt_3.14.bbappend packagegroup-core-tools-profile.bb: /home/XXX/Yocto/poky/meta-yocto-bsp/recipes-core/packagegroups/packagegroup-core-tools-profile.bbappend psplash_git.bb: /home/XXX/Yocto/poky/meta-yocto/recipes-core/psplash/psplash_git.bbappend xserver-xf86-config_0.1.bb: /home/XXX/Yocto/poky/meta-yocto-bsp/recipes-graphics/xorg-xserver/xserver-xf86-config_0.1.bbappend linux-yocto_3.10.bb (skipped): /home/XXX/Yocto/poky/meta-yocto-bsp/recipes-kernel/linux/linux-yocto_3.10.bbappend uclibc_git.bb (skipped): /home/XXX/Yocto/poky/meta-yocto-bsp/recipes-core/uclibc/uclibc_git.bbappend linux-yocto-dev.bb (skipped): /home/XXX/Yocto/meta-intel/common/recipes-kernel/linux/linux-yocto-dev.bbappend linux-yocto_3.4.bb (skipped): /home/XXX/Yocto/poky/meta-yocto-bsp/recipes-kernel/linux/linux-yocto_3.4.bbappen
Trouble shooting
“ERROR: No recipes available for:”
예전 버전의 Yocto (daisy)에서 kernel version과 다른 recipe가 포함되어 있는 경우 이와 같은 오류를 내면서 build를 멈추는 경우가 있다. 사용하지 않는 버전의 bbappend file을 삭제하고 재시도 해본다. 예를들어 Daisy version에서는 kernel version 3.14가 사용되는데, 3.10에 대한 bbappend file이 있으면 이런 문제가 생긴다. 이 떄는 다음과 같이 3.10에 해당하는 file들을 삭제한다.
$> rm yocto_i7_64/meta-intel/common/recipes-kernel/linux/linux-yocto_3.10.bbappend yocto_i7_64/meta-intel/common/recipes-kernel/linux/linux-yocto-rt_3.10.bbappend
“ERROR: Fetcher failure: Unable to find revision XXX in branch YYY even from upstream”
Git fetching에 실패하는 경우인데, git에 관련한 설정이 올바르게 되어 있는 경우에도 이 문제가 생기고 있는것이라면 사용중인 BSP와 Poky의 version이 맞는지 다시한번 확인해 보자. Poky build system과 BSP의 version이 맞지 않는 경우에 특정 commit ID를 찾지 못해서 이러한 문제가 생기기도 한다.
... ERROR: Function failed: Fetcher failure for URL: 'git://git.yoctoproject.org/yocto-kernel-cache;type=kmeta;name=meta;branch=yocto-3.14;destsuffix=kernel-meta'. Unable to fetch URL from any source. ERROR: Logfile of failure stored in: /home/XXX/Yocto/poky-jethro-14.0.0/build/tmp/work/corei7-64-intel-common-poky-linux/linux-yocto/3.14.4+gitAUTOINC+62f236c734_cb22733185-r0/temp/log.do_fetch.3006 NOTE: recipe linux-yocto-3.14.4+gitAUTOINC+62f236c734_cb22733185-r0: task do_fetch: Failed ERROR: Task 48 (/home/XXX/Yocto/poky-jethro-14.0.0/meta/recipes-kernel/linux/linux-yocto_3.14.bb, do_fetch) failed with exit code '1' ...
욕토로 프로젝트를 진행중인데 많은 도움이 되었습니다.
그런데 하다가 궁금한게 잇어서 질문 드립니다.
work/meta-openembedded/meta-oe/recipes-support/portaudio/portaudio-v19_svn.bb 이 존재하고,
BBLAYERS?= ${TOPDIR}/../meta-openembedded/meta-oe
해주었는데도 portaudio가 생성되지 않습니다. 이유를 알 수 있을까요?
혹시, DEPEND (static link 되는 경우) 나 RDEPEND (동적 링크되는 경우) 로 build target 과 portaudio 가 종속성 관계로 연결되었나요 ? build target 으로 직접 portaudio 를 지정하면 생성은 됩니다만, 최종 이미지와 연결되려면 종속성 관계로 연결되어야 할텐데요. ^^
답변 감사합니다.
종속성 관계로 연결되어 있다는 말이 무슨 말인지 잘 모르겠습니다…