반응형
📌 ROM 코드
🧱 ROM 코드란?
- 전원이 켜지거나 리셋된 직후 실행되는 SoC 내장 코드
- 칩 제조 시 내장됨 → 수정 불가 / 오픈소스 대체 불가
- 외부 메모리 사용 전 실행되어야 하므로 온칩 SRAM만 사용
- DRAM 컨트롤러 초기화 코드 없음 (디바이스마다 다르기 때문)
💾 SRAM 크기
- SoC마다 다름 (보통 4KB ~ 수백 KB 수준)
📥 ROM 코드의 역할
- 다양한 저장 장치에서 작은 코드 조각을 SRAM으로 로드
- 예시
- NAND Flash 앞쪽 페이지
- SPI Flash
- MMC/eMMC/SD 카드 첫 섹터 또는 MLO 파일
- 로드 실패 시
- 이더넷, USB, UART로 바이트 스트림 수신 시도 (UART는 주로 생산 과정에서 플래시에 코드 쓰기 위해 사용)
🔁 SPL (Secondary Program Loader)
- SRAM 공간이 작아 U-Boot 같은 전체 부트로더를 못 넣는 경우 사용
- SPL이 중간 단계 부트로더 역할 수행
🔚 종료 시점
- SPL이 SRAM에 로드됨
- ROM 코드는 SPL의 시작 지점으로 점프
SPL (Secondary Program Loader)
🔧 SPL의 역할
- DRAM에 TPL(Tertiary Program Loader)을 로드하기 위한 준비 단계
- 메모리 컨트롤러 및 필수 하드웨어 설정
- 온칩 SRAM 내에서 실행되며, 용량 제한 있음
📥 코드 로드 기능
- ROM 코드와 유사하게 저장장치에서 코드 읽기 가능
- 플래시의 프리셋 오프셋에서 로드
- 파일 시스템 드라이버가 내장되어 있다면 u-boot.img 같은 파일 이름 기준 로딩도 가능
👤 사용자 인터페이스
- 보통 사용자 입력은 불가능
- 하지만 콘솔에 버전 정보, 진행 상황 출력 가능
💾 오픈소스 vs 바이너리
- TI의 x-loader, Atmel의 AT91Bootstrap 등은 오픈소스 SPL
- 제조사 제공 바이너리 블롭 형태의 SPL도 흔함
🧠 종료 시점
- TPL이 DRAM에 로드됨
- SPL이 해당 위치로 점프하여 TPL 실행
📊 부트 순서 다이어그램
TPL (Tertiary Program Loader)
🚀 TPL이란?
- 이제 전체 기능의 부트로더(U-Boot 등) 실행됨
- DRAM에서 실행되며, 부트 로딩의 최종 단계
- 사용자 인터페이스, 명령어 기능, 자동 부트 등 포함
🛠 주요 기능
- 커널 및 부트 이미지 로드 / 업데이트
- 커널 자동 부팅 기능 포함 가능
- FDT (Device Tree) 및 initramfs를 커널 이미지에 추가 가능 → 모든 구성 요소를 DRAM에 적재 가능
👤 사용자 인터페이스
- 커맨드라인 UI 제공
- 플래시에 이미지 저장하거나, 커널 수동/자동 부팅 가능
🧠 종료 시점
- 커널 이미지가 DRAM에 완전히 적재됨
- TPL이 커널로 제어를 넘김
- 커널 실행 이후, TPL 및 이전 부트로더는 메모리에서 사라짐
📊 부트 순서 다이어그램
반응형
'도서 리뷰 > 임베디드 리눅스 프로그래밍 완전정복' 카테고리의 다른 글
부트로더 (Bootloader) #1 (0) | 2025.06.24 |
---|---|
툴체인 (toolchain) (0) | 2025.06.24 |