TL;DR
- 최신 Armbian rolling 빌드에서 사용하는 U-boot 이미지가 모종의 이유로 오드로이드 N2+와 호환이 되지 않거나 충돌하는 듯함. 최신 커널 자체에도 문제가 좀 있는 듯...
- 디버깅할 수 있는 수단이 없어 정확한 이유를 확인할 수는 없지만, 당장은 Armbian stable 빌드 설치 후 U-Boot 패키지는
apt-mark hold
로 업데이트를 방지하고, edge 커널은 설치하지 않는 것으로 임시 방편으로 해결 가능.
오드로이드 N2+에서 글 작성 시점 기준 최신 Armbian rolling 빌드(2023년 2월 13일자 Armbian v23.02.0 trunk) 설치 시 부팅이 되지 않는 문제로 골머리를 앓게 되어(...) 삽질을 좀 해봤습니다. 😭 SBC는 삽질의 연속입니다...
문제점 (문제 현상)
- ODROID-N2+에 최신 Armbian rolling 빌드(커널 버전 v6.2.0-rc3) 설치 시, 부팅이 되지 않습니다.
┗ SPI (Petitboot) 부팅 모드에선 eMMC에 설치된 Armbian 커널이 정상적으로 인식되지만, 부팅 시도 시 검은 화면으로 전환되고 먹통이 되며, 오드로이드 보드 상 SYS LED 인디케이터도 깜빡이지 않습니다.
┗ MMC 부팅 모드에선 U-Boot 로고가 화면 우측 상단에 표시되지만, 이후 리눅스 부팅이 진행되지 않습니다. 마찬가지로 보드 상 SYS LED 인디케이터가 깜빡이지 않습니다. - 딱 한 번 부팅이 된 적이 있었지만(...??)
reboot
명령어로 재부팅하면 다시 부팅이 되지 않았습니다. - 최신 Armbian stable 빌드(Armbian v22.11.1 Bullseye, 커널 버전 v5.19.17) 설치 시, 높은 "확률"로 부팅이 됩니다. (= rolling 빌드처럼 부팅이 안 된 적이 있었음) (????)
부팅이 됐다 안 됐다 하는게 처음에는 eMMC에 문제가 생긴 줄 알았는데, 하드웨어적으로 문제를 일으킬만한 행동은 한 적이 없고 디버깅을 할 수 있는 수단이 없어서 정확한 원인은 파악하지 못했습니다.
하지만 Armbian rolling 빌드는 부팅이 되지 않고, stable 빌드는 부팅이 되는 것을 보아 정황상 부팅 펌웨어, 즉 커널이나 U-Boot를 의심했습니다. 한 Armbian 포럼 글에서 U-Boot에 대해 언급했던 것을 토대로, "이전 Armbian 빌드와 최신 Armbian 빌드 사이에 U-Boot와 관련된 변경 사항이 뭔가 있었나보구나!!" 하고 심증을 가졌죠.
해결 방안
#1. Armbian stable 빌드 사용
"stable"이 괜히 "stable"이 아닐 겁니다!
Armbian stable 빌드를 설치하면 기본적으로 커널/펌웨어 관련 패키지가 hold(freeze)된 상태로, apt
(apt-get
) 명령어로 패키지를 업그레이드할 때 업그레이드 대상에서 제외됩니다. 이 상태로 계속 사용하면 어쨌든 부팅이 된다고 확신할 수는 있습니다.
#2. Armbian stable 빌드 설치 후 U-Boot 패키지만 hold
"#1 방안으로 하되 그래도 커널 업데이트는 받아야되지 않겠나!!" 한다면 커널/펌웨어 관련 패키지를 unhold(defreeze)하고 U-Boot 패키지만 다시 hold한 다음 평소와 같이 apt-get upgrade
를 진행해주면 됩니다. Armbian stable 빌드에 설치되어 있는 U-Boot는 최소한 작동이 되긴 하니까요!
먼저 armbian-config
를 사용해서, 커널 및 펌웨어 관련 패키지를 unhold 해줍니다.
$ sudo armbian-config
armbian-config
화면이 표시되면, 순서대로 "System" → "Defreeze" → 확인 창이 표시되면 "Defreeze"를 하면 관련 패키지가 unhold됩니다.
armbian-config
를 종료하고, 쉘에서 다음 명령어로 U-Boot 패키지만 다시 hold합니다.
$ sudo apt-mark hold linux-u-boot-odroidn2-current
저는 오드로이드 N2+를 사용하기 때문에 위 패키지를 hold해야 했습니다. 패키지명은 보드(시스템)마다 다르니 확인하고 hold하셔야 합니다. 자신이 사용하는 보드(시스템)의 U-Boot 패키지명은 다음 명령어로 확인할 수 있습니다.
$ apt-get list --installed | grep linux-u-boot
linux-u-boot-odroidn2-current/now 22.11.1 arm64 [installed]
U-Boot 패키지를 hold했다면, stable 채널 내에서 커널 업데이트를 진행해도 됩니다. 커널을 edge 채널(커널 버전 v6.2.0-rc3)로 설치하면 U-Boot를 기존 버전으로 유지하더라도 마찬가지로 부팅이 되지 않았습니다.
$ sudo apt-get update; sudo apt-get upgrade
(... apt-get update 내역 생략)
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
Calculating upgrade... Done
The following packages have been kept back:
linux-u-boot-odroidn2-current
The following packages will be upgraded:
armbian-bsp-cli-odroidn2 armbian-config armbian-firmware armbian-plymouth-theme armbian-zsh base-files
bind9-dnsutils bind9-host bind9-libs curl distro-info-data dnsutils git git-man hostapd libcurl3-gnutls libcurl4
libgnutls30 libksba8 libssl-dev libssl1.1 libtasn1-6 linux-dtb-current-meson64 linux-headers-current-meson64
linux-image-current-meson64 linux-libc-dev nano openssl sudo
29 upgraded, 0 newly installed, 0 to remove and 1 not upgraded.
Need to get 101 MB of archives.
After this operation, 3,288 kB of additional disk space will be used.
Do you want to continue? [Y/n]
(... apt-get upgrade 진행)
apt-get upgrade
진행 후 재부팅을 하면 업데이트된 커널이 적용됩니다. (커널 버전 v5.19.17 → v6.0.13)
$ uname -a
Linux odroidn2 6.0.13-meson64 #22.11.2 SMP PREEMPT Sun Dec 18 16:52:19 CET 2022 aarch64 GNU/Linux