BootloaderDUJINLABS.COM

BOOTLOADER SOURCE SERIES

U-Boot · LK · Barebox · TF-A · OP-TEE

reset entry와 초기 메모리부터 storage, trusted boot, EL3 runtime, Secure World와 kernel handoff까지 실제 원본 코드로 이어서 읽습니다.

Topics
85
U-Boot
v2026.07
LK
upstream + classic aboot
Barebox
v2026.06.1
TF-A
LTS 2.14.3
OP-TEE
4.10.0

Bootloader와 secure firmware의 특징과 선택 기준

U-Boot, LK와 Barebox는 다음 stage를 적재하는 bootloader이고, TF-A와 OP-TEE는 EL3·Secure World 경계를 맡는다. 서로 대체하는 다섯 제품으로 보지 말고 한 부팅 체인에서 각 구성 요소가 소유하는 privilege, memory와 runtime service를 구분한다.

01

U-Boot

범용 Embedded Linux bootloader

특징

SPL/TPL/U-Boot proper의 단계 구조, 넓은 SoC·board 지원, driver model, environment/CLI, bootstd, FIT, fastboot를 한 tree에서 제공한다.

장점

지원 hardware와 vendor BSP가 가장 넓고, storage·network·USB·filesystem·image format 도구가 풍부하다. 새 board bring-up 때 참고할 upstream 사례가 많다.

단점

오래된 board별 경로와 새 driver model이 공존해 설정 조합이 복잡하다. vendor fork의 변경량이 커지기 쉽고 environment script에 제품 정책이 과도하게 모이면 검증이 어려워진다.

잘 맞는 경우

일반 Embedded Linux 제품, 여러 boot media와 network boot가 필요한 board, SoC vendor BSP를 기반으로 빠르게 kernel까지 올려야 하는 프로젝트.

02

LK

작은 kernel 위에 boot app을 구성

특징

thread, scheduler, timer, heap, VM, init hook과 app framework가 중심이다. boot image, flash, recovery 정책은 LK core가 아니라 target 또는 별도 app에서 구성한다.

장점

구조가 작고 platform/target/app 경계가 분명하다. thread와 event를 이용해 USB, display, storage 초기화를 구성하기 좋고, 고정 hardware용 chainloader나 recovery firmware를 세밀하게 통제할 수 있다.

단점

범용 Linux bootloader 기능과 board 지원은 U-Boot보다 적다. 제품별 storage·update·보안 정책을 직접 작성할 부분이 많고 downstream 구현끼리 차이가 커서 다른 LK tree의 코드를 그대로 적용하기 어렵다.

잘 맞는 경우

hardware 구성이 고정된 제품, 작은 recovery/diagnostic firmware, 빠른 부팅과 자체 protocol이 중요하며 boot policy를 직접 소유할 수 있는 팀.

03

Barebox

Linux와 닮은 관리형 bootloader

특징

Linux식 device/driver model, Device Tree, VFS와 /dev, shell, environment/state, Boot Loader Specification, bootchooser와 BBU update framework를 사용한다.

장점

Linux kernel 개발자가 source를 따라가기 쉽고 장치를 file path와 command로 다룰 수 있다. typed state와 bootchooser를 이용한 A/B 정책, 파일 기반 environment와 self-update 구성이 명확하다.

단점

vendor BSP와 지원 board의 폭은 U-Boot보다 좁다. 새 SoC의 DDR/PBL/ROM image 지원은 직접 porting해야 할 수 있고, 최소 기능만 필요한 제품에서는 LK식 전용 loader보다 image와 subsystem이 커질 수 있다.

잘 맞는 경우

장기 유지보수, 현장 update, A/B rollback, 복잡한 storage 구성이 중요하고 Linux와 비슷한 API와 진단 환경을 선호하는 제품.

04

TF-A

EL3 runtime firmware와 trusted boot

특징

