Star Labs StarBook BIOS 펌웨어 복구하기
원문은 Marius님이 에 게재했습니다. 이 블로그 구독하기
최근 분기 업데이트에서 설명했듯이, 지극히 평범한 펌웨어 업데이트가 내 Star Labs StarBook Mk VI (AMD)를 비싼 벽돌로 만들어 버렸다. 나는 Star Labs의 공식 문서에 있는 curl ... | bash 한 줄 명령어를 그대로 복사해 붙여 넣었을 뿐인데, 스크립트가 30초 정도 무언가를 하더니 기기를 종료시켰고, 그 이후로 StarBook은 부팅을 거부했다. 화면은 까맣게 꺼진 채 키보드 백라이트와 전원 LED만 켜져 있고 스피커에서는 간헐적으로 딱딱거리는 소리만 났다. 안타깝게도 늘 하던 껐다 켜기 의식이나 배터리 분리 같은 방법으로는 아무리 해도 되살릴 수 없었다.
이 상황에서 벗어나는 유일한 방법은 SPI 프로그래머로 BIOS 칩을 외부에서 다시 플래싱하는 것이다. Star Labs도 이를 문서화해 두었다지만, 그들의 가이드는 전용 디버그 보드와 FPC 케이블이 포함된 자사 프로그래밍 키트를 사용한다고 가정한다. 그 키트는 범용 프로그래머보다 훨씬 비싸고, 제조사나 모델 정보조차 나와 있지 않으며, 글을 쓰는 시점 기준으로 공식 웹숍에서 영구적으로 품절 상태다. 가진 유일한 컴퓨터인 노트북이 벽돌이 되어 발이 묶인 상황에서는 전혀 도움이 되지 않는다.
다행히 적어도 이 특정 모델의 StarBook이라면 그런 장비가 전혀 필요 없다. 내가 이 문제를 디버깅하며 올린 GitHub 이슈에서 Star Labs의 Sean이 직접 언급했듯이, 이 StarBook에는 SOIC-8 플래시 칩이 사용됐기 때문에, 전압만 잘 지키면 저렴한 범용 CH341A 프로그래머와 일반적인 SPI 클립으로도 복구할 수 있다.
경고: BIOS 칩을 외부에서 플래싱하는 작업은 잘못하면 기기를 영구적으로 망가뜨릴 수 있다. AMD StarBook의 플래시 칩은 1.8V로 동작하며 반드시 1.8V 어댑터를 사용해야 한다. 기본값인 3.3V로 동작하는 CH341A에 바로 연결하면 칩이 손상될 위험이 있고, 제대로 읽히지도 않는다. 아래 내용은 내가 직접 성공한 방법을 아는 한도 내에서 정리한 것이지만, 모든 과정은 전적으로 본인 책임 하에 진행해야 한다.
1.8V
내 StarBook Mk VI (AMD)에 들어 있는 플래시 칩은 뒷판을 열어 실리콘에 찍힌 각인을 확인해 보니 Winbond 25R128JWSQ였다. SOIC-8 패키지의 SPI NOR 플래시다. Winbond 제품에서 접미사 JW는 1.8V 제품을 의미하는 것으로 보인다.
AliExpress나 Amazon 등 어디서나 찾을 수 있는, 흔한 3달러짜리 검은색 CH341A 프로그래머는 SPI 라인을 3.3V(병렬 헤더는 5V)로 동작시킨다. 이를 1.8V 칩에 그대로 물리면 잘해야 flashrom이 엉뚱한 값을 읽어 오는 수준이고, 잘못하면 플래시 자체나 그 주변 회로가 타 버릴 수 있다.
해결책은 CH341A와 SOIC-8 클립 사이에 끼우는 작은 1.8V 어댑터 보드(사실상 전압 레귤레이터가 포함된 레벨 시프터)다. 이런 제품은 키트로 판매되는데, 예컨대 Sean이 이슈에서 링크한 KOOBOOK CH341A 프로그래머 + 1.8V 어댑터 콤보 같은 것이다. 무엇을 사든 반드시 1.8V를 지원한다고 명시된 제품을 골라야 한다.
준비물
1.8V SOIC-8 어댑터가 포함된 CH341A 프로그래머, SOIC-8 테스트 클립(스프링 방식의 “Pomona 스타일” 클립이나 저렴한 리본 케이블형 모두 상관없다), 프로그래머를 구동할 리눅스 컴퓨터 한 대(USB 스틱 같은 라이브 매체로 부팅한 환경도 괜찮다. 예컨대 양판점 노트북에 Fedora 라이브 USB를 꽂아 쓰는 식이다. 단, 직원들에게 자신이 폭탄처럼 보이는 무언가를 만들고 있는 게 아니라고 설득할 언변이 필요하다), 그리고 기종에 맞는 펌웨어 이미지(자세한 내용은 아래에서), 작은 십자 드라이버, 그리고 가능하면 플라스틱 스퍼저가 필요하다.
1단계: StarBook 분해하기

