
```objectivec
전원 ON
│
▼
┌──────────────────────────────┐
│ RBL (ROM Boot Loader) │
│ - SoC 내부 Mask ROM에 고정 │
│ - 부팅모드핀 확인 │
│ - SD카드 0번 섹터에서 PBL 읽기│
└──────────────────────────────┘
│ (칩 내부 SRAM/IRAM에 로드)
▼
┌──────────────────────────────┐
│ PBL (Primary Boot Loader) │
│ - SD/eMMC/NAND 컨트롤러 초기화│
│ - SPL 위치로 이동하여 읽기 │
└──────────────────────────────┘
│ (칩 내부 SRAM/IRAM → DDR 또는 IRAM)
▼
┌──────────────────────────────┐
│ SPL (Secondary Program Loader)│
│ - DDR 초기화 │
│ - SD카드/플래시에서 U-Boot 본체│
│ (u-boot.bin) 읽기 │
└──────────────────────────────┘
│ (DDR에 로드)
▼
┌──────────────────────────────┐
│ 메인 U-Boot │
│ - 환경변수 로드 │
│ - 커널(Image) + DTB 로드 │
│ - bootargs 전달 │
└──────────────────────────────┘
│ (DDR에 커널 + DTB 로드)
▼
┌──────────────────────────────┐
│ Linux 커널 │
│ - RootFS 마운트 │
│ - 사용자 공간 실행 │
└──────────────────────────────┘
+) “U‑Boot Overview”
https://docs.u-boot.org/en/latest/
+) arch/arm/cpu/ + board/<vendor>/<board> 디렉토리 코드를 직접 열어보기
printenv → 현재 환경변수 보기setenv bootcmd '...' → 부팅 명령 변경saveenv → 변경 저장help → 사용 가능한 커맨드 목록mmc list, fatls, load 등 저장장치 명령tftpboot, ping 등 네트워크 부팅 관련 명령+) 실제 보드에서 printenv와 부팅 로그를 비교하면서 bootcmd → 실행된 명령 흐름을 추적하는 게 효과적.
make CROSS_COMPILE=arm-linux-gnueabihf- <board>_defconfig
make CROSS_COMPILE=arm-linux-gnueabihf-board.c, Kconfig, MAINTAINERS, Makefile