ARM Core - 4. ARM 프로세서의 운영 모드 및 시스템 프로그래밍 (3. 부트로더 및 시스템 초기화 실습)
2025. 3. 7. 13:40ㆍ정보기술/하드웨어
3. 부트로더 및 시스템 초기화 실습: U-Boot 실습 (부트 메시지 출력)
1. U-Boot란?
U-Boot(Universal Bootloader)는 ARM 기반 임베디드 시스템에서 널리 사용되는 오픈소스 부트로더로, 운영체제가 실행되기 전에 하드웨어를 초기화하고 커널을 로드하는 역할을 한다.
U-Boot의 주요 기능
기능 | 설명 |
하드웨어 초기화 | CPU, RAM, 클럭, I/O 설정 |
부팅 모드 지원 | SD 카드, eMMC, 네트워크(TFTP) 부팅 |
커널 및 루트파일시스템 로드 | Linux 커널 및 Device Tree 로드 |
디버깅 지원 | U-Boot 콘솔을 통한 시스템 진단 |
2. U-Boot 환경 설정 및 빌드
1) 필요 패키지 설치 (Ubuntu 기준)
sudo apt update
sudo apt install gcc-arm-linux-gnueabihf make git
2) U-Boot 소스 코드 다운로드
git clone https://source.denx.de/u-boot/u-boot.git
cd u-boot
3) 최신 버전 확인 및 설정
git tag | tail -n 5 # 최신 태그 확인
git checkout v2024.04 # 최신 버전으로 체크아웃
4) 대상 보드 설정 (예: QEMU 가상 보드)
make qemu_arm_defconfig
- qemu_arm_defconfig는 QEMU(ARM 가상 보드)용 기본 설정 파일이다.
5) U-Boot 빌드
make -j$(nproc) CROSS_COMPILE=arm-linux-gnueabihf-
- CROSS_COMPILE=arm-linux-gnueabihf- → ARM 크로스 컴파일러 사용
6) 빌드 완료 후 U-Boot 실행 파일 확인
ls -l u-boot.bin
- u-boot.bin이 생성되었으면 빌드 성공
3. QEMU에서 U-Boot 실행 및 부트 메시지 출력
1) QEMU를 이용한 U-Boot 실행
qemu-system-arm -M virt -cpu cortex-a15 -nographic -kernel u-boot.bin
- -M virt → QEMU 가상 ARM 보드 사용
- -cpu cortex-a15 → Cortex-A15 프로세서 에뮬레이션
- -nographic → GUI 없이 콘솔 모드로 실행
- -kernel u-boot.bin → 빌드한 U-Boot 실행
2) 부트 메시지 확인
U-Boot가 실행되면 다음과 같은 메시지가 출력된다.
U-Boot 2024.04 (Mar 06 2025 - 12:00:00)
DRAM: 512 MiB
Flash: 64 MiB
In: serial
Out: serial
Err: serial
Net: No ethernet found.
Hit any key to stop autoboot: 0
=> _
- U-Boot 2024.04 → 최신 빌드된 U-Boot 버전 표시
- DRAM: 512 MiB → RAM 크기 확인
- Hit any key to stop autoboot → 자동 부팅을 중지하려면 키 입력 가능
- => → U-Boot 명령 프롬프트가 표시됨
4. U-Boot 명령어 실습
U-Boot는 명령어 기반 콘솔을 제공하며, 다양한 부트 관련 명령을 실행할 수 있다.
1) 현재 환경 변수 확인
printenv
- 현재 설정된 환경 변수 출력
2) 메모리 내용 확인
md 0x10000000 10
- md(memory display) 명령어로 지정된 주소(0x10000000)에서 10개의 워드 출력
3) 부팅 모드 설정
setenv bootcmd 'bootm 0x82000000'
saveenv
- setenv bootcmd → 부팅 명령을 설정
- saveenv → 변경된 설정을 저장
4) 부팅 테스트
boot
- boot 명령어를 실행하면 설정된 커널이 로드됨
5. U-Boot 부트 메시지 커스텀하기
U-Boot 실행 시 출력되는 메시지를 변경할 수도 있다.
1) board_init_f() 함수 수정
U-Boot 부트 메시지를 변경하려면 board_init_f() 함수를 수정해야 한다.
이 함수는 common/board_f.c 파일에 정의되어 있다.
소스 코드 수정 (common/board_f.c)
#include <common.h>
#include <init.h>
#include <stdio.h>
int board_init_f(ulong boot_flags) {
printf("\n*** Custom U-Boot Build: Hello from U-Boot! ***\n");
/* 기존 U-Boot 초기화 코드 */
return 0;
}
- printf("\n*** Custom U-Boot Build: Hello from U-Boot! ***\n"); 추가
- U-Boot 부팅 시 해당 메시지가 출력됨
2) 변경 후 다시 빌드 및 실행
make -j$(nproc) CROSS_COMPILE=arm-linux-gnueabihf-
qemu-system-arm -M virt -cpu cortex-a15 -nographic -kernel u-boot.bin
- 실행하면 U-Boot 부트 메시지와 함께 새로운 메시지가 출력된다.
*** Custom U-Boot Build: Hello from U-Boot! ***
U-Boot 2024.04 (Mar 06 2025 - 12:00:00)
DRAM: 512 MiB
...
6. 실습 요약
실습 단계 | 설명 |
U-Boot 다운로드 및 빌드 | 최신 버전(2024.04) 소스를 받아 크로스 컴파일 |
QEMU에서 실행 | 빌드한 U-Boot를 QEMU에서 실행 |
부트 메시지 출력 | U-Boot 실행 시 기본 부트 메시지 확인 |
U-Boot 명령어 실습 | printenv, md, boot 등의 기본 명령 실행 |
부트 메시지 커스텀 | board_init_f()를 수정하여 메시지 변경 |
7. 결론
- U-Boot는 ARM 기반의 강력한 부트로더로, 다양한 보드에서 사용 가능하다.
- QEMU를 활용하면 실제 보드 없이도 U-Boot를 실습할 수 있다.
- printenv, md, boot 등의 명령을 통해 부트 환경을 제어할 수 있다.
- 소스 코드를 수정하여 부트 메시지를 커스텀할 수 있다.
본 실습을 통해 부트로더의 동작 방식과 ARM 기반 시스템의 초기화 과정을 익힐 수 있다.
'정보기술 > 하드웨어' 카테고리의 다른 글
ARM Core - 5. ARM 기반의 OS와 임베디드 시스템 개발 (2. RTOS 활용 및 실습 가이드) (0) | 2025.03.07 |
---|---|
ARM Core - 5. ARM 기반의 OS와 임베디드 시스템 개발 (1. ARM에서 리눅스 커널 실행) (0) | 2025.03.07 |
ARM Core - 4. ARM 프로세서의 운영 모드 및 시스템 프로그래밍 (2. ARM 예외 처리 및 보안 기능 가이드) (0) | 2025.03.07 |
ARM Core - 4. ARM 프로세서의 운영 모드 및 시스템 프로그래밍 (1. ARM의 실행 모드 가이드) (0) | 2025.03.07 |
ARM Core - 3. ARM Assembly 프로그래밍 기초 (2. ARM 어셈블리 기본 명령어 및 최적화) (0) | 2025.03.07 |