恢复 Star Labs StarBook 的 BIOS 固件
正如我在最近的季度更新中所描述的,一次完全常规的固件更新竟把我的 Star Labs StarBook Mk VI (AMD) 变成了一块昂贵的镇纸。我只是从 Star Labs 的官方文档中原样复制粘贴了 curl ... | bash 这一行命令,脚本运行了大约半分钟,然后关闭了设备,从那一刻起 StarBook 就拒绝启动了:黑屏、键盘背光亮着、电源指示灯亮着,扬声器偶尔发出咔嗒声。遗憾的是,无论怎么重复开关机或断开电池,都没能让它复活。
摆脱这种困境的唯一办法,是使用外部 SPI 编程器重新烧写 BIOS 芯片。Star Labs 确实对此有文档说明,但他们的指南假定你使用的是他们的 编程套件,配合一块专用调试板和一根 FPC 排线。这套件比通用编程器贵得多,没有列出任何品牌型号信息,而且在撰写本文时,它在他们的网店上一直处于永久缺货状态。当你被困在某处,手头唯一的电脑就是这台死掉的笔记本时,这可帮不上什么忙。
好消息是,你根本不需要那些东西——至少对这款特定型号的 StarBook 来说是这样。正如 Star Labs 自家的 Sean(肖恩)在我为排查这个烂摊子而开的 GitHub issue 中指出的那样,这款 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 版本。
到处都能买到、只要三美元的 CH341A “黑色”编程器(AliExpress、Amazon 以及几乎所有地方都有售),其 SPI 线路工作在 3.3V(并行接口则是 5V)。把这种夹子直接夹到 1.8V 芯片上,最好的情况是 flashrom 读出一堆乱码;最坏的情况则是烧毁闪存芯片或其下游的什么东西。
解决办法是一块小小的 1.8V 转接板(本质上是一个带稳压器的电平转换器(level shifter)),它位于 CH341A 和你的 SOIC-8 夹子之间。这类转接板以套装形式出售,例如 Sean 在 issue 中链接的 KOOBOOK CH341A Programmer + 1.8V Adapter 组合。务必确认你买的东西明确标明了 1.8V。
你需要准备什么
你需要一台带 1.8V SOIC-8 转接板的 CH341A 编程器、一个 SOIC-8 测试夹(弹簧式的“Pomona 风格”夹子,或者更便宜的排线式夹子,两者都可用)、一台运行 Linux 的第二台电脑(可以通过 live 介质,例如 U 盘)来驱动编程器——比如一台百货商店买的笔记本加一个 Fedora live USB 就行,前提是你能言善辩,足以向店员解释清楚你绝对不是在制造在他们看来十有八九像炸弹的东西。你还需要适用于你机型的正确固件镜像(下文详述)、一把小号十字螺丝刀,最好再有一个塑料撬棒。
第一步:拆开 StarBook

开始之前请关闭所有电源并拔掉充电器。把笔记本电脑翻过来,先拧下顶部两个角上的长十字螺丝,再拧下边缘周围的八颗较短的螺丝,取下背板。小心地掀开盖板。
然后,拧下固定电池的五颗螺丝(其中一个螺丝位是故意留空的),并轻轻拔下电池连接器。
最后,在主板上找到 SOIC-8 闪存芯片,就是上面描述的那颗八条腿的 Winbond 芯片。
注意:趁 StarBook 开着的时候,我发现我那块(才用了不到两年的)电池已经明显鼓包了,所以请花点时间检查一下你的电池。鼓胀的锂电池是火灾隐患,应当更换。
第二步:连接测试夹

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 转接板会替你连通全部八根线。你唯一需要弄对的,就是让夹子的第 1 引脚对准芯片的第 1 引脚。

注意:我的芯片封装上有一个灰色圆点,画在与第 1 引脚相对的那个角上。第 1 引脚实际上是由那个小的凹陷(蚀刻)圆点标记的,正好在灰色圆点的正对面。我不知道为什么会有那个灰点,但如果你对着它对齐,夹子就会夹反。如果你的芯片上也有灰点,请找凹点,而不是灰点。
第三步:用 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 仓库中发布他们的固件。对于外部烧写,你需要的是完整的 SPI 镜像,而不是 EFI/fwupd 更新文件。对我的 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)来跳过这些校验步骤,但我建议不要加,这样 flashrom 能确认写入确实成功了。无论如何,在它工作时不要断开或干扰编程器。成功完成后,取下夹子,重新接上电池,拧回背板,然后尝试开机。
第四步:恢复后的首次开机
当我重新开机时,StarBook 复活了,却停在一个抱怨缺少启动项的界面上,因为刷入全新镜像也会清空 EFI 启动变量。这不是什么大问题,你只需要让固件重新指向你的引导加载程序即可。你可以使用启动菜单选择你的 SSD(这通常会重新添加启动项),也可以启动一个恢复/live 系统并运行 grub-install(我就是这么做的),或者进入 EFI shell 手动启动你的引导程序:
fs0:
cd efi/fedora
grubx64.efi
注意:在较新的 Coreboot 版本中,Star Labs 启用了 Rom Armor 和防回滚机制。在 AMD 主板上,我在 26.06 上进行外部烧写和降级仍然可行,但从 26.07 开始预计会被锁定。
一些感想

这次折腾中最让我恼火的,并不是固件更新可能出错,因为刷写东西时这始终是一种风险。而是 Star Labs 文档中的恢复方案依赖于一套谁也买不到的专有套件,而一个配 1.8V 转接板的通用 CH341A 显然就能胜任。然而,这一信息在 Star Labs 的官方文档中根本找不到,这正是我决定发布这篇文章的原因。希望它能帮下一个人省去我为此付出的那一天(以及那份焦虑)。
随机一篇博客