1. 부트로더와 SoC 펌웨어
부트로더의 의미
- 임베디드 시스템의 전원을 켠 후 가장 먼저 실행되는 소프트웨어
부트로더의 기능
- 하드웨어 초기화
- CPU, 메모리 컨트롤러, DRAM, 전원 관리 장치 등 핵심 하드웨어 컴포넌트를 설정하고 초기화
- 운영체제 및 설정 파일 로딩
- 플래시 메모리와 같은 내부 저장소에서 운영체제(OS) 커널과 필요한 설정 파일을 로드
- 보안 부팅(Secure Boot)
- 코드 서명
- OS, 애플리케이션, 신뢰할 수 있는 펌웨어(Trusted Firmware)의 디지털 서명을 검증하여 무결성을 보장
- 변조 방지
- OEM(Original Equipment Manufacturer) 서명된 소프트웨어만 실행하도록 하여 시스템 변조나 해킹을 방지
- 인가된 소프트웨어만 실행하도록 하여 시스템의 보안을 유지
- 다운그레이드 방지
- 이전 버전 소프트웨어로의 다운그레이드를 막아 보안 취약점을 이용한 공격을 방어
- 보안 키 보관
- 암호화 및 인증에 사용되는 보안 키를 안전하게 보관하는 것이 중요
- 키는 TPM(Trusted Platform Module)이나 HSM(Hardware Security Module)과 같은 보안 하드웨어에 저장되어 외부 공격으로부터 보호
2. x86 플랫폼 부트로더 vs 임베디드 시스템 부트로더
x86 플랫폼 부트로더
- x86 플랫폼은 일반적으로 PC나 서버와 같이 풍부한 하드웨어 리소스를 가진 시스템에서 사용
- UEFI(Unified Extensible Firmware Interface)
- 개념
- 모듈식 접근 방식을 사용하여 펌웨어를 설계하는 현대적인 BIOS 대체 기술
- 의미
- 펌웨어와 운영체제 간의 인터페이스를 현대화하고 확장
- 정보 교환
- 운영체제와 펌웨어 간의 효율적인 정보 교환을 가능
- EFI 시스템 파티션(ESP) 및 EFI 바이너리 로딩
- ESP
- 부트로더 및 관련 파일 저장을 위한 FAT 파일 시스템 형식의 특별한 파티션
- EFI 바이너리 로딩
- 부팅 과정 중 UEFI 펌웨어는 ESP에서 .efi 확장자를 가진 EFI 실행 파일을 로드

임베디드 시스템 부트로더
- 임베디드 시스템은 특정 목적을 위해 설계된 제한된 리소스를 가진 시스템
- ROM 코드(초기 부트로더)
- 시스템의 초기 부팅 및 보안을 책임지는 가장 기본적인 소프트웨어
- 대부분의 임베디드 프로세서는 ROM(Read-Only Memory) 코드를 포함하며 NAND, eMMC 부팅을 위한 기본 코드와 보안 기능을 제공
- ROM 코드는 SoC 내부 SRAM에서 실행되는 매우 작은 코드이며 SoC 제조사가 제작하고 수정이 불가능
- 기능 추가가 필요할 경우 새로운 파트 넘버로 SoC를 릴리즈

