[Yocto Project] Quick Build + 패키지 추가하기

문연수·2021년 8월 15일
3

Embedded Linux

목록 보기
2/4
post-thumbnail

이 글은 Yocto Project Quick Build 페이지를 번역하고 그 내용을 다듬어 작성한 것이다. 원문이 궁금하다면 아래의 출처 를 통해 그 내용을 확인하길 바란다. 이 짧은 글은 Yocto Project 를 통해 LinuxARM64 아키텍쳐로 빌드한 후, QEMU 를 통해 실행하는 방법을 서술한다.

1. 호스트 개발 환경 설정

지원되는 리눅스 배포판

글을 쓰는 현 시점 기준(Aug 15, 21) 으로 Yocto Project 는 아래의 배포판을 지원한다.

  • Ubuntu 16.04 (LTS)
  • Ubuntu 18.04 (LTS)
  • Ubuntu 20.04 (LTS)
  • Fedora 30
  • Fedora 31
  • Fedora 32
  • CentOS 7.X
  • CentOS 8.X
  • Debian GNU/Linux 8.x (Jessie)
  • Debian GNU/Linux 9.x (stretch)
  • Debian GNU/Linux 10x (Buster)
  • openSUSE Leap 15.1

위 목록은 언제든지 바뀔 수 있으므로 공식 홈페이지를 통해 확인하길 바란다. WSL2 도 지원하긴 하지만 공식은 아니다.

호스트 요구 사항

  • 50 Gbyte 이상의 디스크 여유 공간
  • 지원되는 리눅스 배포판 (전술한 배포판 목록)
  • 프로그램의 버전 요구사항:
    - Git 버전 1.8.3.1 혹은 그 이상
    - tar 버전 1.28 혹은 그 이상
    - Python 3.6.0 혹은 그 이상
    - gcc 버전 5.0 혹은 그 이상

다음의 요구사항 역시 언제든 변할 수 있으므로 빌드 호스트 요구 사항 페이지를 확인하길 바란다.

추가 사항

공식 홈페이지 요구 사항에 쓰여있진 않지만, RAM8 GiB 미만이면 커널 빌드 중 프로세스가 죽어버리므로 반드시 8 GiB 이상의 가상 메모리 사용이 가능한 호스트에서 빌드하길 바란다.

빌드 호스트 패키지 목록

아래의 패키지는 빌드 호스트에 반드시 설치 되어야 한다:

sudo apt-get install gawk wget git diffstat unzip texinfo gcc build-essential chrpath socat cpio python3 python3-pip python3-pexpect xz-utils debianutils iputils-ping python3-git python3-jinja2 libegl1-mesa libsdl1.2-dev pylint3 xterm python3-subunit mesa-common-dev

패키지 매니저와 패키지명은 배포판마다 다를 수 있고, 시간이 지남에 따라 바뀔 수 있으므로 이 역시 공식 문서를 참조하길 바란다.

2. poky 저장소 복제하기

git clone git://git.yoctoproject.org/poky

위 명령어를 입력해서 poky 저장소를 복제한다. 복제가 끝났다면 아래의 명령어를 입력하여 hardknott 브랜치로 갈아탄다. 현 시점으로 가장 최신 릴리즈는 hardknott 다. 자세한 사항은 릴리즈 정보를 확인하길 바란다.

git checkout -t origin/hardknott -b my-hardknott
git pull

3. 빌드 옵션 설정하기

cd poky
source oe-init-build-env

위 명령어를 입력하여 환경설정 스크립트를 실행한다. 그럼 Yocto Project 의 빌드 환경은 독자의 빌드 환경이 등록된다.

설정 파일은 build/conf/local.conf 이다. 이 파일을 통해 다양한 빌드 옵션 설정이 가능하다. 필자는 그 중에서 게스트 OS 의 아키텍쳐, 미러 서버 등록, 그리고 추가적인 패키지 설치를 설정할 것이다.