BL1/BL2/BL31 단계, FIP와 Chain of Trust, EL3 runtime service, PSCI, interrupt routing, Secure Payload Dispatcher를 제공한다.

장점

Armv8-A의 EL3, SMCCC와 PSCI 표준 구현을 재사용할 수 있고 U-Boot·Linux·OP-TEE 사이의 privilege 전환과 power management 계약을 한곳에서 관리한다.

단점

platform port의 memory map, boot media, power controller와 GIC 설정이 정확해야 한다. 잘못된 carveout이나 context 설정은 Linux보다 앞에서 조용한 hang으로 나타난다.

잘 맞는 경우

Armv8-A SoC에서 secure boot, PSCI, OP-TEE 또는 다른 secure payload와 Normal World firmware를 함께 구성하는 제품.

05

OP-TEE

Secure World의 TEE OS

특징

S-EL1 secure kernel, TA user mode, SMC message protocol, shared memory, secure storage와 tee-supplicant RPC를 제공한다.

장점

Linux와 격리된 key·credential·secure service를 GlobalPlatform API로 구현할 수 있고 pager, TA isolation과 storage backend를 공통 framework로 관리한다.

단점

Normal World와 shared memory/RPC 경계가 복잡하고 TF-A, Linux driver, client library, supplicant와 TA 버전을 함께 맞춰야 한다. secure memory가 작으면 thread·pager·TA 자원이 빠르게 고갈된다.

잘 맞는 경우

DRM, key management, secure storage, attestation처럼 Linux에서 분리해야 하는 service가 있고 TrustZone 기반 TEE가 필요한 제품.

LK와 Android에 대한 주의

현재 upstream LK 자체를 Android의 현행 bootloader라고 부르면 안 된다. 이 시리즈의 Android boot image와 fastboot 글은 별도로 고정한 classic AOSP aboot commit을 다루며, 현대 Android의 A/B, AVB, GKI와 vendor boot 경로는 별도 주제다.

01 / U-Boot

U-Boot

SPL/TPL에서 U-Boot proper, driver model, storage, bootflow, 검증과 Linux handoff까지 이어지는 경로를 읽습니다.
01
v2026.07 · Makefile빌드 산출물과 단계별 이미지

Kconfig와 Makefile의 선택이 u-boot, SPL, TPL, DTB와 결합 이미지로 굳어지는 과정을 정리합니다.

02
v2026.07 · arch/arm/lib/vectors.SARM64 reset entry와 예외 벡터

ROM이 넘긴 CPU가 `_start`에서 예외 벡터와 저수준 진입 경로를 어떻게 선택하는지 읽습니다.

03
v2026.07 · arch/arm/lib/crt0_64.Scrt0_64.S의 임시 stack과 global data

`_main`이 초기 stack과 `gd_t`를 만들고 C 초기화 루틴에 들어가는 경계를 추적합니다.

04
v2026.07 · common/board_f.cboard_init_f 초기화 배열

console 이전의 CPU, timer, DRAM, FDT, reservation 작업이 순서가 고정된 initcall 목록으로 실행되는 방식을 읽습니다.

05
v2026.07 · common/board_f.cDRAM 상단 예약과 relocation 주소

DRAM 상단에서 U-Boot, malloc, FDT, stack 영역을 차감해 relocation 목적지를 정하는 계산을 분석합니다.

06
v2026.07 · common/board_r.crelocation 이후 board_init_r

새 DRAM 주소로 코드와 global data를 옮긴 뒤 runtime 서비스와 main loop를 여는 과정을 읽습니다.

07
v2026.07 · common/spl/spl.cSPL의 image 선택과 적재

작은 SRAM 단계인 SPL이 boot device를 선택하고 U-Boot proper 또는 OS 이미지를 DRAM으로 적재하는 경로를 읽습니다.

08
v2026.07 · drivers/core/root.cDriver Model root와 uclass

driver model의 root device와 uclass 목록이 만들어지고 FDT scan의 부모가 되는 과정을 읽습니다.

