[U-Boot] TrustZone 기반 TF-A, OP_TEE 및 Boot Sequence

SMJ·2025년 9월 5일

BSP development

목록 보기
6/18

<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 실행할 수 있는 환경 제공
profile
Embedded Junior Developer

0개의 댓글