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.txtkernel8.img(또는 Image)를 읽기 때문에, 설정이 잘못되면 즉시 부팅이 중단됩니다.


2. 증상별 징후

증상원인 가능성
빨간 LED만 켜지고 화면 출력 없음bootloaderkernel 로드 실패
무한 부팅 (무늬 없는 검은 화면 반복)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 복원 모드 사용

댓글 남기기