U-Boot 포팅 (3. U-Boot 빌드 및 실행 / QEMU를 활용한 U-Boot 실행)

2025. 2. 26. 12:26프로그래밍/시스템

QEMU를 활용한 U-Boot 실행

QEMU는 가상 머신을 이용하여 U-Boot를 테스트할 수 있는 강력한 에뮬레이터입니다.
실제 하드웨어 없이도 U-Boot의 빌드 결과물을 실행하고 디버깅할 수 있으며, ARM 및 AArch64 등의 아키텍처를 지원합니다.

이 문서에서는 QEMU 설치, U-Boot 실행 방법, 명령어 설명 및 디버깅 방법을 다룹니다.


1. QEMU 설치 및 U-Boot 테스트 방법

🔹 QEMU란?

  • QEMU는 CPU, 메모리, 저장 장치, 네트워크 등을 에뮬레이션하는 오픈소스 가상화 소프트웨어입니다.
  • 실제 보드가 없어도 U-Boot 실행 및 부팅 테스트가 가능합니다.
  • U-Boot와 함께 리눅스 커널 테스트 및 네트워크 부팅(TFTP, NFS) 설정도 가능합니다.

🔹 QEMU 설치

1) Ubuntu/Debian 계열

sudo apt update
sudo apt install -y qemu-system-arm qemu-system-aarch64

2) CentOS/Fedora 계열

sudo dnf install -y qemu-system-arm qemu-system-aarch64

3) 설치 확인

qemu-system-arm --version
qemu-system-aarch64 --version

📌 출력 예제

QEMU emulator version 6.2.0 (Debian 1:6.2+dfsg-2ubuntu6)

2. QEMU에서 U-Boot 실행하기 (ARM 32-bit)

📌 ARM 32-bit 환경에서 U-Boot 실행

qemu-system-arm -M versatilepb -nographic -kernel u-boot.bin

🔹 명령어 설명

옵션  설명
qemu-system-arm ARM 아키텍처용 QEMU 실행
-M versatilepb VersatilePB 보드(ARM926EJ-S CPU) 에뮬레이션
-nographic GUI 없이 콘솔 모드에서 실행
-kernel u-boot.bin u-boot.bin을 커널로 실행

📌 실행 후 출력 예제

U-Boot 2024.01 (Mar 04 2025 - 10:30:00)

DRAM:  128 MiB
Flash: 16 MiB
Net:   No ethernet found.
Hit any key to stop autoboot:  0 

✅ U-Boot가 정상적으로 실행됨을 확인할 수 있습니다.
✅ Ctrl + A → X를 입력하면 QEMU를 종료할 수 있습니다.


3. QEMU에서 U-Boot 실행하기 (ARM 64-bit / AArch64)

📌 ARM 64-bit 환경에서 U-Boot 실행

qemu-system-aarch64 -M virt -nographic -bios u-boot.bin

🔹 명령어 설명

옵션  설명
qemu-system-aarch64 AArch64(ARM 64-bit)용 QEMU 실행
-M virt 가상 ARM 보드(VirtIO 기반) 사용
-nographic GUI 없이 콘솔 모드에서 실행
-bios u-boot.bin u-boot.bin을 BIOS(펌웨어)로 사용

📌 실행 후 출력 예제

U-Boot 2024.01 (Mar 04 2025 - 10:30:00)

DRAM:  512 MiB
Flash: 32 MiB
Net:   virtio-net
Hit any key to stop autoboot:  0 

✅ ARM 64-bit 환경에서도 U-Boot가 정상적으로 실행됨을 확인할 수 있습니다.


4. QEMU에서 U-Boot 디버깅하기

QEMU에서는 U-Boot 실행 중 GDB 디버깅이 가능합니다.

📌 GDB 서버 활성화 및 U-Boot 실행 (ARM 64-bit)

qemu-system-aarch64 -M virt -nographic -bios u-boot.bin -s -S

📌 GDB에서 U-Boot 디버깅

gdb-multiarch u-boot

GDB 프롬프트에서 아래 명령어 입력:

target remote :1234
b main
c

✅ main 함수에서 중단점 설정 후 실행을 확인할 수 있습니다.


📌 정리

QEMU를 설치하여 ARM 및 AArch64 환경에서 U-Boot 실행 가능
qemu-system-arm / qemu-system-aarch64를 사용하여 보드 에뮬레이션
ARM 32-bit: -M versatilepb / ARM 64-bit: -M virt 사용
GDB를 활용하여 U-Boot 디버깅 가능 (-s -S 옵션 사용)