Yocto 프로젝트에서 빌드한 이미지를 실제 하드웨어에 플래싱하거나 배포하기에 앞서, 개발자나 엔지니어들은 주로 QEMU(Quick EMUlator)를 이용하여 가상 환경에서 이미지를 테스트하고 검증한다. 이는 실제 디바이스 환경을 모방한 가상 머신 내에서 이미지를 실행하고 디버깅할 수 있도록 도와준다. 이 섹션에서는 QEMU를 사용하여 Yocto 프로젝트에서 생성된 이미지를 단계별로 테스트하는 방법을 자세히 설명한다.

QEMU 소개

QEMU는 오픈 소스 가상 머신 에뮬레이터로, 다양한 CPU 아키텍처를 지원한다. 요약하자면, QEMU는 시스템 에뮬레이션을 통해 리눅스, 바이너리 파일 및 커널 이미지를 테스트할 수 있는 환경을 제공한다.

환경 설정

Yocto 프로젝트를 시작하기 전에 아래와 같은 환경 설정이 필요하다:

  1. QEMU 설치: bash sudo apt-get install qemu
  2. Yocto 프로젝트 구성: bash source oe-init-build-env

Yocto 이미지 빌드

QEMU에서 테스트할 Yocto 이미지를 생성하기 위해서는 bitbake 명령어를 사용하여 이미지를 빌드해야 한다. 일반적인 이미지를 빌드하는 예시는 다음과 같다:

bitbake core-image-sato

이 명령어는 'core-image-sato' 라는 특정 이미지를 빌드한다. 빌드하는 동안 Yocto는 필요한 모든 패키지와 종속성을 다운로드하고 컴파일한다.

QEMU에서 이미지 실행

Yocto 이미지가 성공적으로 빌드된 후, QEMU를 사용하여 이미지를 실행할 수 있다. 아래 명령어를 실행하여 빌드된 이미지를 시작한다:

runqemu qemux86-64

위 명령어는 qemux86-64라는 타겟 머신을 사용하여 QEMU에서 이미지를 작동시킨다.

QEMU 명령줄 옵션

필요한 경우, QEMU 실행 시 다양한 옵션을 추가하여 실행 환경을 조정할 수 있다:

runqemu qemux86-64 nographic serial

네트워크 설정

QEMU에서 실행되는 이미지가 네트워크를 통해 외부와 통신할 수 있도록 설정해야 한다:

runqemu qemux86-64 slirp

QEMU 네트워크 설정을 통해 이메일, 웹 브라우저 기타 네트워크 독립적인 작업을 손쉽게 검사할 수 있다.

SSH 접속

QEMU를 통해 실행되는 가상 머신에 SSH로 접속이 가능한다. 일반적으로 다음과 같은 명령어를 사용한다:

ssh root@192.168.7.2

QEMU가 실행 중인 이미지의 IP 주소를 알고 있어야 하며, 기본적으로 root 비밀번호는 설정되어 있지 않는다.

디버깅

이미지를 디버깅하는 것은 매우 중요하다. 특히, 커널 패닉이나 시스템 충돌과 같은 문제를 해결해야 할 때 유용하다:

gdb /path/to/kernel
target remote :1234

QEMU 실행 시 QEMU를 gdb 서버로 실행할 수 있는 옵션을 지정하고, gdb를 통해 디버깅할 수 있다.

실시간 로그 확인

QEMU에서 Yocto 이미지를 실행하는 동안 발생하는 모든 로그를 실시간으로 확인할 수 있다. 이를 통해 시스템 로그, 커널 메시지 등을 모니터링하고 문제를 신속하게 파악할 수 있다:

tail -f /var/log/syslog

또는

dmesg

이러한 명령어를 사용하면 시스템 상태를 실시간으로 추적하고 필요한 조치를 취할 수 있다.

파일 시스템 조작

가상 머신에서 직접 파일 시스템을 조작할 수 있다. 이를 통해 파일을 생성, 삭제, 수정할 수 있으며, 새로운 애플리케이션을 설치하고 테스트할 수 있다:

mount /dev/sda1 /mnt
cd /mnt
umount /mnt

성능 측정

QEMU에서 실행 중인 Yocto 이미지의 성능을 측정하려면 다양한 도구를 사용할 수 있다. 대표적인 도구로는 top, htop, iotop 등이 있다:

top

또는

htop

이를 통해 시스템의 CPU 사용률, 메모리 사용량, I/O 활동 등을 추적하고 최적화할 수 있다.

이미지 수정 및 재빌드

개발 중에 이미지의 문제를 발견하면, 이미지의 루트 파일 시스템 또는 커널을 수정하고 재빌드할 필요가 있다.

이 경우, 기존의 빌드 설정을 변경하고 bitbake를 다시 실행하여 이미지를 업데이트한다:

bitbake -c clean core-image-sato
bitbake core-image-sato

이렇게 하면 이전 빌드 결과를 정리하고 새로 변경된 설정에 따라 이미지를 다시 생성하게 된다.

QEMU 세션 종료

QEMU 가상 머신을 종료하려면 다음 명령어를 사용할 수 있다:

poweroff

또는 QEMU 창을 닫아 가상 머신을 바로 종료할 수도 있다.


QEMU를 이용한 Yocto 이미지 테스트는 실제 하드웨어 없이도 다양한 환경을 신속하게 구축하고 테스트할 수 있는 강력한 방법이다. 이를 통해 Yocto 프로젝트에서 생성된 이미지를 안정적으로 배포하고, 초기 디버깅을 효과적으로 수행할 수 있다. 위의 과정과 명령어들을 통해 Yocto 이미지를 효율적으로 테스트하고, 문제를 발견하거나 수정할 수 있다.