Kernel 또는 Device Tree 수정 후 부팅이 안될 때 복구하는 방법

대상: Raspberry Pi 5에서 커널 모듈, DTB(Device Tree), 오버레이를 직접 수정하거나 커스텀 빌드한 뒤 부팅이 멈추는 개발자
환경: Raspberry Pi 5 + Raspberry Pi OS / Ubuntu / 기타 리눅스 기반


1. 문제 상황 요약

다음과 같은 상황일 때 부팅이 중단되거나 “무한 부팅 루프”에 빠지는 경우가 많습니다 👇

  • /boot/firmware/config.txt 수정 중 오타 또는 잘못된 dtoverlay= 지정
  • 잘못된 .dtbo / .dtb 파일 교체
  • 직접 빌드한 커널 이미지를 /boot/firmware/에 덮어쓴 뒤 커널 패닉
  • initramfs 또는 커널 모듈 버전 불일치

Raspberry Pi 5는 U-Boot 없이 firmware(bootloader) 가 직접 config.txt와 kernel8.img(또는 Image)를 읽기 때문에, 설정이 잘못되면 즉시 부팅이 중단됩니다.


2. 증상별 징후

증상원인 가능성
빨간 LED만 켜지고 화면 출력 없음bootloader가 kernel 로드 실패
무한 부팅 (무늬 없는 검은 화면 반복)config.txt 문법 오류
“Error applying overlay … err: -FDT_ERR_BADMAGIC”.dtbo 파일 손상
커널 패닉 메시지커널 이미지 혹은 모듈 버전 불일치
정상 부팅되지만 /dev 장치 없음DT/overlay가 잘못되어 하드웨어 미등록

3. 복구 개요

핵심 복구 아이디어:

“문제가 된 SD카드를 다른 컴퓨터에서 마운트 → /boot/firmware/ (또는 /boot/) 수정 → 다시 부팅”

즉, 부트 파티션은 FAT32 형식이라 Windows, macOS, Ubuntu 어디서나 수정 가능합니다.


4. 복구 단계

(1) SD 카드 외부 PC에 연결

Raspberry Pi OS 기준, 다음 파티션 두 개가 보입니다:

  • boot (또는 firmware) → FAT32 (config.txt, dtb, overlays 등 존재)
  • rootfs → ext4 (루트 파일 시스템)

일반적인 경로:

/media/<user>/boot/firmware/
/media/<user>/rootfs/

(2) config.txt 원복 또는 비활성화

문제의 원인이 오버레이/커널 지정이라면
/boot/firmware/config.txt를 열어서 수정 전으로 복구합니다.

예시 — overlay 비활성화:

# dtoverlay=my_custom_overlay

커널 직접 지정 해제:

# kernel=my_custom_kernel8.img

오버레이 디버그 활성화:

문제가 무엇인지 추적하려면 아래 줄을 추가해도 됩니다:

dtdebug=1

→ 다음 부팅 시 serial console 또는 dmesg 로그에 overlay 적용 과정 출력.


(3) DTB/DTBO 복원

  • Raspberry Pi 공식 커널 패키지에서 기본 DTB를 복사
    예:
    /boot/firmware/bcm2712-rpi-5-b.dtb (Pi 5용)
  • 백업해둔 원본으로 덮어쓰기: sudo cp bcm2712-rpi-5-b.dtb.bak /boot/firmware/bcm2712-rpi-5-b.dtb
  • 사용자 .dtbo 가 문제라면 /boot/firmware/overlays/ 폴더에서 제거 또는 이름 변경: sudo mv my_overlay.dtbo my_overlay.bak

(4) 커널 이미지 복구

커널 업데이트 중 문제가 생겼다면, 이전 버전으로 되돌릴 수 있습니다.
Raspberry Pi OS 기준 명령어:

sudo apt install --reinstall raspberrypi-kernel

💡 이 명령은 /boot/firmware/ 내의 커널, 모듈, DTB를 공식 버전으로 복구합니다.

외부에서 SD를 마운트했다면, 루트 파티션을 chroot로 진입한 뒤 수행할 수도 있습니다.


(5) SSH나 UART 콘솔로 부팅 로그 확인

만약 부팅은 되지만 화면이 안 뜨는 경우,
UART 콘솔로 연결하면 커널 초기 로그를 직접 볼 수 있습니다.

UART 켜기:

config.txt에 추가:

enable_uart=1

핀헤더 (GPIO 14/15) → USB-Serial 연결 후:

sudo screen /dev/ttyUSB0 115200

이때 dtdebug=1 설정도 같이 있으면, DT 적용 과정이 콘솔로 출력됩니다.


(6) 마지막 수단 — 공식 Recovery 이미지로 복원

Pi 5는 부트 EEPROM이 손상되면 “녹색 LED 깜박임 패턴”으로 표시합니다.
이 경우 Raspberry Pi Imager → Recovery Mode 로 SD카드를 다시 플래시하면 됩니다.

절차:

  1. Raspberry Pi Imager 실행
  2. “Operating System” → “Misc utility images” → “Bootloader” → “Raspberry Pi 5 EEPROM boot recovery” 선택
  3. SD 카드에 기록 후 Pi에 삽입 → 부팅
  4. 녹색 LED가 10초 정도 깜박이면 복원 완료
  5. 정상 OS를 다시 설치

5. 빠른 복구용 팁 (정리)

문제 상황조치
dtoverlay 잘못 지정config.txt에서 주석 처리
.dtbo 손상/boot/firmware/overlays/ 에서 삭제
커널 패닉sudo apt reinstall raspberrypi-kernel
U-Boot / Kernel 교체 후 부팅 안 됨기본 커널로 복원
DTB 수정 후 화면 출력 없음원본 bcm2712-rpi-5-b.dtb 로 교체
EEPROM 손상Raspberry Pi Imager Recovery 모드 사용

6. 복구 후 점검

정상 부팅되면 아래로 확인합니다 👇

uname -a          # 커널 버전 확인
vcgencmd bootloader_version  # 부트로더 버전 확인
ls /boot/firmware/overlays/  # overlay 목록 확인
dmesg | grep -i dtb

7. 안전하게 실험하는 팁

  • 항상 원본 백업: sudo cp /boot/firmware/bcm2712-rpi-5-b.dtb{,.bak} sudo cp /boot/firmware/config.txt{,.bak}
  • 별도 테스트 파티션에서 실험:
    • SD카드 두 개를 번갈아 사용하거나,
    • /boot/firmware/ 전체를 USB 드라이브에 복제
  • Overlay 실험 시에는 부팅 전 검증: dtc -I dts -O dtb -@ my_overlay.dts -o test.dtbo fdtdump test.dtbo
  • U-Boot 사용 중이라면:
    DTB를 /boot/dtb/에 따로 두고 extlinux.conf 수정으로 rollback이 쉽습니다.

8. 요약

단계핵심 조치
①SD카드 외부 PC에서 /boot/firmware/config.txt 수정
②문제 오버레이 / 커널 지정 해제
③원본 DTB / 커널 복구 (apt reinstall raspberrypi-kernel)
④dtdebug=1, enable_uart=1 로 진단 로그 확보
⑤최악의 경우 EEPROM Recovery 이미지로 복원

📌 핵심 요약

  • Pi 5 부팅 실패 시 /boot/firmware 수정만으로 대부분 복구 가능
  • Overlay 실험 전 반드시 백업 (config.txt, dtb, dtbo)
  • dtdebug=1 + UART 콘솔로 원인 파악
  • 부트로더까지 손상됐다면 Raspberry Pi Imager의 EEPROM 복원 모드 사용

댓글 남기기