<TrustZone이 U-Boot는 아니지만 구분하기 편하게 U-Boot 섹션에 넣음>
- TrustZone이란?
- 하나의 프로세서를 Secure World와 Non-secure World로 논리적으로 분리해주는 하드웨어 기반 보안 기술
- TF-A (Trusted Firmware-A)란?
- ARM 플랫폼의 초기 부팅을 담당하는 부트로더(BL2)로, ARM TrustZone 기술을 기반으로 Secure/Non-secure 를 분리
- 하드웨어 리소스 초기화, 보안 부팅, 펌웨어 로딩
- Secure World 와 Non-secure World를 전환
- OP_TEE란?
- ARM TrustZone을 활용하는 오픈 소스 신뢰 실행 환경(BL32 - 선택사항)
- 일반 OS는 Non-Secure World에서 동작, OP_TEE는 Secure World에서 동작
- 하드웨어적으로 분리된 영역에서 키 관리, 암호화, 결제 등 보안이 중요한 처리를 담당
Boot Sequence

- 부팅 과정 : BootROM → BL2 (TF-A) → BL31(TF-A) → BL32 (TrustZone OS, 선택) → BL33(U-Boot)
1. Boot ROM 실행
시스템에 전원이 들어오면, 먼저 온칩(On-chip) ROM에 내장된 Boot ROM 코드가 가장 먼저 실행
이 코드는 변경할 수 없으며, 초기 부팅 디바이스(SD 카드, USB 등)를 찾아 읽는 역할을 함
2. SD 카드에서 BL2 로드
Boot ROM은 SD 카드의 미리 정해진 위치에서 BL2(Boot Loader 2)를 찾아 Embedded SRAM으로 로드 후에, 실행 제어권을 BL2에 넘김
3. BL2 실행 및 BL31, BL32, BL33 로드
- BL31 로드:
Embedded SRAM의 지정된 주소에 BL31을 로드
- BL32 로드:
Secure RAM (DDR)의 맨 아래 주소에 BL32를 로드
- BL33 로드:
Non-secure RAM (DDR)의 지정된 주소에 BL33(U-Boot)을 로드
이 과정에서 BL2는 SD 카드에 있는 파일들(BL31, BL32, BL33)을 읽어와서 메모리에 배치
4. BL31 실행
BL2는 준비가 완료되면 BL31을 실행
BL31은 보안 모니터(Secure Monitor)의 역할을 하며, 보안(Secure)과 비보안(Non-secure) 세계 사이의 전환을 관리
5. BL33 (U-Boot) 실행 및 부팅
BL31은 비보안 세계로 전환하며 BL33(U-Boot)에게 실행 제어권을 넘긴 후, U-Boot는 SD 카드에서 커널 이미지, 램디스크, 장치 트리(.dtb) 등을 읽어와서 Non-secure RAM (DDR)의 다른 위치에 로드하고, 최종적으로 리눅스 커널을 실행하여 부팅 완료
- Boot ROM
- 전원이 켜지면 가장 먼저 Boot ROM에서 실행 시작
- 칩 제조 시점에 하드웨어에 내장되어 수정이 불가능한 코드
- BL2(Trusted Boot Firmware)를 로드하고 유효성 검사
- BL2 (Trusted Boot Firmware)
- BL31 (EL3 Runtime Firmware)
- Secure Monitor 역할 수행
- 일반적인 OS와 분리된 보안 운영 체제와 같은 역할
- BL32 (ex.OP_TEE)
- 보안 영역에서 실행되는 코드
- BL31 제어 하에 보안 결제 같은 민감한 작업이 이 단계에서 처리
- BL33 (Non-Trusted Firmware)
- Linux Kernel과 같은 비보안 운영체제를 로드하는 역할
- 일반적으로 U-Boot가 이에 해당
- Linux Kernel (운영체제)
- Kernel이 부팅을 완료하고, application 실행할 수 있는 환경 제공