09
v2026.07 · drivers/core/device.cdevice_bind와 장치 객체 생성

driver와 DT node를 `struct udevice`로 묶고 parent/uclass 목록에 연결하는 bind 단계를 읽습니다.

10
v2026.07 · drivers/core/device.cdevice_probe와 의존 장치 활성화

probe 시점에 parent, pinctrl, clock 등 의존 대상을 준비하고 driver의 probe callback을 호출하는 순서를 읽습니다.

11
v2026.07 · drivers/core/root.cFDT scan과 ofnode

control FDT의 node를 순회해 compatible driver에 bind하고 pre-relocation 제약을 적용하는 경로를 읽습니다.

12
v2026.07 · drivers/mmc/mmc.cMMC 초기화와 block device 연결

host controller 초기화에서 card 식별, 용량 설정, block descriptor 공개까지 내려갑니다.

13
v2026.07 · disk/part.cblock 장치와 partition 문자열 해석

`mmc 0:1` 같은 사용자 표현이 block descriptor와 실제 partition offset/size로 변환되는 과정을 읽습니다.

14
v2026.07 · env/common.cEnvironment import와 영속 저장

CRC가 붙은 저장 매체의 environment를 hash table로 가져오고 default 환경으로 fallback하는 경로를 읽습니다.

15
v2026.07 · boot/bootflow.cbootstd와 bootflow 탐색

boot method와 boot device를 조합해 부팅 가능한 항목을 찾고 상태를 갱신하는 iterator를 읽습니다.

16
v2026.07 · boot/image-fit.cFIT hash와 signature 검증

FIT image node의 hash/signature subnode를 순회해 payload 무결성과 서명을 확인하는 과정을 읽습니다.

17
v2026.07 · cmd/booti.cbooti에서 ARM64 Linux로 handoff

raw ARM64 Image header를 검사하고 initrd/FDT를 배치한 뒤 kernel entry로 분기하는 경로를 읽습니다.

18
v2026.07 · drivers/usb/gadget/f_fastboot.cFastboot USB function과 command dispatch

USB gadget configuration에 fastboot function을 붙이고 download/flash 명령으로 넘기는 경계를 읽습니다.

19
v2026.07 · arch/x86/cpu/start.Sx86 reset entry, Cache-As-RAM과 gd

32-bit cold reset 또는 이전 loader에서 들어온 CPU가 GDT/IDT를 정리하고 Cache-As-RAM에 stack과 global data를 만든 뒤 board_init_f로 들어가는 경계를 읽습니다.

20
v2026.07 · arch/x86/cpu/start.Sx86 image copy, ELF relocation과 CAR 종료

board_init_f의 x86 전용 initcall이 image를 DRAM으로 복사하고 ELF relocation과 BSS clear를 끝낸 뒤 새 stack에서 board_init_f_r로 들어가는 과정을 읽습니다.

21
v2026.07 · arch/riscv/cpu/start.SRISC-V hart entry, boot lottery와 per-hart stack

여러 hart가 `_start`에 들어온 뒤 hart ID와 FDT를 보존하고 trap vector, per-hart stack, global data를 만든 다음 한 hart만 board_init_f를 실행하는 과정을 읽습니다.

22
v2026.07 · arch/riscv/cpu/start.SRISC-V relocation, trap frame과 secondary hart

relocate_code가 U-Boot image와 `.rela.dyn`, BSS, tvec를 새 주소로 옮기고 secondary hart와 cache를 동기화한 뒤 board_init_r로 넘어가는 경계를 읽습니다.

02 / LK

LK

현재 upstream LK 코어와 classic AOSP aboot를 기준 commit별로 분리해 읽습니다.
01
upstream 1eb9917 · make/module.mkLK의 project와 module 빌드 그래프

project 설정이 platform, target, arch, kernel, lib, app module을 모아 하나의 LK image로 연결되는 구조를 읽습니다.

