본문 바로가기
Linux

Yocto QEMU 빌드하기

by Embedded.AI 2024. 12. 4.
반응형

Yocto Project는 임베디드 리눅스 시스템을 위한 맞춤형 배포판을 만들 수 있는 오픈소스 도구입니다. 마치 레고 블록을 조립하듯이, 필요한 소프트웨어 구성 요소들을 선택하고 조합하여 자신만의 리눅스 배포판을 만들 수 있습니다. 특히 임베디드 개발자들 사이에서 널리 사용되며, 라즈베리 파이나 다양한 임베디드 보드를 위한 리눅스 시스템을 구축하는 데 활용됩니다.

Yocto QEMU 빌드하기

이 가이드에서는 Yocto Project를 사용하여 QEMU 가상머신에서 실행할 수 있는 최소 리눅스 이미지를 만들어보겠습니다. QEMU는 하드웨어를 가상화하는 도구로, 실제 임베디드 보드 없이도 개발한 시스템을 테스트할 수 있게 해줍니다. Ubuntu 환경에서 Yocto 이미지를 빌드하고 QEMU에서 실행하는 전체 과정을 단계별로 설명합니다.

Yocto QEMU 빌드하기

1. 사전 준비사항

먼저 Yocto 빌드와 QEMU 실행에 필요한 패키지들을 설치합니다:

sudo apt update
sudo apt install gawk wget git-core diffstat unzip texinfo gcc-multilib \
build-essential chrpath socat cpio python3 python3-pip python3-pexpect \
xz-utils debianutils iputils-ping libsdl1.2-dev xterm qemu-system-x86

2. Yocto 이미지 빌드하기

빌드 환경 설정

Yocto 빌드 디렉토리로 이동하여 환경을 설정합니다.

cd ~/yocto/poky
source oe-init-build-env

 

Poky는 Yocto Project의 레퍼런스 배포판으로, 빌드 시스템인 BitBake와 메타데이터 파일들을 포함하고 있습니다. source oe-init-build-env 명령어를 실행하면 BitBake 환경변수들이 설정되고 build 디렉토리가 자동으로 생성되며, 이 디렉토리에는 로컬 설정 파일과 빌드된 패키지들이 저장됩니다.

최소 이미지 빌드

BitBake는 Yocto Project의 빌드 엔진으로, 레시피(recipe)라고 불리는 작업 명세를 읽어 소스 다운로드, 컴파일, 패키징 등의 작업을 자동으로 수행합니다. bitbake 명령어를 사용하여 최소 이미지를 생성합니다.

bitbake core-image-minimal

 

core-image-minimal은 부팅 가능한 가장 기본적인 리눅스 시스템을 생성하는 레시피로, 패키지 관리자와 필수 시스템 유틸리티만을 포함합니다. 이 빌드 과정은 시스템 사양에 따라 보통 1-2시간 정도 소요될 수 있습니다. 빌드가 완료되면 다음 경로에 이미지 파일들이 생성됩니다.

 

~/yocto/poky/build/tmp/deploy/images/qemux86-64/

3. 생성된 이미지 파일

빌드가 완료되면 ~/yocto/poky/build/tmp/deploy/images/qemux86-64/에 다음과 같은 주요 파일들이 생성됩니다.

1. 커널 이미지: bzImage

Linux 커널의 실행 가능한 압축 이미지입니다. 시스템 부팅 시 가장 먼저 메모리에 로드되어 하드웨어를 초기화하고 운영체제의 핵심 기능을 제공합니다.

2. 루트 파일시스템: core-image-minimal-qemux86-64.ext4

ext4 형식으로 포맷된 루트 파일시스템으로, 기본적인 리눅스 디렉토리 구조와 필수 시스템 파일들이 포함되어 있습니다. 이 파일시스템이 실제 운영체제의 기반이 됩니다.

3. 기타 파일들:

  1. core-image-minimal-qemux86-64.manifest: 이미지에 설치된 모든 패키지의 목록과 버전 정보를 포함하는 파일입니다.
  2. core-image-minimal-qemux86-64.tar.bz2: 루트 파일시스템을 tar 형식으로 압축한 파일로, 다른 시스템으로 쉽게 전송하거나 백업용으로 사용할 수 있습니다.
  3. modules-qemux86-64.tgz: 커널 모듈들을 모아둔 압축 파일로, 필요한 하드웨어 지원을 위한 추가 드라이버들이 포함되어 있습니다.

4. QEMU에서 이미지 실행하기

runqemu 스크립트 사용

