U-Boot 포팅 (3. U-Boot 빌드 및 실행 / 빌드 결과물 분석)
2025. 2. 26. 12:26ㆍ프로그래밍/시스템
빌드 결과물 분석
U-Boot를 빌드한 후에는 다양한 실행 파일이 생성됩니다.
각 파일은 보드의 부팅 방식과 하드웨어 요구사항에 따라 사용됩니다.
이번 내용에서는 빌드 결과물의 역할과 차이점, 그리고 SPL (MLO) 필요 여부를 확인하는 방법을 설명합니다.
1. 빌드 결과물 종류 및 역할
U-Boot 빌드가 완료되면 다음과 같은 파일들이 생성됩니다.
📌 빌드된 파일 목록 확인
ls -lh u-boot*
📌 예제 출력
-rwxr-xr-x 1 user user 1.2M Mar 4 10:30 u-boot
-rw-r--r-- 1 user user 1.1M Mar 4 10:30 u-boot.bin
-rw-r--r-- 1 user user 1.1M Mar 4 10:30 u-boot.img
-rw-r--r-- 1 user user 2.3M Mar 4 10:30 u-boot.elf
-rw-r--r-- 1 user user 512K Mar 4 10:30 SPL
-rw-r--r-- 1 user user 256K Mar 4 10:30 MLO
2. u-boot.bin, u-boot.img, u-boot.elf 차이점
파일명 | 설명 |
u-boot | ELF 형식의 U-Boot 실행 파일 (디버깅용) |
u-boot.bin | 바이너리 형식의 U-Boot 실행 파일 |
u-boot.img | mkimage를 통해 헤더가 추가된 U-Boot 이미지 |
u-boot.elf | 디버깅을 위한 심볼 정보 포함 ELF 실행 파일 |
SPL | 1차 부트로더 (Secondary Program Loader) |
MLO | TI 계열 SoC에서 사용하는 SPL (BootROM에서 직접 실행) |
🔹 u-boot.bin
- RAW 바이너리 형식으로, 플래시 메모리(NAND, eMMC)에 직접 로드 가능.
- U-Boot 실행 파일이지만 부트로더 헤더 정보가 없음.
- boot.bin 형식이 요구되는 보드(예: 일부 FPGA)에서는 변환이 필요할 수 있음.
📌 사용 예제
dd if=u-boot.bin of=/dev/mmcblk0 bs=1024 seek=8
📌 u-boot.bin을 특정 보드에서 실행할 때 사용
- SD 카드, eMMC, NAND 플래시에 직접 기록 가능
🔹 u-boot.img
- 이미지 헤더가 추가된 U-Boot 실행 파일.
- mkimage를 사용하여 생성됨.
- 일부 SoC에서는 부트로더 실행을 위해 헤더가 필요함.
- bootm 명령어로 실행할 수 있음.
📌 이미지 정보 확인
mkimage -l u-boot.img
📌 출력 예제
Image Name: U-Boot
Created: Mon Mar 4 10:30:00 2025
Image Type: ARM Linux Kernel Image (uncompressed)
Data Size: 1123456 Bytes = 1.1 MB
Load Address: 0x80000000
Entry Point: 0x80000000
📌 SD 카드에 기록하는 예제
dd if=u-boot.img of=/dev/mmcblk0 bs=1024 seek=8
🔹 u-boot.elf
- 디버깅을 위한 ELF 실행 파일.
- 심볼 테이블이 포함되어 있어 GDB 디버깅 가능.
- JTAG 또는 QEMU에서 디버깅할 때 사용.
📌 디버깅 예제 (GDB 활용)
gdb-multiarch u-boot
📌 QEMU에서 실행
qemu-system-aarch64 -M virt -nographic -bios u-boot.elf
3. SPL (MLO) 필요 여부 확인
🔹 SPL (Secondary Program Loader)란?
- 일부 SoC(특히 ARM 기반)에서는 부팅 시 CPU 내부의 ROM 코드가 1차 부트로더를 실행.
- U-Boot의 크기가 커서 직접 실행할 수 없는 경우, SPL을 먼저 실행한 후 U-Boot 본체를 로드함.
📌 SPL 활성화 여부 확인
ls -lh SPL MLO
📌 예제 출력
-rw-r--r-- 1 user user 512K Mar 4 10:30 SPL
-rw-r--r-- 1 user user 256K Mar 4 10:30 MLO
📌 SPL이 필요한 대표적인 보드
SoC | 보드 예시 | 필요 여부 |
TI AM335x | BeagleBone Black | ✅ 필요 (MLO) |
Allwinner A64 | Pine64, BananaPi | ✅ 필요 (SPL) |
i.MX6, i.MX8 | NXP i.MX 시리즈 | ❌ 필요 없음 (U-Boot 직접 실행 가능) |
Raspberry Pi | BCM2711 (Raspberry Pi 4) | ❌ 필요 없음 (GPU가 부팅 과정 담당) |
📌 SPL이 필요한 경우 (예: BeagleBone Black)
dd if=MLO of=/dev/mmcblk0 bs=512 seek=1
dd if=u-boot.img of=/dev/mmcblk0 bs=512 seek=2
📌 SPL이 필요하지 않은 경우
- u-boot.bin 또는 u-boot.img만 사용하면 됨.
4. 부팅 과정에서 파일 선택 방법
타겟 보드에 따라 어떤 파일을 사용해야 하는지 결정하는 방법입니다.
보드 유형 | 부팅 파일 |
SPL 필요 없음 | u-boot.bin 또는 u-boot.img |
SPL 사용 | MLO (TI 계열), SPL + u-boot.img |
JTAG 디버깅 | u-boot.elf |
📌 정리
✅ 빌드 결과물의 차이점 이해 (u-boot.bin, u-boot.img, u-boot.elf)
✅ SPL(MLO) 사용 여부 확인 및 적용 방법 학습
✅ 보드별 부팅 파일 선택 방법 설명
✅ 디버깅 및 SD 카드/플래시 기록 방법 정리
'프로그래밍 > 시스템' 카테고리의 다른 글
U-Boot 포팅 (3. U-Boot 빌드 및 실행 / 실제 보드에서 U-Boot 실행하기) (0) | 2025.02.26 |
---|---|
U-Boot 포팅 (3. U-Boot 빌드 및 실행 / QEMU를 활용한 U-Boot 실행) (0) | 2025.02.26 |
U-Boot 포팅 (3. U-Boot 빌드 및 실행 / 기본적인 U-Boot 빌드 과정) (0) | 2025.02.26 |
U-Boot 포팅 (2. 개발 환경 구축 / 타겟 보드 선택) (0) | 2025.02.26 |
U-Boot 포팅 (2. 개발 환경 구축 / 크로스 컴파일 환경 설정) (0) | 2025.02.26 |