02
upstream 1eb9917 · arch/arm64/start.SARM64 start.S와 초기 실행 환경

reset entry가 exception level, stack, BSS와 CPU별 진입 조건을 정리하고 `lk_main`으로 넘어가는 경계를 읽습니다.

03
upstream 1eb9917 · top/main.clk_main의 kernel 초기화 순서

heap, thread, dpc, timer와 platform early init이 bootstrap thread 생성 전 어떤 순서로 준비되는지 읽습니다.

04
upstream 1eb9917 · top/main.cbootstrap2와 init hook 단계

scheduler 문맥으로 들어온 bootstrap thread가 platform, target, app 초기화를 어떤 level 순서로 호출하는지 읽습니다.

05
upstream 1eb9917 · kernel/thread.cthread_create_etc와 stack 소유권

thread control block과 stack을 할당하고 초기 CPU context를 만드는 과정을 읽습니다.

06
upstream 1eb9917 · kernel/thread.crun queue와 thread_resched

현재 thread를 상태에 맞게 queue에 되돌리고 다음 runnable thread를 선택해 context switch하는 경로를 읽습니다.

07
upstream 1eb9917 · kernel/timer.ctimer queue와 tick 처리

정렬된 timer 목록에서 만료 항목을 꺼내 callback을 실행하고 reschedule 요청을 전달하는 과정을 읽습니다.

08
upstream 1eb9917 · arch/arm64/exceptions_c.cARM64 exception에서 C handler까지

exception vector가 register frame을 저장하고 syndrome을 해석하는 C handler로 전달하는 경계를 읽습니다.

09
upstream 1eb9917 · lib/heap/heap_wrapper.cheap_init과 allocator backend

초기 heap 영역이 선택한 allocator backend에 연결되고 malloc/free API로 노출되는 과정을 읽습니다.

10
upstream 1eb9917 · kernel/vm/pmm.cPMM과 VMM의 page 소유권

physical page를 arena에서 꺼내 virtual address space에 mapping하고 해제하는 두 계층을 분리해 읽습니다.

11
upstream 1eb9917 · platform/qemu-virt-arm/platform.cplatform과 target 초기화 경계

SoC 공통 platform 코드와 보드 정책인 target 코드가 어디서 나뉘는지 QEMU ARM 예로 읽습니다.

12
upstream 1eb9917 · app/app.cAPP_START descriptor와 app thread

linker section에 모인 app descriptor를 순회하고 별도 thread 또는 init callback으로 실행하는 구조를 읽습니다.

13
upstream 1eb9917 · lib/console/console.cconsole parser와 정적 command table

입력 line을 token으로 나누고 linker section의 command table에서 handler를 찾는 과정을 읽습니다.

14
upstream 1eb9917 · app/lkboot/lkboot.clkboot의 network image 수신과 chain loading

LK의 현재 lkboot app가 image를 수신하고 entry address로 제어권을 넘기는 경계를 읽습니다.

15
AOSP 9d6e28f · app/aboot/aboot.c현재 LK와 classic AOSP aboot의 범위

Android aboot가 존재하던 고정 AOSP LK snapshot의 app descriptor와 초기화 위치를 현재 upstream과 구분합니다.

16
AOSP 9d6e28f · app/aboot/aboot.cAndroid boot image의 kernel·ramdisk 적재

boot partition header를 읽고 page 단위 offset으로 kernel, ramdisk, second stage를 배치하는 고전 경로를 읽습니다.

17
AOSP 9d6e28f · app/aboot/aboot.cclassic aboot의 Linux 진입

ATAG 또는 DT 주소, machine type과 kernel entry를 준비하고 cache/MMU를 정리해 Linux로 분기하는 코드를 읽습니다.

18
AOSP 9d6e28f · app/aboot/fastboot.cclassic fastboot command loop

USB request를 `download`, `getvar`, 등록 command로 분기하고 응답을 전송하는 event loop를 읽습니다.

