10/02/2015

IMX6 YOCTO 기본개발환경 설정

1. iMX6  개발환경 

  • OS: ubuntu-14.04.3 LTS version  (ubuntu-14.04.3-desktop-i386)
  • 개발환경: yocto project 사용 

1.1 Ubuntu 관련설정

  • Ubuntu Package 필요 설치 
Ubuntu 기반으로 기본으로 설치되어져야 하는 Package들로 관련 Manaul 참조
$ sudo apt-get install gawk wget git-core diffstat unzip texinfo gcc-multilib \
build-essential chrpath socat libsdl1.2-dev xterm

  • 추가적으로 필요한 Package (옵션)
내가 사용하기 위해서 아래 Package들 설치 
$ sudo apt-get install curl
$ sudo sudo apt-get install tree 


  • 커널설정시 문제가 발생
아래와 같이 Kernel 설정을 하려고 하는데, 문제가 발생을 할 경우 ncurse library 설치 
$ make menuconfig
 *** Unable to find the ncurses libraries or the
 *** required header files.
 *** 'make menuconfig' requires the ncurses libraries.
 *** 
 *** Install ncurses (ncurses-devel) and try again.

보통기본으로 설치되어있는데, 흐음 
$ sudo apt-get install libncurses5-dev 


Yocto 의 Quick Gude
만약 다른 OS라면, 아래 사이트 혹은 iMX6의 문서를 참고해서  환경설정하자
    http://www.yoctoproject.org/docs/1.8/yocto-project-qs/yocto-project-qs.html


1.2 git 와 repo 설정 

Yocto는 Git 과 repo 기반으로 동작하기 때문에 GIT과 Repo 기반으로 Download 및 관련설정을 해주자.

  • git 설정 
$ git config --global user.name "JeonghunLee" 
$ git config --global user.email "xxx@xxxxx" 
$ git config --list 

  • repo 설정(Git Control)
$ mkdir ~/bin
$ curl http://commondatastorage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
$ vi ~/.bashrc    // add following setting 
          PATH=$PATH:~/bin
$ chmod a+x ~/bin/repo



2. IMX6 Yocto 개발관련 문서 

아래의 사이트에서 Yocto 기반으로 BSP를 설치하는 문서가 존재하며, 각각의 BSP Porting 및 관련사항의 문서를 볼 수 있다.
Yocto의 경우 가장먼저 Chip vendor사의 Manual 부터 반드시 확인하고, 관련사항을 점검하도록하자. 
현재 Freescale의 i.MX6는 Yocto 기반으로 Release Version 과 Community Version을 제공하고 있으며 관련부분을 설치하고 진행하자
두 Version의 차이는 일단 공식 Release version 과 Community Version의 차이는 공식 버전과 개발버전의 차이 인것 같다.


Yocto를  Download 위치 와 setup 설정방법 차이가 존재하지만 사용방법은 거의 동일하다
각 두가지 버전을 설치진행을 해보도록하자 


2.1 Yocto release version 설치  

i.MX6의 Release Version으로 설치진행 및 확인 

  • i.MX6 개발문서 
  1. fsl-yocto-3.10.17_1.0.0.tar.gz
  2. fsl-yocto-3.14.28-1.0.0.tar.gz

상위 파일안에, Freescale_Yocto_Project_User's_Guide 문서에  사용방법이 잘 서술이 되어있으며,
아래와 같이 QT를 이용한 빌드방법도 소개하고 있으나, 현재 이방법으로 하지 않는다.

문서의 예제 5.6.2 FB image on i.MX 6Quad SABRE-AI
  • Release  sources download 
$ mkdir fsl-release-bsp   //release version 이 아님 

$ repo init -u git://git.freescale.com/imx/fsl-arm-yocto-bsp.git -b imx-3.10.53-1.1.0_ga

$ repo sync 


  • Yocto 개발설정 (release 용)
bitbake가 동작되지 않을 경우 재 설정을 해주자
MACHINE에 본인의 Reference Board의 를 설정하고 아래와 같이 build directory를 생성

$ MACHINE=imx6qsabreauto source fsl-setup-release.sh –b build-fb –e fb  
// build-fb directory 생성되며 conf/local.conf 생성 후 자동으로 이 위치로 이동  


  • 본인이 원하는 배포버전으로 빌드진행  
$ bitbake fsl-image-qt5  // QT5지원가능 
// build 가 진행되면서 각각의 소스를 download를 하며 build를 진행
or 
$ bitbake core-image-base
// 기존으로 QT5가 포함 빼고자 하면 fsl-image-gui로 진행 (This builds QT5 on a frame buffer backend) To build without QT5, use image recipe fsl-image-gui.


  • bitbake로 빌드 후 이미지 확인 (uboot/kernel/rootfs)
최종 Image가 상위 MACHINE과 이름이 동일하게 생성 
./build/tmp/deploy/images/machine/imx6qsabreauto


2.2 Yocto community version 설치 

