부트로더
- OS를 실행하기 위해 먼저 메모리에 올라와 실행되는 소프트웨어
- 하드웨어와 OS(커널)사이에서 OS를 안전하게 실행시키기 위한 소프트웨어
주요 역할
- 초기 하드웨어 설정
- CPU, 메모리, 저장장치 등 시스템 자원 준비
- OS/커널 로딩
- 운영체제 선택
- multi-boot 환경에서 여러 OS 중 하나 선택
- 진단 및 복구 지원
- 보안 및 신뢰성 확보
- secure boot을 적용해 부팅 과정 중 무결성, 서명 검증 수행
동작 흐름

- BL0, BL1은 SoC 벤더에서 담당한다
- BL2 이후는 end user에서 담당한다
1. BL0 (Boot ROM)
- 전원을 켜면 내장된 iROM 또는 Boot ROM 코드가 가장 먼저 실행된다
- 부팅 가능한 미디어를 탐색 (SD카드, 플래시 등)
- 1차 부트로더(BL1)를 SRAM에 올림
- ROM에 내장된 공개키 등으로 BL1 이미지의 서명과 무결성 검증
2. BL1 - preloader
- DRAM 등 하드웨어를 초기화
- BL2 이미지를 부팅 미디어에서 읽어옴
- BL2의 서명을 검증하고, 검증 성공 시 BL2로 제어권을 넘김
- 일반적으로 SRAM이 u-boot같은 전체 부트로더를 로드하기에 충분히 크지 않아서 필요한 단계
- SPL(Secondary Program Loader)라고도 불림
3. BL2 (U-boot, GRUB 등)
- 더 광범위한 하드웨어 초기화
- 커널을 DRAM에 올려 OS를 로딩
- 커널로 제어권을 넘김
4. Linux Kernel
secure boot
- secure boot 부트로더는 부트 이미지를 서명 및 해시값으로 검증함
서명, 검증
- SoC 벤더의 private key로 firmware, 부트로더, 커널, 드라이버 등 핵심 이미지에 출시 이전에 서명
- public key는 Boot ROM이나 firmware 등에 저장