19
AOSP 9d6e28f · app/aboot/aboot.cfastboot boot의 임시 image 실행

download buffer의 Android boot image를 검사하고 flash 없이 RAM에서 kernel로 넘기는 경로를 읽습니다.

20
AOSP 9d6e28f · app/aboot/aboot.cfastboot flash와 partition write

partition 이름을 찾고 raw 또는 sparse image를 eMMC에 쓰며 성공 응답을 결정하는 경로를 읽습니다.

03 / Barebox

Barebox

PBL, initcall, Linux식 device model과 VFS, environment/state, bootchooser, bootm과 BBU를 읽습니다.
01
v2026.06.1 · MakefileBarebox 빌드 산출물과 PBL image

Kconfig와 linker 단계가 barebox ELF, PBL, DTB와 보드별 images를 만드는 구조를 정리합니다.

02
v2026.06.1 · arch/arm/cpu/entry.cARM PBL과 barebox_arm_entry

SRAM 또는 초기 DRAM의 PBL이 RAM 정보를 확정하고 main Barebox를 풀어 실행하는 경계를 읽습니다.

03
v2026.06.1 · common/startup.cstart_barebox와 초기 runtime

BSS, heap, device tree, console과 initcall 실행 준비가 shell 이전에 어떤 순서로 이루어지는지 읽습니다.

04
v2026.06.1 · common/startup.cinitcall level과 run_init

링커 section에 모인 initcall을 level 순서대로 실행하고 오류를 기록하는 방식을 읽습니다.

05
v2026.06.1 · arch/arm/cpu/mmu-common.cARM memory area와 MMU 초기화

등록된 memory bank와 reserved area를 page table로 옮기고 cacheable mapping을 만드는 과정을 읽습니다.

06
v2026.06.1 · drivers/base/driver.cregister_device와 device tree 객체

새 `struct device`를 device list와 bus에 연결하고 이름, parent, resource를 공개하는 등록 단계를 읽습니다.

07
v2026.06.1 · drivers/base/driver.cdevice_probe와 Linux식 driver binding

bus match 결과를 바탕으로 probe callback을 호출하고 dependency 오류와 deferred probe를 다루는 경로를 읽습니다.

08
v2026.06.1 · drivers/of/platform.cDevice Tree population과 deep probe

root DT의 node를 platform device로 만들고 필요 시점까지 probe를 늦추는 Barebox 방식을 읽습니다.

09
v2026.06.1 · fs/devfs.ccdev와 /dev 파일 경계

character device가 devfs inode로 노출되고 read/write가 driver operation으로 전달되는 구조를 읽습니다.

10
v2026.06.1 · common/partitions.cblock cache와 partition 등록

block device read/write cache 위에 GPT/DOS parser가 child cdev를 등록하는 과정을 읽습니다.

11
v2026.06.1 · common/environment.cenvfs load와 default environment

영속 envfs image를 검증해 디렉터리로 펼치고 default environment와 합치는 과정을 읽습니다.

12
v2026.06.1 · common/state/state.cState framework와 영속 변수

DT로 정의한 typed variable을 storage backend에서 읽고 atomic하게 저장하는 state framework를 분석합니다.

13
v2026.06.1 · commands/boot.cBAREBOX_CMD_START와 shell 명령 등록

command descriptor가 linker section에 배치되고 hush parser가 이름으로 handler를 찾는 구조를 읽습니다.

14
v2026.06.1 · common/boot.cboot entry provider와 boot 명령

문자열, cdev, directory에서 boot entry를 수집하고 우선순위에 따라 실행하는 공통 boot framework를 읽습니다.

15
v2026.06.1 · common/blspec.cBoot Loader Specification entry 해석

loader/entries 파일의 key-value를 읽어 kernel, initrd, options와 devicetree를 boot entry로 만드는 과정을 읽습니다.

16
v2026.06.1 · common/bootchooser.cBootchooser의 A/B 시도 횟수와 우선순위

