Raspberry Pi/CM4

Raspberry pi CM4 - EEPROM Bootloader

engineer4ever 2025. 3. 19. 00:05

 

1. Raspberry Pi Compute Module 4(이하 CM4)의 EEPROM 부트로더 개요

- CM4에는 EEPROM이 내장되어 있으며, 이 EEPROM에는 부트로더(Bootloader)가 저장됨

- CM4는 EEPROM에 저장된 부트로더를 실행하여 운영체제를 로드

 

2. CM4의 부트 과정

CM4의 부팅 과정은 다음과 같음

(1). EEPROM에서 부트로더 실행

- CM4는 부팅 시 SPI EEPROM에서 부트로더를 로드하고 실행

- 이 부트로더는 Raspberry Pi 재단에서 제공하며, 펌웨어 업데이트를 통해 변경할 수 있음

 

(2). 부팅 소스 확인

 

(3). 부트로더는 설정된 부팅 순서(BOOT_ORDER)에 따라 가능한 부팅 장치를 검색

기본적인 부팅 순서는 다음과 같습니다:

- eMMC (또는 SD 카드)

- USB 장치 (USB Storage, USB Boot 등)

- Network Boot (PXE, TFTP)

- Fallback (재시도 및 복구 모드 진입)

 

(4). 운영체제 커널 로드 및 실행

- 선택된 부팅 장치에서 운영체제 커널을 로드하여 실행


1. CM4 EEPROM Bootloader 업데이트를 위한 준비물

 
HOST
CM4 또는 rpiboot 도구가 설치된 Linux PC
DEVICE
CM4
케이블
USB to USB-A 케이블 (CM4의 경우 USB-C to USB-A 케이블)

 

HOST $ sudo apt install git libusb-1.0-0-dev pkg-config build-essential
HOST $ git clone --recurse-submodules --shallow-submodules --depth=1 https://github.com/raspberrypi/usbboot
 

 

- bootloader 수정

HOST $ cd ~/usbboot/recovery
HOST $ nano boot.conf
 

 

- 아래와 같이 수정

[all]
BOOT_UART=0
WAKE_ON_GPIO=1
POWER_OFF_ON_HALT=0
 
# Try SD first (1), followed by, USB PCIe, NVMe PCIe, USB SoC XHCI then network
BOOT_ORDER=0xf25641
 
# Set to 0 to prevent bootloader updates from USB/Network boot
# For remote units EEPROM hardware write protection should be used.
ENABLE_SELF_UPDATE=1
 
HOST $ ./update-pieeprom.sh
 

 

STEP2 : DEVICE

- CM4를 USB 모드로 설정 : EMMC-DISABLE / nRPIBOOT(GPIO 40)를 GND에 연결. ROM을 usbboot 모드로 전환해야 함. 그렇지 않으면 SPI EEPROM 부트로더 이미지가 대신 로드됨

- CM4를 HOST의 USB 포트에 연결

- 전원을 공급

 

STEP3 : HOST

- recovery/pieeprom.bin부트로더 EEPROM에 쓰려면 다음 명령을 실행

- 다음 명령을 실행하여 업데이트된 pieeprom.bin이미지를 EEPROM에 씁니다.

HOST $ cd ~/usbboot

HOST $ sudo ./rpiboot -d recovery
 

완료되면 EEPROM_nWP는 low로 떨어짐

 

 

HOST 화면

 

DEVICE 화면 : rpiboot 실행 전 rpi-eeprom-config로 boot.conf 확인

 

DEVICE 화면 : rpiboot 실행 후 rpi-eeprom-config로 boot.conf 확인

 

BOOT_ORDER의 다양한 부팅 모드 설정 속성

 
Value
Mode
Description
0x0
SD CARD DETECT
Try SD then wait for card-detect to indicate that the card has changed - deprecated now that 0xf (RESTART) is available.
0x1
SD CARD/eMMC
SD card (or eMMC on Compute Module 4).
0x2
NETWORK
Network boot
0x3
RPIBOOT
RPIBOOT
0x4
USB-MSD
USB mass storage boot
0x5
BCM-USB-MSD
USB 2.0 boot from USB Type C socket (CM4: USB type A socket on CM4IO board).
0x6
NVME
CM4 only: boot from an NVMe SSD connected to the PCIe interface.
0x7
HTTP
HTTP boot over ethernet.
0xe
STOP
Stop and display error pattern. A power cycle is required to exit this state.
0xf
RESTART
Restart from the first boot-mode in the BOOT_ORDER field i.e. loop

 

사용 예

  • 0xf25641: Network → BCM-USB-MSD → NVME → USB → SD/eMMC
  • 0xf14: USB → SD/eMMC → Network
  • 0x1: SD/eMMC 우선
  • 0xf21: Network → USB → SD/eMMC

 

'Raspberry Pi > CM4' 카테고리의 다른 글

Raspberry Pi CM4 - 크로스 컴파일 환경 구축(1)  (0) 2025.03.19