QEMU
QEMU는 Quick Emulator의 약자로, 오픈소스 머신 에뮬레이터이자 가상화 프로그램이다.
잘 알려진 VMware나 VirtualBox 같은 가상화 도구와의 가장 큰 차이점은 머신 에뮬레이션 기능이다. VMware나 VirtualBox는 호스트 PC가 Intel x86 CPU라면 가상 머신 역시 동일한 Intel x86 아키텍처로 동작해야 한다. 반면, QEMU는 호스트 시스템과 다른 아키텍처(ARM, RISC-V 등) 머신을 가상으로 에뮬레이션하고, 그 위에서 해당 아키텍처용 운영체제를 실행할 수 있다는 장점이 있다.
QEMU 가상화 방식
공식 문서에서 소개하는 QEMU의 가상화 방식은 크게 두 가지로 나뉜다.

1. System Emulation (qemu-system-*)
System Emulation은 가상의 컴퓨터 하나를 통째로 만드는 방식이다. 가상의 CPU, 메모리, 메인보드, 디스크, 네트워크 장치 등을 소프트웨어로 구현하고, 그 위에서 게스트 운영체제(OS)를 부팅한다.
시스템 에뮬레이션은 raspi3b, vexpress-a9와 같이 실제 하드웨어 설계가 정해져 있는 특정 임베디드 보드를 에뮬레이션할 수도 있고, 실물 보드를 모사하는 대신 유연한 구성을 목적으로 설계된 플랫폼인 virt 머신을 사용할 수도 있다.
(지원 머신 목록 : https://www.qemu.org/docs/master/system/targets.html)
virt 머신의 경우 사용자 필요에 따라 PCIe 디바이스나 스토리지 같은 가상 장치를 자유롭게 붙일 수 있어, 다양한 시스템 구성을 테스트하기 좋다.
2. User Mode Emulation (qemu-*-static)
User Mode Emulation은 운영체제 부팅 없이, 다른 아키텍처용으로 컴파일된 사용자 공간 프로그램을 실행하는 방식이다. 예를 들어 qemu-arm-static을 사용하면 x86 리눅스 환경에서 ARM용 실행 파일을 바로 실행할 수 있다. 이때 QEMU는 CPU 명령어를 변환하면서, 프로그램의 시스템 콜도 호스트 커널에 맞게 변환한다. (시스템 에뮬레이션과 달리 유저 모드 에뮬레이션은 Linux 전용이다.)
실행 방법은 두 가지다.
방법 1: 직접 인터프리터 지정
qemu-*-static을 인터프리터로 직접 지정해서 실행하는 방식이다.
$ qemu-arm-static ./hello_arm
방법 2: binfmt_misc 등록
✓ binfmt_misc : 실행 파일의 ELF 매직 넘버를 확인하여 해당 파일을 어떤 인터프리터로 실행할지 결정하는 커널의 규칙 테이블
배포판 저장소에서 qemu-*-static 패키지를 설치하면 해당 아키텍처에 대한 binfmt_misc 등록을 자동으로 해준다. 아래 사진과 같이 등록되어 있으면 ARM 실행 파일을 감지했을 때 커널이 자동으로 QEMU를 호출하기 때문에, 겉보기엔 호스트 아키텍처와 다른 바이너리가 바로 실행되는 듯 보인다.
$ ./hello_arm

'임베디드 개발 > 임베디드 리눅스' 카테고리의 다른 글
| 리눅스 디바이스 모델과 디바이스 드라이버의 종류 (0) | 2026.03.08 |
|---|---|
| LDD ] 시간 지연 함수 사용 시 주의점 (sleep vs delay) (0) | 2026.01.20 |
| Linux Root Filesystem 구조 (0) | 2026.01.15 |
| Linux ] sysroot란? (0) | 2026.01.10 |
| TCA9538 데이터시트 및 리눅스 드라이버 분석 (Tested on Raspberry Pi 4) (0) | 2025.04.17 |