state에 저장한 priority와 remaining attempts로 target을 선택하고 실패 시 다음 slot으로 이동하는 정책을 읽습니다.

17
v2026.06.1 · common/bootm.cbootm image handler와 실행 단계

image type을 감지하고 OS별 handler를 선택해 kernel, initrd, FDT를 배치하는 공통 bootm 경로를 읽습니다.

18
v2026.06.1 · common/image-fit.cBarebox FIT configuration과 검증

FIT configuration에서 kernel, FDT, ramdisk를 선택하고 hash/signature 정책을 적용하는 handler를 읽습니다.

19
v2026.06.1 · common/bbu.cBBU update handler와 self-update

보드가 등록한 update handler를 선택하고 새 Barebox image를 검증해 boot medium에 기록하는 흐름을 읽습니다.

04 / Trusted Firmware-A

Trusted Firmware-A

FIP, BL1/BL2/BL31, Chain of Trust, EL3 runtime service, PSCI, GIC와 BL32/BL33 handoff를 읽습니다.
01
LTS 2.14.3 · MakefileTF-A 빌드 산출물과 FIP 구성

BL1, BL2, BL31, BL32, BL33과 인증서가 fip.bin 안에서 어떤 UUID와 offset으로 묶이는지 읽습니다.

02
LTS 2.14.3 · bl1/bl1_main.cBL1 초기화와 BL2 인증 진입

reset 이후 BL1이 console, platform, memory를 준비하고 BL2를 인증·적재한 뒤 다음 image context를 만드는 경로를 읽습니다.

03
LTS 2.14.3 · bl2/bl2_main.cBL2 image descriptor와 순차 적재

BL2가 platform image policy를 따라 BL31, BL32, BL33을 인증하고 reserved memory에 배치하는 전체 loop를 읽습니다.

04
LTS 2.14.3 · drivers/io/io_fip.cFIP I/O driver의 UUID lookup과 bounds

FIP header와 ToC를 읽고 요청 UUID에 해당하는 payload offset과 길이를 io_entity로 노출하는 경로를 읽습니다.

05
LTS 2.14.3 · drivers/auth/auth_mod.cChain of Trust와 auth_mod_verify_img

certificate parent를 재귀적으로 검증하고 hash, signature, NV counter를 payload image에 적용하는 인증 모듈을 읽습니다.

06
LTS 2.14.3 · bl31/bl31_main.cBL31 초기화와 EL3 runtime 상주

BL31이 platform, context management, runtime service, interrupt framework를 초기화하고 BL32 또는 BL33을 선택하는 경로를 읽습니다.

07
LTS 2.14.3 · lib/el3_runtime/aarch64/context_mgmt.cSecure/Non-secure CPU context 전환

SCR_EL3, SPSR, EL1/EL2 system register와 general register context를 저장·복원해 world를 전환하는 경로를 읽습니다.

08
LTS 2.14.3 · common/runtime_svc.cSMC runtime service 등록과 dispatch

OEN 범위와 fast/yielding call type으로 runtime service descriptor를 찾고 handler에 x1-x4와 handle을 전달하는 코드를 읽습니다.

09
LTS 2.14.3 · lib/psci/psci_main.cPSCI CPU_ON과 suspend 상태

Linux가 SMC/HVC로 요청한 CPU_ON, CPU_OFF, SUSPEND를 affinity state와 platform power operation으로 연결하는 경로를 읽습니다.

10
LTS 2.14.3 · drivers/arm/gic/v3/gicv3_main.cGICv3 Group 0/1 interrupt routing

Distributor, Redistributor와 CPU interface를 초기화하고 secure interrupt를 EL3 또는 S-EL1로 라우팅하는 경로를 읽습니다.

11
LTS 2.14.3 · services/spd/opteed/opteed_main.cOP-TEE dispatcher와 BL32 최초 진입

