모니터도 키보드도 없는 Embedded 환경에서 FW 개발업무를 10년 이상 하다 보니, 모니터와 키보드가 있는 환경이 오히려 불편하다고 생각하는 개발자입니다. 처음부터 headless 환경에서 라즈베리파이 연구를 시작했습니다만, 라즈베리파이 부팅 초기의 문제를 발견하고 해결하는 데는 어려움이 있었던 것이 사실입니다.
[모니터가 장착된 상태에서 부팅 불량 문제점 진단]
모니터가 장착된 상태에서의 부팅불량 문제점을 진단하는 방법은 아주 쉽습니다. 라즈베리파이 4B 보드의 micro-HDMI 포트에 모니터를 연결해서 모니터로 출력되는 에러 메시지를 확인하면 됩니다.
아래는 대표적인 부팅 불량 문제점인 SD boot failed 메시지입니다. SD카드를 미장 착하거나, SD카드에서 부팅 가능한 OS를 찾지 못할 경우 아래와 같은 에러 화면이 뜨게 됩니다.
[Headless 환경에서 부팅불량 문제점 진단]
만약 micro-HDMI 포트에 모니터를 연결할 수 없는 환경(예를 들어, Headless 환경)이거나, micro-HDMI 포트의 고장으로 모니터로 부팅 불량 메시지를 확인할 수 없다면 어떻게 해야 할까요?
우리는 headless 환경에서 유선랜이나 무선랜 같은 네트워크를 이용해서 ssh나 vnc 프로토콜을 통해서 라즈베리파이에 접속합니다. 이 환경에서 부팅 불량 문제를 진단하고 해결하기는 어렵습니다. 그 이유는 라즈베리파이의 부팅이 완료된 상태에서 비로소 ssh나 vnc 서비스가 돌기 때문입니다. 즉, OS가 살기 전까지는 ssh로도 vnc로도 라즈베리파이에 접속할 수 없기 때문입니다.
그렇다고 포기할 수는 없습니다. 라즈베리파이 보드에 실장 된 LED Indicator를 통해서 부팅 불량 상황에 대해서 어느 정도 확인하고 조치해볼 수 있기 때문입니다.
아래 동영상은 SD 카드 오류로 인한 부팅불량시에 LED의 신호를 촬영한 영상입니다. SD 카드의 오류로 인해 부팅불량이 발생하면 약 4초의 주기로 LED가 빠르게 4번씩 반복적으로 깜빡입니다. LED가 빠르게 4번 깜빡이고, 약 4초 이후에 또 빠르게 4번 깜빡입니다. Desktop PC에서 부팅 시에 비프음 회수를 통해서 Desktop PC의 부팅 불량 문제점을 진단하는 것과 비슷한 원리입니다. 비프음 대신에 LED로 표시된다고 생각하시면 되겠습니다.
111
오실로스코프로 LED의 파형을 측정해보면 아래와 같습니다. 사실 오실로스코프로 측정할 필요도 없이 눈으로 확인하면 되지만, 좀 더 시각적으로 보여드리기 위해서 사용하였습니다. 눈으로 LED를 확인했던 것처럼 약 4초 주기로 LED가 4번 On 되는 것을 보실 수 있습니다. (LED 신호가 Low Active이기 때문에 Low일 때 켜지고, High일 때 켜지는 점에 유의하세요.)
[SD카드에 의한 부팅불량 에러일 경우 조치사항]
SD카드 불량에 의한 부팅불량 문제점은 2가지가 있습니다. 첫 번째 불량은 SD카드 자체가 고장 났거나, 두 번째 불량은 SD카드에 부팅 가능한 OS 이미지가 Writing 되어있지 않은 상태입니다.
[SD카드 고장의 진단 및 조치사항]
HDD, eMMC, EEPROM, SD카드 등의 메모리는 모두 수명을 가진 소모품입니다. Access를 많이하게되면 당연히 불량이 발생하게 됩니다. 꼭 오래 사용하지 않았어도 SD카드의 경우는 자기장, 열 등에 취약하고 이 같은 이유로 고장이 발생할 수 있습니다. 특히 블랙박스에 오래 장착되었던 SD카드를 재활용하는 것은 추천하고 싶지 않습니다.
만약 모니터가 장착된 환경이라면 아래와 같은 메시지가 출력됩니다.
SD card not detected SD CMD: 0x371a0010 (55) 0x0 0x1fff0001 Failed to open device: 'sdcard' SD card not detected SD CMD: 0x371a0010 (55) 0x0 0x1fff0001 Failed to open device: 'sdcard' SD card not detected SD CMD: 0x371a0010 (55) 0x0 0x1fff0001 Failed to open device: 'sdcard' SD card not detected SD boot failed BOOT_STOPPED: 0x00000001 0x0 |
에러 메시지를 유심히 살펴보시면, 총 3번의 SD카드 인식을 시도해보고, 3번째 SD카드 인식불량 시에 부팅 불량을 판정합니다.
모니터가 연결되지 않은 환경이라면 PC에 SD카드를 장착하고 정상적으로 인식되는지 확인합니다.
정상적으로 인식되지 않는다면 당연히 새 SD 카드로 교체하셔야 합니다.
[부팅가능한 OS 이미지를 찾지 못했을 경우]
SD 카드 자체는 인식이 되었지만, SD 카드 내부에서 부팅 가능한 OS 이미지를 찾지 못했을 경우도 있습니다.
만약 모니터가 연결된 환경이라면, 아래와 같은 에러 메시지가 출력됩니다.
autoboot.txt not found Partition: 0 lba: 8192 oem: 'MSDOS5.0' volume: ' NO NAME ' rsc 4404 fat-sectors 1894 c-count 242304 c-size 64 r-dir 2 r-sec 0 config.txt not found recover4.elf not found recovery.elf not found start4.elf not found start.elf not found Firmware not found SD boot failed BOOT_STOPPED: 0x00000001 0x0 |
에러 메시지를 자세히 살펴보면, SD카드는 정상적으로 인식되었으나, 그 안에 정상적으로 부팅 가능한 이미지를 찾지 못했습니다.
- config.txt 파일을 찾아봤으나 없었고,
- recover4.elf 파일을 찾아봤으나 없었고,
- recovery.elf 파일을 찾아봤으나 없었고,
- start4.elf 파일을 찾아봤으나 없었고,
- start4.elf 파일을 찾아봤으나 없었고,
- Firmware 파일을 찾아봤으나 없었기 때문에
- 결국 SD 부팅 불량으로 처리된 케이스입니다.
다시 말하면, 라즈베리파이 4는 부팅 시에 위의 순서대로 파일들을 찾는다는 것입니다.
이 경우 라즈베리파이 OS 이미지를 재설치해보시기 바랍니다. SD카드에 라즈베리파이 OS를 설치하는 방법은 frankler.tistory.com/19 페이지를 참조하시기 바랍니다.
만약 다시 OS 이미지를 Writing 했음에도 불구하고 여전히 부팅이 안되거나 멀지 않아 다시 부팅 불량이 발생한다면 이 때도 새 SD카드로 교체하시기 바랍니다.
Ubuntu Server OS(CUI 환경)의 경우 최소 4GB SD카드로도 OS를 설치하실 수 있습니다. GUI 환경의 OS를 이용하시려면 16GB 이상의 SD카드를 이용하시기를 권장드립니다.
'Study > 라즈베리파이 공부' 카테고리의 다른 글
[라즈베리파이] ACT LED가 계속 점등되면서 느려지는 문제 해결 방법 (0) | 2021.01.31 |
---|---|
[라즈베리파이] UART 시리얼 포트로 터미널 접속 방법(Headless 환경) (0) | 2021.01.26 |
[라즈베리파이] 현재 GPIO 출력값을 읽어와 토글 시키는 방법 (0) | 2021.01.24 |
[라즈베리파이] 적외선 센서로 인체의 움직임이 감지되면 부저가 울리는 python 예제 (0) | 2021.01.24 |
라즈베리파이로 active buzzer 제어하는 방법 (0) | 2021.01.23 |