x86 부트로더 vs. 임베디드 부트로더
| 특징 | x86 부트로더 | 임베디드 부트로더 |
|---|
| 하드웨어 추상화 | 높음 | 낮음 |
| 리소스 제약 | 적음 | 많음 (제한된 메모리, 저장 공간, 전력) |
| 복잡성 | 높음 | 낮음 |
| 부팅 속도 | 상대적으로 느림 | 상대적으로 빠름 |
| 유연성 | 높음 | 낮음 |
| 보안 | UEFI Secure Boot와 같은 표준화된 보안 기능 제공 | SoC 제조사 또는 벤더별 보안 솔루션 사용 |
3. 임베디드 부팅 시퀀스
일반적인 부팅 시퀀스
- 전원 공급 및 초기화
- ROM 코드 실행(첫 번째 부트로더)
- SoC 내부 ROM에 저장된 초기 부트로더 실행, 하드웨어 설정 및 초기화
- 보조 부트로더 로딩(두번째 부트로더)
- 내부 저장소(eMMC, NAND Flash 등)에서 두 번째 단계의 부트로더를 메모리(SRAM)에 로드
- 운영 체제 커널 로딩
- 보조 부트로더가 운영 체제 커널을 메모리(DRAM)에 로드
- 운영 체제 초기화 및 시작
- 사용자 애플리케이션 실행
- 시스템 부팅 완료 후, 사용자 정의 애플리케이션 및 서비스 시작
부팅 과정
- 초기 부팅 및 내부 SRAM 활성화
- SoC 내장 ROM 코드(첫 번째 부트로더) 활성화
- DDR 컨트롤러 초기화
- DDR 메모리 컨트롤러 초기화(타이밍, 전압, 주파수 설정)
- DDR 메모리 접근
- DDR 컨트롤러 초기화가 완료되면 시스템은 이제 외부 DDR 메모리에 접근 가능
- DDR 메모리는 시스템의 주 메모리로서 운영 체제와 애플리케이션 데이터를 저장하는 데 사용
- MMC/eMMC에서 부트로더 로드
- 초기 부트로더는 이제 MMC 또는 eMMC에서 두 번째 단계의 부트로더를 로드
- 두 번째 단계 부트로더 실행
- DDR 메모리에 로드된 두 번째 단계 부트로더가 실행
- 두 번째 단계 부트로더는 하드웨어 초기화, 운영 체제 커널 로딩, 필요한 드라이버 및 서비스의 구성
- 운영 체제 및 애플리케이션 로드
- 두 번째 단계 부트로더가 성공적으로 실행되면 마지막으로 운영 체제 커널과 필요한 애플리케이션들을 메모리로 로드하고 시스템을 완전히 부팅
부트로더 손상 시 복구 모드
복구 모드 관련 문제 상황 및 해결 방법 예시
| 문제 상황 | 해결 방법 |
|---|
| 부트로더 손상 | 벤더 특정 도구를 사용하여 부트로더 재설치 |
| 잘못된 펌웨어 업데이트 | 복구 모드 진입 후, 이전 버전의 펌웨어로 복원 |
| 시스템 파일 손상 | 루트 파일시스템에 접근하여 손상된 파일 복구 또는 재설치 |
| 설정 오류 | 설정 파일 백업을 복원하거나, 기본 설정으로 초기화 |
| 하드웨어 문제(eMMC, NAND 손상) | 전문 수리 센터에 의뢰 |
4. Trusted Firmware
부트로더와 Trusted Firmware의 기능
- 부트로더
- 일반적으로 OS를 DRAM에 로드하고 실행하는 역할을 수행
- Trusted Firmware
- 시스템 보안 강화를 위한 핵심 구성 요소로 암호화 키 관리, 보안 부팅, 보안 서비스 실행
부트로더에서 Trusted Firmware로의 제어권 이전
- 부트로더는 시스템의 초기화와 기본 설정을 마친 후 Trusted Firmware로 제어권을 넘김
- Trusted Firmware는 Secure Mode에서 필요한 보안 절차를 완료한 후 운영체제 커널을 로딩하고 Normal Mode로 전환
Trusted Firmware의 주요 기능
- 보안 부팅
- 부트로더와 함께 시스템의 무결성을 검증하고 변조되거나 악성 코드가 포함된 OS/애플리케이션의 실행을 방지
- 암호화 키 관리
- 시스템의 암호화 및 인증에 사용되는 키를 안전하게 생성, 저장, 관리
- 보안 스토리지
- 중요한 데이터를 안전하게 저장하고 인가되지 않은 접근으로부터 보호
- 보안 모니터
- 시스템의 보안 상태를 지속적으로 모니터링하고 위협을 탐지하고 대응
- 격리 실행 환경(TEE)
- 보안에 민감한 애플리케이션을 일반 OS와 분리된 안전한 환경에서 실행
Trusted Firmware가 시스템을 보호하는 방법
- 데이터 암호화
- Trusted Firmware는 저장된 데이터를 암호화하여 인가되지 않은 사용자가 데이터에 접근하는 것을 방지
- 인증
- 사용자 또는 장치의 신원을 확인하여 허가된 사용자만 시스템에 접근
- 악성 코드 방지
- 보안 부팅 기능을 통해 악성 코드가 시스템에 침투하는 것을 방지
- 원격 관리 보안
- 원격에서 시스템을 관리할 때 보안 채널을 통해 통신하여 데이터 유출 및 변조를 방지
Normal Mode와 Secure Mode의 차이점
| 특징 | Normal Mode(일반 모드) | Secure Mode(보안 모드) |
|---|
| 권한 레벨 | EL0, EL1, EL2 | EL3 |
| 접근 가능 | 일반 OS, 애플리케이션 | Trusted Firmware, Secure OS |
| 주요 기능 | 일반적인 연산 처리, 애플리케이션 실행 | 보안 관련 작업 수행 (암호화, 인증, 보안 부팅 등) |
| 보안 수준 | 상대적으로 낮음 | 높음 (하드웨어적으로 격리) |
| 사용 예 | 웹 브라우징, 게임 실행, 문서 작성 | 암호화 키 관리, 사용자 인증, 보안 데이터 저장 |
5. ARMv8 아키텍처
Exception Levels
- EL3(Secure Monitor/Firmware)
- 가장 높은 권한 레벨로, 보안 펌웨어가 실행됩니다. Secure World에서만 접근 가능
- EL2(Hypervisor)
- 하이퍼바이저를 위한 모드로 여러 개의 운영체제를 동시에 실행
- EL1(OS Kernel)
- EL0(Applications)
- 사용자 애플리케이션이 실행되는 권한 레벨로 가장 낮은 권한