시작하기 전에 전원을 완전히 끄고 충전기를 뽑아 둔다. 노트북을 뒤집은 뒤, 먼저 위쪽 모서리에 있는 긴 십자 나사 두 개를 풀고, 이어서 가장자리를 따라 있는 짧은 나사 여덟 개를 푼다. 뒷판을 조심스럽게 들어 올린다.
그다음 배터리를 고정하는 나사 다섯 개를 제거한다(나사 자리 하나는 의도적으로 비워져 있다). 그리고 배터리 커넥터를 살살 분리한다.
마지막으로 메인보드에서 SOIC-8 플래시 칩을 찾는다. 위에서 설명한 여덟 개 다리가 달린 작은 Winbond 칩이다.
참고: StarBook을 열어 두었을 때, 이제 겨우 2년 된 내 배터리가 눈에 띄게 부풀어 있는 것을 발견했다. 그러니 이 기회에 배터리를 한번 점검해 보길 바란다. 부푼 리튬 배터리는 화재 위험이 있으므로 교체해야 한다.
2단계: 클립 연결하기

SOIC-8 플래시 칩에는 핀 1이 정해져 있으며, 클립의 핀 1(보통 리본 케이블의 빨간 선 쪽)도 그에 맞춰야 한다. 방향을 잘못 맞추면 칩이 아예 인식되지 않는다.
참고로 Winbond SOIC-8 플래시의 핀아웃은 다음과 같다:
| 핀 | 이름 | 기능 |
|---|---|---|
| 1 | /CS | 칩 선택 |
| 2 | DO (IO1) | 데이터 출력 / MISO |
| 3 | /WP (IO2) | 쓰기 보호 |
| 4 | GND | 접지 |
| 5 | DI (IO0) | 데이터 입력 / MOSI |
| 6 | CLK | 클록 |
| 7 | /HOLD (IO3) | 홀드 |
| 8 | VCC | 전원 (1.8V) |
하지만 이 배선을 직접 할 필요는 없다. 클립과 1.8V 어댑터가 8개 라인을 모두 연결해 주기 때문에, 클립의 핀 1을 칩의 핀 1에 정확히 맞추는 것만 신경 쓰면 된다.

참고: 내 칩에는 패키지 모서리에 회색 점이 찍혀 있는데, 이 점은 핀 1의 반대쪽 모서리에 있다. 핀 1은 그 반대편에 있는 작게 파인(각인된) 점으로 표시되어 있다. 왜 회색 점이 있는지는 모르겠지만, 그 점을 기준으로 맞추면 클립이 거꾸로 물리게 된다. 회색 점이 있다면 그게 아니라 파인 점을 찾자.
3단계: flashrom으로 플래싱하기