가장 간단한 방법은 Yocto에서 제공하는 runqemu 스크립트를 사용하는 것입니다:

runqemu qemux86-64

 

runqemu는 Yocto Project에서 제공하는 편리한 래퍼(wrapper) 스크립트로, QEMU 실행에 필요한 복잡한 옵션들을 자동으로 설정해줍니다. qemux86-64 매개변수는 64비트 x86 아키텍처를 에뮬레이션하도록 지정하며, 이 명령어를 실행하면 자동으로 앞서 빌드한 커널 이미지와 루트 파일시스템을 찾아서 부팅을 시작합니다.

콘솔 모드로 실행

그래픽 인터페이스 없이 콘솔 모드로 실행하려면 nogrpaphic 옵션을 추가합니다. nographic 옵션은 QEMU의 그래픽 창을 비활성화하고 현재 터미널에서 직접 시리얼 콘솔로 연결합니다. 이 방식은 서버 환경이나 원격 접속 상황에서 특히 유용하며, 시스템 리소스도 덜 사용하기 때문에 가상머신의 성능이 더 좋아질 수 있습니다.

runqemu qemux86-64 nographic

수동으로 QEMU 실행

runqemu 대신 QEMU를 직접 실행할 수도 있습니다.

qemu-system-x86_64 \
    -kernel ~/yocto/poky/build/tmp/deploy/images/qemux86-64/bzImage \
    -drive file=~/yocto/poky/build/tmp/deploy/images/qemux86-64/core-image-minimal-qemux86-64.ext4,format=raw \
    -append "root=/dev/sda rw console=ttyS0" \
    -net nic -net user \
    -nographic

 

QEMU를 직접 실행하면 가상 머신의 세부적인 설정을 더 잘 제어할 수 있습니다. 각 옵션의 의미를 살펴보면:

  • -kernel: 부팅할 Linux 커널 이미지의 경로를 지정
  • -drive: 루트 파일시스템을 raw 형식의 디스크로 마운트
  • -append: 커널에 전달할 부팅 파라미터를 설정 (root=/dev/sda는 루트 파일시스템의 위치, rw는 읽기/쓰기 모드, console=ttyS0는 시리얼 콘솔 활성화)
  • -net nic -net user: 가상 네트워크 인터페이스를 생성하고 사용자 모드 네트워킹을 설정

5. 이미지 부팅 확인

QEMU가 시작되면 로그인 프롬프트가 표시됩니다. 기본 로그인 정보는 다음과 같습니다:

  • 사용자 이름: root
  • 비밀번호: 없음 (Enter 키만 누름)

아래 각 명령어의 출력 결과를 통해 다음 정보들을 확인할 수 있습니다:

# 시스템 버전 확인
cat /etc/issue
# 커널 버전 확인
uname -a
# 디스크 사용량 확인
df
  • cat /etc/issue: Poky 4.0.23 버전이 설치되어 있음을 보여줍니다. Poky는 Yocto Project의 레퍼런스 배포판입니다.
  • uname -a: Linux 커널 5.15.166 버전이 설치되어 있으며, 64비트 x86 아키텍처용으로 컴파일되었음을 알 수 있습니다.
  • df: 루트 파일시스템(/)이 약 24MB 크기이며, 그 중 84%가 사용되고 있음을 보여줍니다. 또한 devtmpfs, tmpfs 같은 가상 파일시스템들이 마운트되어 있습니다.

6. 네트워크 설정 및 테스트

QEMU에서 네트워크가 정상적으로 설정되었는지 확인하는 방법은 다음과 같습니다.

# 네트워크 인터페이스 확인
ifconfig
# 인터넷 연결 테스트
ping 8.8.8.8

 

기본적으로 eth0 인터페이스가 설정되어 있으며, NAT를 통해 호스트 시스템의 네트워크에 접속할 수 있습니다.

자주 발생하는 문제 해결

  1. runqemu 명령어를 찾을 수 경우에는 다음의 명령어를 입력합니다.
source oe-init-build-env
  1. 로케일 관련 에러가 발생하는 경우에는 다음의 명령어를 입력합니다.
sudo locale-gen en_US.UTF-8
export LANG=en_US.UTF-8
export LC_ALL=en_US.UTF-8

이제 Ubuntu 환경에서 Yocto 이미지를 빌드하고 QEMU에서 테스트할 준비가 완료되었습니다.

반응형

'Linux' 카테고리의 다른 글

ARM x86 크로스컴파일 GCC GDB 우분투 툴체인 설치하기  (0) 2025.01.11