Star Labs StarBook 바이오스 펌웨어 복구하기
최근 분기 업데이트에서 설명한 것처럼, 지극히 평범한 펌웨어 업데이트 하나가 제 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 어댑터를 사용해야 합니다. CH341A의 기본 전압인 3.3V로 구동하면 칩이 손상될 위험이 있고 제대로 읽히지도 않습니다. 아래 내용은 제가 직접 성공한 방법을 아는 범위에서 최대한 정확하게 정리한 것이지만, 모든 과정은 전적으로 본인 책임하에 진행해야 합니다.
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 공식 문서 어디에서도 찾을 수 없습니다. 그래서 저는 다음 사람이 저처럼 하루를 날리고 스트레스받는 일을 겪지 않기를 바라며 이 글을 쓰게 되었습니다.
글을 무작위로 읽기