BL32 entry parameter로 secure context를 만들고 OP-TEE의 초기 SMC return을 받아 dispatcher state를 완성하는 경로를 읽습니다.

12
LTS 2.14.3 · bl31/bl31_main.cBL33 선택과 Non-secure world 진입

BL32 초기화를 마친 BL31이 BL33 entry와 SPSR를 non-secure context에 넣고 마지막 ERET으로 U-Boot 또는 Linux에 제어권을 넘기는 경로를 읽습니다.

05 / OP-TEE

OP-TEE

S-EL1 entry, secure MMU/pager, thread, SMC message, TA session, secure storage와 RPC 경계를 읽습니다.
01
4.10.0 · core/arch/arm/kernel/link.mkOP-TEE OS 빌드 산출물

tee.elf에서 tee.bin, pager, pageable 조각과 v2 header가 생성되는 규칙을 읽고 TF-A BL32 입력과 연결합니다.

02
4.10.0 · core/arch/arm/kernel/entry_a64.SOP-TEE AArch64 _start와 TF-A 인자

BL31의 secure ERET가 OP-TEE _start로 들어온 뒤 relocation, BSS, MMU와 primary/secondary 경로를 준비하는 assembly를 읽습니다.

03
4.10.0 · core/arch/arm/kernel/boot.cinit_primary와 secure runtime 구성

primary CPU가 memory map, pager, heap, DT, service와 TA framework를 순서대로 초기화하는 C 진입 경로를 읽습니다.

04
4.10.0 · core/mm/core_mmu.cSecure MMU map과 pager fault

secure RAM, TA RAM, shared memory와 MMIO mapping을 만들고 pageable code의 fault를 physical page와 backing object로 해결하는 경로를 읽습니다.

05
4.10.0 · core/arch/arm/kernel/thread.cOP-TEE thread pool과 secure stack

thread_init_primary가 per-CPU temporary stack, thread stack과 context를 만들고 SMC 요청에 빈 thread를 할당하는 구조를 읽습니다.

06
4.10.0 · core/arch/arm/kernel/thread_optee_smc.cStandard SMC 진입과 thread 할당

Normal World의 OPTEE_SMC_CALL_WITH_ARG가 secure monitor를 거쳐 들어오고 message physical address를 검증해 thread를 실행하는 경로를 읽습니다.

07
4.10.0 · core/tee/entry_std.coptee_msg_arg command dispatch

OPEN_SESSION, INVOKE_COMMAND, CLOSE_SESSION, REGISTER_SHM 명령을 parameter 변환과 cleanup 경계 안에서 분기하는 코드를 읽습니다.

08
4.10.0 · core/tee/entry_std.cTMEM/RMEM/FMEM shared memory 변환

Normal World parameter의 physical range와 shared memory cookie를 mobj와 offset으로 바꾸고 TA가 볼 virtual mapping을 만드는 경로를 읽습니다.

09
4.10.0 · core/kernel/tee_ta_manager.cTA context와 session 수명

UUID로 TA context를 찾거나 load하고 session을 연결한 뒤 invoke, close와 last-reference cleanup까지 이어지는 manager를 읽습니다.

10
4.10.0 · core/tee/tee_svc_storage.cSecure storage object open과 backing file

TA의 object ID를 private storage namespace와 암호화된 file/RPMB backend에 연결하고 metadata를 검증해 handle을 만드는 경로를 읽습니다.

11
4.10.0 · core/arch/arm/kernel/thread_optee_smc.cRPC suspend와 tee-supplicant 왕복

secure thread가 filesystem, load TA, shared memory 요청을 Normal World에 맡기기 위해 RPC parameter를 만들고 suspend한 뒤 같은 thread를 resume하는 경로를 읽습니다.

12
4.10.0 · core/arch/arm/kernel/abort.cAbort 분류와 pager fault 복구

S-EL1 exception의 ESR/FAR를 해석해 pageable miss, user TA fault, VFP trap 또는 core panic으로 분류하는 경로를 읽습니다.