Release Version과 거의 동일하며, 어려움이 없이 쉽게 가능하다. 

  • Community sources download 
$ mkdir fsl-community-bsp   //release version 이 아님 

$ cd fsl-community-bsp

$ repo init -u https://github.com/Freescale/fsl-community-bsp-platform -b master  //(master can be fido or master-next for newer one)

$ repo sync


  • Yocto 개발설정  (community) 
bitbake 관련 명령어가 동작되지 않을 경우 아래와 같이 재설정
$ source setup-environment build  //build directory 생성이 되며 기본 설정인 conf/local.conf 설정 

  • build/conf/local.conf 설정  
$ pwd  
/home/jhlee/IMX6/fsl-community-bsp/build 

$ vi conf/local.conf
MACHINE ??= 'imx6qsabreauto'
DISTRO ?= 'poky'
PACKAGE_CLASSES ?= "package_rpm"

#### modified ################################
EXTRA_IMAGE_FEATURES = "debug-tweaks ssh-server-openssh tools-sdk"

IMAGE_INSTALL_append += " icu directfb"
DISTRO_FEATURES_remove = "x11 wayland"
DISTRO_FEATURES_append = " directfb"
#### end of modified ##########################

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 \
    STOPTASKS,/tmp,100M,100K \
    ABORT,${TMPDIR},100M,1K \
    ABORT,${DL_DIR},100M,1K \
    ABORT,${SSTATE_DIR},100M,1K \
    ABORT,/tmp,10M,1K"
PACKAGECONFIG_append_pn-qemu-native = " sdl"
PACKAGECONFIG_append_pn-nativesdk-qemu = " sdl"
ASSUME_PROVIDED += "libsdl-native"
CONF_VERSION = "1"

BB_NUMBER_THREADS = '4'        // BITBAKE THREAD 수 
PARALLEL_MAKE = '-j 4'              // Make 동작시 패러럴 옵션      4x4 = 16 

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

#OE_TERMINAL = "screen"           // ssh창에서 menuconfig위해 추가했으나 별효과가 없음 


  • 본인이 원하는 배포버전으로 빌드진행 
각 빌드시간마다 상당한 시간이 걸리며, 내 PC에서 5시간 이상걸리는 것 같다.
한번 확인하기가 너무 오래걸리며, 인내하고 참자.

$ bitbake qt4e-demo-image (or core-image-base)    
$ bitbake meta-toolchain-qte (for toolchain sdk)

  • bitbake로 빌드 후 이미지 확인 (uboot/kernel/rootfs)
./build/tmp/deploy/images/machine/imx6qsabreauto


  • 각 디렉토리 를  트리구조 확인하여 분석 
상위에서 설치한 tree package로 각 구조를 File 구조 및 관련사항을 파악
$ tree -d -L 2 -A


3. bitbake 이외 명령어들 확인 

yocto setup을 진행한 후 bitbake는 사용가능하며, 이외에도 아래와 같은 bitbake 관련명령어들이 존재하므로 각각 실행해보자

$ bitbake-layers show-layers  // Layer 구성을 보여준다 

layer                 path                                      priority
==========================================================================
meta                  /home/jhlee/IMX6/fsl-community-bsp/sources/poky/meta  5
meta-yocto            /home/jhlee/IMX6/fsl-community-bsp/sources/poky/meta-yocto  5
meta-oe               /home/jhlee/IMX6/fsl-community-bsp/sources/meta-openembedded/meta-oe  6
meta-multimedia       /home/jhlee/IMX6/fsl-community-bsp/sources/meta-openembedded/meta-multimedia  6
meta-fsl-arm          /home/jhlee/IMX6/fsl-community-bsp/sources/meta-fsl-arm  5
meta-fsl-arm-extra    /home/jhlee/IMX6/fsl-community-bsp/sources/meta-fsl-arm-extra  4
meta-fsl-demos        /home/jhlee/IMX6/fsl-community-bsp/sources/meta-fsl-demos  4

$ bitbake-layers show-recipes  // bitbake의 recipes들을 보여준다. 

// release or community version으로 setup을 하면 build directory 생성과 함께 build/conf/local.conf 와 build/conf/bblayers.conf 생성됨  
// 다만 release 와 comminity 가 setup하는 방법은 다름 

$ vi conf/bblayers.conf   // 상위의 show-layers 부분을 확인 
BBLAYERS = " \
  ${BSPDIR}/sources/poky/meta \
  ${BSPDIR}/sources/poky/meta-yocto \
  \
  ${BSPDIR}/sources/meta-openembedded/meta-oe \
  ${BSPDIR}/sources/meta-openembedded/meta-multimedia \
  \
  ${BSPDIR}/sources/meta-fsl-arm \
  ${BSPDIR}/sources/meta-fsl-arm-extra \
  ${BSPDIR}/sources/meta-fsl-demos \

Freescale의 p1020rdb 예제로 참고만하자
  http://forum.falinux.com/zbxe/index.php?document_srl=828316&mid=lecture_tip