본문 바로가기
임베디드 개발/임베디드 리눅스

QEMU (Quick Emulator)

by eteo 2026. 3. 22.
반응형

 

 

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

 

 

 
반응형