TF-A(Trusted Firmware-A)
- 목적
- ARM 기반 시스템에서 보안 및 전원 관리를 효율적으로 수행하여 시스템 보안 강화, 전력 소비 최적화, 시스템 관리 및 성능 향상
- 의미
- ARM 아키텍처를 위한 보안 펌웨어의 레퍼런스 구현
- 기능
- 보안 강화, 시스템 부팅, 하드웨어 제어 기능 제공
- OS와 Secure Firmware의 상호작용
- TF-A는 OS와 Secure Firmware 간 인터페이스 역할
- 일반 OS에서 시스템 콜처럼 Secure Firmware에 요청 전달(Secure Monitor Call, SMC 사용)
- 보안 취약점 줄이고 OS의 중요 하드웨어 리소스 직접 접근 방지
- Normal World의 OS가 중요 하드웨어 직접 제어 방지
- OS → Secure Firmware(시스템 콜과 유사)
PSCI(Power State Coordination Interface)
- PSCI 정의
- PSCI 기능
- CPU 켜기/끄기, 대기 모드 진입, 플랫폼 셧다운 및 재시작 관리
- PSCI 특징
- 시스템 전력 소비 최적화, 다양한 전원 관리 시나리오 지원
SCMI(System Control and Management Interface)
- SCM 정의
- SCM 기능
- 전원 도메인 관리, 클럭 관리, 성능 관리 포함
- 시스템의 여러 부분 효율적 관리, 성능 최적화
Trusted OS, OP-TEE
- 목적
- Trusted OS, OP-TEE 개념
- 의미
- ARM TrustZone 기술을 활용한 보안 솔루션
- 기능
- Trusted OS
- 정의
- Secure World에서 실행되는 특수 OS
- 특징
- 보안 민감 작업 처리, 일반 OS와 분리된 환경에서 실행
- 기능
- 암호화 키 관리, 사용자 인증, 보안 트랜잭션 처리
- 도구
- OP-TEE (Open Portable Trusted Execution Environment)
- 배경
- 기능
- 보안 애플리케이션 개발 플랫폼 제공, 다양한 ARM 기반 장치에서 사용, 보안 필요한 애플리케이션 안전 실행
6. ARM 아키텍처 부팅 과정(Boot Flow)
부트로더 단계
- BL1(Boot ROM)
- SoC 제조사에 의해 칩 내부에 저장되는 변경 불가능한 코드
- 전원이 켜지면 가장 먼저 실행되며 CPU 및 필수 하드웨어의 기본적인 초기화
- BL2를 로드하고 제어권을 넘김
- BL2(Pre-OS Bootloader)
- BL1에 의해 로드되며 일반적으로 SRAM에 로드
- DDR 메모리 컨트롤러 초기화, 클럭 설정
- 다음 단계의 부트로더 이미지(BL31, BL32, BL33)를 검증하고 로드
- 보안 부팅을 위한 서명 검증을 수행
- U-Boot, Barebox와 같은 오픈소스 부트로더가 BL2로 사용
- BL31(EL3 Runtime Firmware, Secure Monitor)
- BL2에 의해 로드되고 실행되며 EL3에서 실행
- Normal World와 Secure World 간의 전환을 관리
- Secure Monitor Call을 처리하여 Normal World에서 Secure World의 서비스에 접근
- PSCI를 구현하여 시스템의 전원 상태를 관리
- TF-A가 일반적으로 BL31로 사용
- BL32(Secure-EL1, Secure OS)
- Secure-EL1에서 실행되는 Trusted OS를 위한 공간
- OP-TEE와 같은 Trusted OS가 BL32로 사용
- 보안이 중요한 애플리케이션을 실행하는 데 사용
- BL33(Non-secure Bootloader, Normal World OS Loader)
- BL31 또는 BL2에 의해 로드되며 일반적으로 DRAM에 로드
- Normal World에서 실행되는 운영체제를 로드하고 실행
- U-Boot, Barebox 등이 BL33으로 사용
- BL33은 시스템 부팅의 마지막 단계
7. Bootloader 종류
U-Boot
- 활용
- 임베디드 시스템에서 가장 널리 사용되는 오픈 소스 부트로더
- 기능
- TF-A에서 BL2 역할 수행
- Secure OS를 BL32로 로드
- U-Boot 자체를 BL33으로 로딩
- 장점
- 다양한 아키텍처와 플랫폼 지원
- 풍부한 기능과 확장성
- 활발한 커뮤니티 지원
- 단점
- 상대적으로 크기가 크고 복잡함
- 초보자가 사용하기 어려울 수 있음
SoC 제조사 자체 개발 부트로더
- LK(Little Kernel)
- s-boot
- iBoot
- 제조사 자체 개발
8. 결론
임베디드 시스템에서 부트로더는 단순한 초기화 단계를 넘어서 시스템의 보안과 안정성을 책임지는 핵심 요소입니다. Trusted Firmware와 ARMv8 아키텍처의 보안 기능은 점점 더 정교해지는 보안 위협에 대응하기 위해 필수적인 요소로 자리 잡고 있습니다.
부트로더의 역할, x86과 임베디드 시스템 부트로더의 차이, 부팅 시퀀스, Trusted Firmware, ARMv8 아키텍처 그리고 부트로더의 종류에 대해 살펴보았습니다.