부트로더가 커널을 실행하기까지의 역할과 종류
부트로더가 하드웨어 초기화와 메모리 설정을 거쳐 커널을 적재하는 과정, GRUB·U-Boot 등 주요 부트로더의 차이를 정리한다.
2026-08-14 · 최초 발행 2025-12-25
커널이 실행되기 전의 준비 단계
부트로더는 전원이 들어온 뒤 운영체제 커널을 메모리에 올리고 실행할 수 있는 상태를 만들기까지 동작하는 소프트웨어다. BIOS/UEFI 이후에 실행되며, 하드웨어 초기화와 메모리 설정, 커널 적재를 맡는다.
보통 ROM, 플래시 메모리 또는 디스크의 부트 섹터에 위치한다. 크기는 작고 기능은 최소화되지만, 플랫폼별 하드웨어를 다뤄야 하므로 플랫폼 종속성이 크다. LILO, GRUB, BLOB, U-Boot는 각각 다른 플랫폼과 용도에 맞춰 사용된다.
전원 인가에서 커널 제어권 이전까지
부팅은 하드웨어 준비, 자동 부트, 사용자의 입력 처리, 커널 시작으로 이어진다. 부트로더는 이 흐름에서 부트 장치를 선택하고 필요한 이미지를 읽어 커널에 넘긴다.
전원과 하드웨어를 초기 상태로 맞추는 작업
| 단계 | 작업 | 담당 |
|---|---|---|
| 전원 | 전원 공급, 리셋 신호 해제 | 전원 회로 |
| POST | 하드웨어 자체 점검 | BIOS/UEFI |
| 초기화 | CPU, 메모리, 주변장치 설정 | 부트로더 |
부트로더는 CPU의 레지스터, 캐시, MMU를 설정하고, DRAM 타이밍과 크기를 감지·테스트한다. UART, 타이머, 인터럽트 컨트롤러 같은 주변장치도 이 단계에서 준비한다.
자동 부트와 부트 이미지 확인
자동 부트는 SD 카드, eMMC, NAND, NOR, 네트워크처럼 가능한 부트 디바이스를 찾는 것으로 시작한다. 부트로더 설정의 우선순위에 따라 장치를 순차적으로 시도하며, 선택된 위치에서 커널과 디바이스 트리, 램디스크를 로드한다.
Secure Boot를 사용하는 경우에는 체크섬과 디지털 서명도 확인한다.
자동 부트를 멈춘 뒤 바꿀 수 있는 값
자동 부트 중에는 스페이스바 같은 키 입력으로 진행을 중단할 수 있다. 이 경우 부트로더가 제공하는 명령 프롬프트에서 부트 파라미터, 커널 경로, 디버그 옵션을 직접 설정한다.
U-Boot> setenv bootargs console=ttyS0,115200
U-Boot> boot
메모리에 적재한 뒤 커널로 넘기는 순서
커널 파라미터는 레지스터나 메모리 영역을 통해 전달한다. 부트로더는 커널 진입점으로 점프해 제어권을 이전하고, 이후 커널이 자체 초기화와 시스템 구동을 수행한다.
부트로더가 맡는 초기화 범위
하드웨어 초기화에서는 시스템 클럭, 버스 클럭, 주변장치 클럭을 구성한다. 메모리 컨트롤러의 DRAM 타이밍, 리프레시, 주소 매핑도 설정 대상이다. 콘솔용 UART, MMC·NAND 같은 스토리지, Ethernet 네트워크와 전압 레귤레이터·전력 도메인 역시 초기화 범위에 포함된다.
메모리 측면에서는 DRAM의 지연 시간, 스큐, 임피던스를 교정하고 간단한 읽기·쓰기 테스트를 수행한다. 커널, 디바이스 트리, 램디스크가 올라갈 메모리 위치를 정하며 I-Cache와 D-Cache를 활성화한다.
커널 이미지는 플래시, SD 카드, 네트워크(TFTP), USB에서 가져올 수 있다. gzip, lzma, lzo로 압축된 커널을 해제하고 실행 주소로 재배치한 뒤, bootargs 같은 부트 인자를 전달한다.
플랫폼별로 다른 부트로더 선택
LILO (Linux Loader)
LILO는 x86 PC를 위한 전통적인 Linux 부트로더다. 구조가 단순하지만 설정을 바꾸면 재설치가 필요하고 1024 실린더 제한이 있다. 현재는 GRUB에 의해 대체됐다.
GRUB (GNU GRand Unified Bootloader)
GRUB은 GRUB Legacy와 GRUB 2 버전이 있으며 x86, x86-64, ARM, SPARC, PowerPC를 지원한다. 명령줄 기반 Shell Interface를 제공하고 ext2/3/4, FAT, NTFS 등 여러 파일 시스템을 다룬다. Windows, Linux, BSD의 멀티 부트와 모듈식 구조도 특징이다.
GRUB 메뉴는 다음과 같이 운영체제와 복구 항목을 함께 제시할 수 있다.
Ubuntu
Ubuntu (recovery mode)
Windows 10
Memory Test (memtest86+)
BLOB (Boot LOader OBject)
BLOB는 ARM 기반 임베디드 시스템용 부트로더다. GNU GPL(무제한 사용)로 제공되며, 작은 크기와 빠른 부팅, 플래시 메모리 관리, 간단한 명령 인터페이스를 특징으로 한다. 초기 ARM 개발 보드와 PDA에 사용됐다.
U-Boot (Universal Bootloader)
U-Boot는 PowerPC, ARM, MIPS, x86, RISC-V 등 여러 플랫폼을 지원하는 GPL 부트로더다. 임베디드 환경에서 가장 널리 쓰이며, 풍부한 명령어 세트와 TFTP·NFS 네트워크 부팅을 제공한다. SD, eMMC, NAND, NOR, SPI 저장 장치를 지원하고 디바이스 트리와 Falcon 모드(빠른 부팅)도 다룬다.
U-Boot에서는 환경 변수를 확인하고 부트 인자를 지정한 다음, 저장장치에서 이미지를 읽어 실행할 수 있다.
U-Boot> printenv
U-Boot> setenv bootargs console=ttyS0,115200 root=/dev/mmcblk0p2
U-Boot> mmc read 0x80000000 0x800 0x4000
U-Boot> bootm 0x80000000
| 부트로더 | 플랫폼 | 라이선스 | 주요 특징 |
|---|---|---|---|
| LILO | x86 | GPL | 전통적, 단순, 제한적 |
| GRUB | x86, ARM 등 | GPL | Shell, 멀티부트, 파일시스템 |
| BLOB | ARM | GPL | 소형, 임베디드 |
| U-Boot | ARM, PowerPC 등 | GPL | 범용, 임베디드 표준 |