2025. 2. 26. 12:25ㆍ프로그래밍/시스템
U-Boot란?
U-Boot(Unified Bootloader)는 임베디드 시스템에서 널리 사용되는 오픈소스 부트로더입니다.
ARM, RISC-V, PowerPC, MIPS 등의 임베디드 프로세서에서 작동하며, 운영체제(예: 리눅스, RTOS 등)를 로드하고 실행하는 역할을 수행합니다.
임베디드 시스템에서 하드웨어 초기화, 부팅 옵션 설정, 네트워크 부팅, 환경 변수 관리 등 다양한 기능을 제공하여, 사용자가 원하는 방식으로 시스템을 부팅할 수 있도록 지원합니다.
1. 부트로더의 개념 및 역할
부트로더란?
부트로더(Bootloader)는 전원이 켜졌을 때 CPU가 실행하는 첫 번째 소프트웨어입니다.
운영체제(OS)를 실행하기 전에 하드웨어를 초기화하고, 커널을 로드하는 역할을 합니다.
부트 과정 요약
1️⃣ ROM 코드 실행 (CPU 내장 BootROM 또는 Flash에서 부트로더 실행)
2️⃣ 1차 부트로더(SPL, Secondary Program Loader) 실행
3️⃣ 2차 부트로더(U-Boot 메인 바이너리) 실행
4️⃣ 운영체제(리눅스, RTOS 등) 로드 및 실행
U-Boot의 역할
✅ 하드웨어 초기화
- CPU, RAM, 클럭, 전원 관리, GPIO, 시리얼(UART), I2C, SPI 등 기본적인 장치 설정
✅ 부팅 옵션 제공 - SD 카드, eMMC, NAND, 네트워크(TFTP), USB 등 다양한 부팅 방식 지원
✅ 운영체제 커널 로드 및 실행 - 리눅스 커널 및 디바이스 트리를 메모리에 로드하고 실행
✅ 네트워크 부팅 지원 - TFTP, NFS를 통한 원격 부팅 가능
✅ 환경 변수 관리 - U-Boot 환경 변수 저장 및 부팅 설정 변경 가능
2. U-Boot의 특징과 지원하는 아키텍처
U-Boot의 특징
✔ 오픈소스 프로젝트 (GPL 라이선스)
✔ C언어 기반, 다양한 보드 및 프로세서 지원
✔ 커스터마이징 가능 (보드별 환경 설정 및 코드 수정 가능)
✔ 다양한 부트 옵션 지원 (NAND, SD, eMMC, 네트워크 부팅)
✔ 환경 변수 사용 가능 (bootcmd, bootargs 등)
✔ 네트워크 및 진단 기능 제공 (TFTP, DHCP, PXE 지원)
✔ Shell-like 인터페이스 지원 (커맨드라인에서 직접 조작 가능)
지원하는 아키텍처
U-Boot는 다양한 프로세서 아키텍처를 지원합니다.
다음과 같은 아키텍처에서 사용할 수 있습니다.
아키텍처 | 설명 |
ARM | Cortex-A/R/M 시리즈 지원 (Raspberry Pi, BeagleBone, i.MX, Allwinner, Rockchip 등) |
RISC-V | 오픈소스 ISA 기반 아키텍처 (SiFive, Kendryte 등) |
PowerPC | 기존 PowerPC 기반 임베디드 보드 지원 |
MIPS | 네트워크 라우터 등 MIPS 기반 장치 지원 |
x86 | 일부 x86 임베디드 시스템 지원 (일반 PC에서는 UEFI 사용이 일반적) |
3. U-Boot의 주요 기능
U-Boot는 단순한 부트로더가 아니라 부팅 환경을 설정하고, 다양한 기능을 제공하는 강력한 도구입니다.
아래는 주요 기능을 정리한 내용입니다.
1) 부트 스트랩(Boot Strap)
U-Boot는 전원이 켜지면 가장 먼저 실행되는 프로그램으로, 다음과 같은 기능을 수행합니다.
✔ CPU 및 RAM 초기화
✔ 클럭 및 전원 관리 설정
✔ 부트 미디어 탐색 (NAND, eMMC, SD, 네트워크 등)
✔ 1차 부트로더(SPL)에서 2차 부트로더(U-Boot)로 제어 전달
📌 예제: RAM 초기화 코드 (ARM Cortex-A)
void dram_init(void)
{
gd->ram_size = get_ram_size();
}
2) U-Boot 커맨드 (명령어)
U-Boot에는 자체적인 CLI(Command Line Interface)가 있어, 사용자가 직접 명령어를 입력하여 부팅 과정을 제어할 수 있습니다.
주요 명령어
명령어 | 설명 |
help | 사용 가능한 명령어 목록 출력 |
printenv | 환경 변수 확인 |
setenv var value | 환경 변수 설정 |
saveenv | 환경 변수 저장 |
bootm | 커널 이미지 실행 (bootm <addr>) |
tftp | TFTP 서버에서 파일 다운로드 |
dhcp | DHCP 서버로부터 IP 설정 |
fatload | FAT 파일 시스템에서 파일 로드 |
ext4load | ext4 파일 시스템에서 파일 로드 |
reset | 시스템 리셋 |
📌 예제: 환경 변수 설정 및 커널 부팅
setenv bootargs console=ttyS0,115200 root=/dev/mmcblk0p2 rw
saveenv
bootm 0x82000000
3) 네트워크 부팅 (TFTP, PXE, NFS)
U-Boot는 네트워크를 통해 원격으로 OS를 다운로드하고 실행할 수 있습니다.
✅ TFTP 부팅 (커널 이미지 다운로드 후 실행)
setenv ipaddr 192.168.1.100
setenv serverip 192.168.1.1
tftp 0x82000000 uImage
bootm 0x82000000
✅ NFS 부팅 (리눅스 루트 파일시스템 마운트)
setenv bootargs root=/dev/nfs nfsroot=192.168.1.1:/nfsroot
tftp 0x82000000 uImage
bootm 0x82000000
✅ PXE 부팅 (자동 네트워크 부팅 설정)
dhcp
pxe get
pxe boot
4) 저장 장치 관리 (NAND, SD, eMMC)
U-Boot는 다양한 저장 장치에서 커널과 파일을 로드할 수 있습니다.
✅ SD 카드에서 커널 로드
fatload mmc 0:1 0x82000000 zImage
bootz 0x82000000
✅ NAND 플래시에서 U-Boot 로드
nand read 0x82000000 0x400000 0x800000
bootm 0x82000000
✅ eMMC에서 환경 변수 저장
mmc dev 0
ext4load mmc 0:1 0x82000000 boot.scr
source 0x82000000
📌 정리
✅ U-Boot는 임베디드 시스템에서 운영체제(리눅스 등)를 로드하는 역할을 하는 부트로더이다.
✅ 부팅 과정에서 하드웨어를 초기화하고, 다양한 저장장치 및 네트워크를 통해 커널을 로드할 수 있다.
✅ ARM, RISC-V, PowerPC 등 다양한 아키텍처를 지원하며, 커스터마이징이 가능하다.
✅ CLI 명령어를 제공하여 부팅 과정 및 환경 변수를 제어할 수 있다.
✅ TFTP, PXE, SD, eMMC, NAND 등 다양한 부팅 방식을 지원한다.
'프로그래밍 > 시스템' 카테고리의 다른 글
U-Boot 포팅 (2. 개발 환경 구축 / 필요한 도구 및 패키지 설치) (0) | 2025.02.26 |
---|---|
U-Boot 포팅 (1. U-Boot 개요 및 기본 개념 / U-Boot의 구조) (0) | 2025.02.26 |
GPIO 프로그래밍 개요 - 4. GPIO 핀 모드 설정 (INPUT, OUTPUT) (0) | 2025.02.25 |
GPIO 프로그래밍 개요 - 3. 라이브러리 활용 (wiringPi, pigpio 등) (0) | 2025.02.25 |
GPIO 프로그래밍 개요 - 2. 직접 제어 방식 (sysfs 인터페이스 활용) (0) | 2025.02.25 |