Jooyoung Lee 2025. 6. 24. 08:45
반응형

📌 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 및 이전 부트로더는 메모리에서 사라짐

📊 부트 순서 다이어그램

반응형