클립을 연결한 뒤 CH341A를 보조 컴퓨터에 꽂는다. dmesg로 제대로 인식됐는지 빠르게 확인해 보자:
usb 3-6: New USB device found, idVendor=1a86, idProduct=5512, bcdDevice= 3.04
usb 3-6: Product: USB UART-LPT
아직 설치하지 않았다면 flashrom을 설치한다:
# Debian/Ubuntu
sudo apt install flashrom
# Fedora
sudo dnf install flashrom
무엇을 쓰기 전에 flashrom이 클립을 통해 플래시와 실제로 통신할 수 있는지 확인한다:
sudo flashrom -p ch341a_spi
모든 것이 제대로 연결되었다면 flashrom이 Winbond 칩을(대략 W25Q128JW 같은 이름으로) 인식할 것이다. 대신 다음과 같은 메시지가 나온다면:
No EEPROM/flash device found.
Note: flashrom can never write if the flash chip isn't found automatically.
…당황하지 말자. 내 경험상 이는 대부분 클립 접촉 불량 때문이지 정말로 문제가 생긴 경우는 거의 없었다. 저렴한 클립은 고정이 잘 안 되기 때문에, 칩이 안정적으로 인식될 때까지 클램프를 몇 번 흔들고 다시 물려야 했다. 몇 번 실행해도 일관되게 칩이 인식될 때까지는 다음 단계로 넘어가지 말자.
펌웨어가 벽돌이 된 상태라도 덮어쓰기 전에 백업을 떠 두는 것이 좋다. 칩을 두 번 읽어 덤프를 비교해 접촉이 안정적인지 확인하자:
sudo flashrom -p ch341a_spi -r backup1.rom
sudo flashrom -p ch341a_spi -r backup2.rom
cmp backup1.rom backup2.rom && echo "OK: reads match"
두 번 읽은 결과가 다르면 클립 접촉이 불안정한 것이므로, 클립을 다시 장착한 뒤 다시 시도해야 한다.
펌웨어 이미지에 대해 말하자면, Star Labs는 펌웨어를 공개 GitHub 저장소에 올려 두고 있다. 외부 프로그래밍을 할 때는 EFI/fwupd 업데이터 파일이 아니라 전체 SPI 이미지가 필요하다. 내 StarBook Mk VI (AMD)(제품 SKU B6-A)의 경우 그 이미지는 roms/B6-A.bios다. 전체 이미지 flashrom 파일은 해당 모델의 ami-flashrom 디렉터리에도 있다. 본인 모델에 맞는 파일을 골라 편한 이름(예: starbook.rom)으로 바꿔 두자.
참고: Star Labs의 펌웨어 버전 관리는 솔직히 말해 엉망이다. 글을 쓰는 시점에서 AMD StarBook용 마지막 AMI(기존 “BIOS”) 릴리스는 25.12이며, 26.04부터는 Coreboot다. 무엇을 플래싱하든 반드시 본인 기종에 맞는 전체 이미지인지 확인하자.

마지막으로, 다운로드한 이미지를 다음 flashrom 명령어로 쓴다:
sudo flashrom -p ch341a_spi -w starbook.rom
기본적으로 flashrom은 칩을 지우고, 쓰고, 검증하는 과정을 거친다. Star Labs 공식 명령어는 -n -N(즉, --noverify와 --noverify-all)을 붙여 검증 과정을 건너뛰지만, 쓰기가 제대로 되었는지 확인하려면 이 옵션을 빼고 검증 과정을 그대로 두는 것을 권장한다. 어느 쪽이든 프로그래머가 동작하는 동안에는 절대 연결을 끊거나 건드리지 말자. 성공적으로 완료되면 클립을 제거하고, 배터리를 다시 연결한 뒤, 뒷판을 닫고 부팅을 시도한다.
4단계: 복구 후 첫 부팅
내 StarBook은 전원을 다시 켜자 살아났지만, 새 이미지를 플래싱하면 EFI 부팅 변수가 지워지기 때문에 부팅 항목이 없다는 화면에서 멈췄다. 크게 걱정할 일은 아니며, 펌웨어가 부트로더를 다시 가리키도록 설정해 주면 된다. 부팅 메뉴에서 SSD를 선택하면 보통 부팅 항목이 다시 등록되고, 복구/라이브 시스템으로 부팅해 grub-install을 실행해도 된다(나는 이렇게 했다). 혹은 EFI 셸로 들어가 부트로더를 직접 실행할 수도 있다:
fs0:
cd efi/fedora
grubx64.efi
참고: 최신 Coreboot 릴리스에서 Star Labs는 Rom Armor와 안티 롤백 기능을 활성화하고 있다. AMD 보드에서는 26.06까지는 외부 플래싱과 다운그레이드가 여전히 가능했지만, 26.07부터는 막힐 것으로 예상된다.
마무리하며

이번 일에서 가장 답답했던 점은 펌웨어 업데이트가 잘못될 수 있다는 사실 자체가 아니다. 플래싱에는 언제나 위험이 따르기 때문이다. 진짜 문제는 Star Labs가 문서화한 복구 방법이 아무도 구할 수 없는 전용 키트에 의존한다는 것이다. 범용 CH341A와 1.8V 어댑터로도 충분히 되는 것처럼 보이는데도 말이다. 그런데도 이 정보는 Star Labs 공식 문서 어디에서도 찾을 수 없었기에, 나는 애초에 이 글을 쓰기로 마음먹었다. 부디 이 글이 다음 사람에게는 내가 겪은 하루치 고생과 스트레스를 덜어 주길 바란다.
글을 무작위로 읽기
댓글
로그인하고 댓글 남기기