페이지

Monday, March 30, 2015

[2015년 상반기] [Raspberry Pi 2 로 임베디드 개발환경 구축하기#3] Yocto 프로젝트

들어가기전에

라즈베리파이를 구매하고 느낀건데 내가 알던 임베디드 보드와는 조금 다른 것 같다. 시리얼 케이블을 연결할수도 없고 외장 메모리 카드만을 이용해서 환경을 셋업해야 한다. 임베디드 보드 보다는 작은 PC에 가까운 느낌이다. 관련된 내용은 차차 다뤄보기로 하고 오늘은 Yocto 프로젝트에 대해서 간략히 살펴보자.

고백하자면 맨땅에 해딩하지는 않을 예정이다. 아래 책을 우선 살펴볼 예정이고 심화내용은 공식사이트나 구글링을 통해 얻어올 예정이다. 책을 얼핏 살펴봤는데 읽는데 오래 걸릴 것 같지 않고 쉽게 작성된 것 같았다.

< Yocto 프로젝트를 활용한 임베디드 리눅스 개발 >

 Yocto 프로젝트의 목적 및 제공해주는 기능은 다음과 같다.
  • 목적 : 사용자 맞춤 (임베디드) 리눅스 배포판을 쉽게 개발
  • 제공 : 오픈소스패키지, 템플릿, 인프라, 툴, 방법

 조금 더 프로그래머 식으로 표현하면 아래와 같다.


Yocto는 대부분의 내용을 자체적으로 구성하기 때문에 호스트 환경에 따른 차이가 거의 없다고 주장한다. Poky라는 Yocto 프로젝트의 레퍼런스 시스템이 존재하며 아래와 같은 다른 프로젝트들을 내부적으로 사용한다.
  • bitbake : 작업 스케쥴러
  • meta : 오픈임베디드코어 메타레이어
  • meta-yocto : Yocto 메타레이어
  • meta-yocto-bsp : Yocto BSP 메타레이어
이렇게 정리해봐야 직접해보기 전에는 아무것도 모르겠다. 내용 정리는 그만하자. Poky 레퍼런스 시스템은 기본적으로 QEMU를 지원하기 때문에 실제로 간단한 형태의 이미지를 만들어서 QEMU 위에서 구동시켜보자.

환경설정

우선 자신의 환경을 확인한다. 아래 명령으로 쉽게 확인 가능하다.

    kkangeva@kkangeva-linux:~$ lsb_release -a
    No LSB modules are available.
    Distributor ID: Ubuntu
    Description: Ubuntu 14.04.2 LTS
    Release: 14.04
    Codename: trusty

본인의 환경을 확인했으면 Poky를 설치하기 위한 최소한의 패키지들을 설치한다. HOST 환경에 따라서 설치해야하는 패키지가 조금씩 다르다. 공식 사이트를 확인해서 패키지를 설치하는 것이 가장 빠른 지름길이다. (링크)

만약 본인의 환경이 없다면 본인의 환경을 과감히 포기하는 걸 추천한다. 시작도 하기전에 힘이 빠져버릴 수도 있다. 패키지를 가져왔다면 특정 디렉토리에 poky를 가져온다. 나의 경우는 ~/project/raspberry 디렉토리에서 아래 명령을 수행했다.

    kkangeva@kkangeva-linux:~/project/raspberry$ git clone git://git.yoctoproject.org/poky

빌드하기

빌드를 위해서는 빌드에 관련된 환경변수들을 셋업해줘야 하는데 관련된 명령어들이 하나의 스크립트로 존재한다. oe-init-build-env 스크립트가 그 녀석이다. 빌드전에 꼭 수행시켜주자. 다만 주의해야할 점은 oe-init-build-env 스크립트는 디렉토리명을 인자를 받는다는 것이다. 디폴트는 build이고 다른 디렉토리명을 주면 다른 디렉토리를 기준으로 빌드환경이 구성된다.

    kkangeva@kkangeva-linux:~/project/raspberry/poky$ . oe-init-build-env

이제 GUI 빌드 프로그램이 hob을 실행할 준비가 되었다. 이미 빌드환경 등은 셋업이 되었기 때문에 hob을 통해서 빌드를 진행할 수 있다.

    kkangeva@kkangeva-linux:~/project/raspberry/poky$ hob

그럼 아래와 같은 GUI 빌드환경이 나타난다. 우리는 지금 Yocto가 어떤 녀석인지 확인만 할 예정이기 때문에 상세한 사용방법 등은 무시하고 지나간다. 아래와 같이 두 개만 설정하자.

  • Select a machine : qemuarm
  • Select an image recipe : core-image-full-cmdline


그리고 우측하단의 build image 버튼을 클릭하면 본격적으로 빌드를 시작한다. 실제로 빌드를 하게 되면 시간이 많이 걸린다. 리눅스 노트북을 통해서 빌드를 걸었는데 자기 전에 걸어놓고 아침에 확인해봤더니 빌드가 끝나지 않은 상태였다. 시간이 오래 걸리지만 패키지들만 모두 설치가 되었다면 빌드는 될 것이다.

빌드화면에서는 Build configuration이나 Issues, Log 등을 확인할 수 있다. Build configuration을 첨부하니 혹시라도 문제가 있다면 비교해보자.


Log 창을 열어보면 빌드가 진행중임을 알 수 있을 것이다.


별문제가 없이 빌드가 되었으면 다음의 화면을 만난다. 이 화면을 만났다는 것은 qemuarm 시스템에서 구동되는 core-image-full-cmdline 이미지가 만들어 졌다는 것이다.


구동하기

우선 빌드된 이미지들을 찾아보자. 나의 경우 아래의 디렉토리에서 빌드된 이미지를 찾을 수 있었다. 최초에 poky를 인스톨한 디렉토리에 의존적인 부분이니 잘 찾아보자.

    ~/project/raspberry/poky/build/tmp/deploy/images/qemuarm

해당 디렉토리에 보면 커널이미지와 rootfs 이미지를 확인할 수 있다.


커널 이미지와 rootfs 이미지를 이용해서 QEMU를 실제로 구동시켜 보자. 명령어는 아래와 같다.

    $ runqemu qemuarm zImage-qemuarm.bin core-image-full-cmdline-qemuarm.ext4

위 명령을 치면 아래와 같이 QEMU가 구동되면서 시스템 초기화에 들어간다. 로그인 창이 나올때까지는 약간의 시간이 걸린다.


나왔다! root로 로그인해서 이것 저것 해보는 스크린샷이다. 뭐. 별로 해볼 건 없군.


여기까지 Yocto를 이용해서 QEMU에 구동되는 이미지를 만들어 봤다. 휴우... 아직 갈 길이 멀다.
2015.03.30

2 comments: