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 케이블)
|
2. CM4 EEPROM Bootloader 업데이트 방법
STEP1 : HOST
- 전원 공급
- usbboot에서 최신 소스 다운로드
https://github.com/raspberrypi/usbboot
GitHub - raspberrypi/usbboot: Raspberry Pi USB booting code, moved from tools repository
Raspberry Pi USB booting code, moved from tools repository - raspberrypi/usbboot
github.com
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 |
---|