Guest OS 아키텍쳐 변경

MACHINE ??= "qemuarm64"

MACHINE 을 검색해서 위와 같이 qemuarm64 로 변경한다. 필자는 ARM64 로 진행할 예정이지만, 다른걸로 바꿔도 괜찮다. 장치가 달라져도 Yocto Project 가 자동으로 크로스 컴파일해준다.

추가 패키지 설치

CORE_IMAGE_EXTRA_INSTALL += "strace"
CORE_IMAGE_EXTRA_INSTALL += "gdb"

필자는 다음의 두 패키지를 추가로 설치할 것이다. 필요한 패키지가 있다면 필자가 작성한 것처럼, 더 적어 내려가면 된다.

패키지 빌드 옵션 설정

gdb 패키지는 TUI 모드로 빌드된 패키지가 아니라서 layout 명령어를 사용할 수가 없다. 따라서 gdb 프로그램 빌드 시 layout 명령어가 사용 가능하도록 빌드 옵션을 변경할 것이다.

meta/recipes-devtools/gdb/gdb-common.inc 파일을 열어서 PACKAGECONFIG[tui] 옵션의 값을 다음과 같이 변경한다:

PACKAGECONFIG[tui] = "--enable-tui"

미러 서버 등록

미러 서버는 패치 실패를 막아주고, 빌드 속도를 아주 약간 상승시킬 수 있다. 아래의 내용을 build/conf/local.conf 파일에 기입하면 된다:

SSTATE_MIRRORS = "\
file://.* http://sstate.yoctoproject.org/dev/PATH;downloadfilename=PATH \n \
file://.* http://sstate.yoctoproject.org/3.2.4/PATH;downloadfilename=PATH \n \
file://.* http://sstate.yoctoproject.org/3.3.2/PATH;downloadfilename=PATH \n \
"

미러 서버 주소는 언제든 바뀔 수 있으므로 공식 홈페이지를 확인하길 바란다.

4. 빌드하기

빌드는 아래의 명령어를 입력하여 진행할 수 있다:

bitbake core-image-kernel-dev

core-image-kernel-dev 는 커널 스터디 용도로 사용 가능한 이미지라고 하는데 솔직히 무슨 차이가 있는지는 모르겠다. core-image-sato 의 경우 용량이 엄청 큰 GUI 환경을 제공하고 core-image-minimal 은 딱 부팅만 가능한 저용량 이미지이다. 자세한 정보는 Yocto Project 의 공식 이미지를 확인하길 바란다.

빌드에는 매우 매우 오랜 시간(대략 4 시간)이 걸리므로 다른 작업을 하길 바란다.

5. QEMU 실행하기

빌드가 끝났다면 아래의 명령어를 입력하여 가상 환경에서 임베디드 리눅스를 실행해볼 수 있다:

runqemu qemuarm64 nographic

nographic 옵션이 들어가면 해당 콘솔창을 소유한 상태로 실행되고, 없다면 새로운 창이 하나 열리고 그 위에서 실행된다. CLI 환경에선 반드시 nographic 옵션으로 실행해야 한다.

정상적으로 실행 되었다면 아래와 같이 qemuarm64 login: 이 프롬프트된다. 사용자 명으로 root 를 입력하면 비밀번호 입력없이 바로 진입 가능하다.

출처

[사이트] https://docs.yoctoproject.org/brief-yoctoprojectqs/index.html#welcome
[사이트] https://wavy00.blogspot.com/2016/11/yocto-qemu-arm-64bit.html
[사이트] http://git.yoctoproject.org/cgit.cgi/poky/tree/meta/recipes-devtools/gdb/gdb-common.inc?id=84c5aacaddb7174cc279efedf72c8aed0627437d
[이미지] https://www.slideshare.net/rossburton/why-you-should-use-the-yocto-project

profile
2000.11.30

0개의 댓글