Chrome OS 设备/自定义固件
为什么要刷入自定义固件?
优点
- 允许使用 UEFI coreboot 负载(使用 MrChromebox 的自定义固件)。
- 可以缩短启动时间。
- 移除某些用户觉得烦人的开发者模式屏幕。
- 在默认情况下未激活 VMX 的型号中启用 VMX。
- 修复一些问题(如挂起)。
缺点
- 危险,并且有可能使设备无法使用。
- 无法启动原厂 Chrome OS(您可以安装 Arnold the Bat’s Chromium OS build[死链 2024-10-12 ⓘ],如果用户需要,应该可以使用脚本将其升级到完整版的 Chrome OS)。
- 可能会出现自定义 BIOS 特有的错误。
刷入自定义固件
有几种刷入自定义固件的方法
- 使用 MrChromebox 的 固件实用工具脚本。
- 使用 John Lewis 的脚本。
- 手动使用
flashrom
,在这种情况下,您需要自行获取固件或从 coreboot 源代码编译它(官方 或 Chromium OS 分支)。
iomem=relaxed
添加到您的内核参数中。[1][死链 2025-01-19 ⓘ]禁用硬件写保护
使用 MrChromebox 的固件实用工具脚本刷入
固件简介
MrChromebox 的 Chromebook 和 Chromebox 固件与其他第三方自定义固件相比有一些不同之处,即
- 通过 Tianocore coreboot 负载实现的 UEFI 实现。
- 对其支持的某些设备的嵌入式控制器 (EC) 进行更新,解决了与其他自定义固件相关的一些错误。
- 基于最新的 coreboot 上游构建,而不是 Google 提供的冻结源代码快照。
- 源代码和构建脚本可在 github 上获取
了解脚本
MrChromebox 的固件实用工具脚本的作用?
- 自动下载静态编译的 64 位 chromium
flashrom
、cbfstool
和gbb_utility
版本。 - 自动检测您的设备/主板名称、当前固件和硬件写保护状态
- 提供在 USB 上备份当前固件的选项(当刷入完整/自定义 UEFI 固件时)。
- 根据需要自动禁用、清除、设置和启用软件写保护。
- 提供 RW_LEGACY、BOOT_STUB 和 UEFI Full ROM 固件之间的选择(可用类型因设备而异)。
- 提供在 ChromeOS 外部设置原厂固件 GBB 标志的功能
- 提供移除白色开发者模式启动画面的功能(仅限部分型号)
- 写入并验证自定义固件。
脚本不做的?
- 不会为您做三明治。
刷入固件
通过查看支持的设备列表确保您的设备受支持。对于某些设备,还有旧版 SeaBIOS(非 UEFI)固件可用,但这些固件已被弃用,并且通常不会收到进一步的更新。旧版固件映像也不提供嵌入式控制器更新。
如果您的设备有 UEFI ROM 可用,您可以使用固件实用工具脚本刷入完整 ROM 固件(在确保您已移除设备的固件写保护螺丝后)。成功刷入固件后,您可以按照安装指南进行操作,就像在任何 UEFI 计算机上一样安装 Arch Linux。Systemd-boot 是推荐的引导加载程序,因为它默认安装在 esp/EFI/Boot/BOOTX64.EFI
中,这是此固件默认尝试启动的路径。
在 Arch Linux 中使用脚本
您需要安装 dmidecode 和 which。此外,为了确保 flashrom
可以正确刷入固件,有必要使用 nopat
和 iomem=relaxed
内核参数 启动。这是由于脚本使用的 chromium 构建的 flashrom
存在问题[死链 2025-01-19 ⓘ],这是必需的,因为上游 flashrom
不能用于设置/清除软件写保护状态或范围。
使用 John Lewis 的脚本刷入
了解脚本
John Lewis 的 flash_chromebook_rom.sh
脚本的作用?
- 自动下载 Chromium OS 64 位版本的
flashrom
。 - 备份您当前的固件。
- 通过运行
# ./flashrom --wp-disable
禁用软件写保护。 - 使用 dmidecode 检查 Chromebook 产品名称并下载正确的自定义固件。
- 写入自定义固件。
脚本不做的?
- 不要求确认。
- 不检查硬件写保护是否已禁用。
- 不确认自定义固件与特定 Chromebook 子型号的兼容性。
结论
- 确保您禁用了硬件写保护。
- 阅读常见问题解答。
- 确认您的 Chromebook 型号是否受支持,如果您的型号未经测试,请访问 coreboot on Chromebooks Google+ 社区 并寻求建议。
在 Chrome OS 中运行脚本
- 通过 VT-2 (
Ctrl+Alt+→
) 访问您的命令提示符 - 输入 John Lewis 网站的 ROM 下载页面 上显示的命令。注意: 此处不发布命令的原因是为了迫使您访问该网站并在继续操作之前阅读该页面。
- 脚本退出后,在重新启动系统之前,将备份的固件复制到外部存储。
您现在应该在设备上安装了自定义固件,祈祷一切顺利并重新启动。
如果您在安装过程中刷入了固件,请继续按照 Chrome OS 设备#安装 Arch Linux 进行操作。如果自定义固件正确启动了安装介质,那么您可能需要重新启用硬件写保护。
在 Arch Linux 中运行脚本
- 安装 dmidecode。
- 输入 John Lewis 网站的 ROM 下载页面 上显示的命令。注意: 此处不发布命令的原因是为了迫使您访问该网站并在继续操作之前阅读该页面。
- 脚本退出后,在重新启动系统之前,将备份的固件复制到外部存储。
您现在应该在设备上安装了自定义固件,祈祷一切顺利并重新启动。
如果自定义固件正确启动了 Arch Linux,那么您可能需要重新启用硬件写保护,尽管 John Lewis 表示 这不是必要的,只会使以后的升级更加困难。但是,如果您不重新启用它,则需要小心不要使用 flashrom。
手动使用 flashrom
不建议使用上游 flashrom 软件包,因为它缺少 --wp-disable
、--wp-status
等操作,并且除非固件已经被外部编程(即通过另一个设备使用 SOIC 夹通过 SPI 刷入),否则它将无法成功地将固件写入 Chromebook 的 ROM。这就是为什么建议使用 Chromium OS 的 flashrom
。
为 Arch Linux 获取 flashrom
从 https://johnlewis.ie/flashrom 下载 64 位静态链接的 Chromium OS flashrom
版本,并使其成为 可执行文件。
为 Chrome OS 获取 flashrom
Chrome OS 已经包含 flashrom
。
flashrom 的基本用法
flashrom
的位置不在 $PATH
中,要执行它,您需要在命令前加上 ./
,例如 ./flashrom
。- 在写入固件芯片之前禁用软件写保护。
# flashrom --wp-disable
- 从固件芯片备份固件。
# flashrom -r old_firmware.bin
- 将固件写入固件芯片。
# flashrom -w new_firmware.bin
flashrom -V|grep 'Found' |grep 'flash chip'
查找您的固件芯片刷回原厂固件
禁用硬件写保护 并按照 使用 flashrom
手动刷入固件 的方法刷入您的原厂固件备份。
解除 Chrome OS 设备的变砖状态
所需工具
- 编程器,Raspberry Pi[死链 2025-01-19 ⓘ] 和 Bus Pirate[死链 2025-01-19 ⓘ] 在 flashrom wiki[死链 2025-01-19 ⓘ] 上被提及为兼容设备。Bus Pirate[死链 2025-01-19 ⓘ] 更可取,因为它允许您使用 Chromium OS 版本的
flashrom
,该版本支持--wp-disable
和--wp-status
标志。 - 建议使用 SOIC 夹,请参阅 [2][死链 2025-01-19 ⓘ]。
- 母头跳线。
- 如果您想使用 Chromium OS 的
flashrom
,则需要另一台 Linux 机器(32 位或 64 位)。
解除变砖过程的一般思路
- 将跳线连接到编程器和 SOIC 夹。
- 将 SOIC 夹连接到 ROM 芯片。
- 如果您的编程器正在运行 Linux (Raspberry Pi),则 modprobe spi 模块。
- 如果您的编程器没有运行 Linux,则将其连接到您的 Linux 机器。
- 使用
flashrom
写入固件,您可能需要通过运行带有--wp-disable
标志的flashrom
来禁用软件写保护(这就是 Chromium OS 的flashrom
方便的原因)。
关于解除变砖的推荐阅读
- Flashrom 的 wiki 页面,关于 ISP[死链 2025-01-19 ⓘ]、Bus Pirate[死链 2025-01-19 ⓘ]、Raspberry Pi[死链 2025-01-19 ⓘ] 和 SOIC8[死链 2025-01-19 ⓘ]。
- coreboot 的 wiki 页面,关于 Chromebooks.
- 解除 C720 变砖的示例:指南、图片。
- 解除 HP Chromebox 变砖的示例:指南
固件写保护
固件(coreboot 及其负载)存储在 SPI 闪存芯片(通常为 SOIC8)上,其中一部分受到硬件和软件措施的组合保护,防止写入。
只要写保护未被禁用且受保护范围未被清除(设置为 0,0),对固件的未受保护(RW)部分(主要是 SeaBIOS)所做的任何更改都可以通过启动 Chrome OS 安装或 Chrome OS 恢复介质来还原。
固件写保护分为硬件和软件两部分。
硬件写保护
硬件写保护是一个电路,它可以防止写入软件保护特殊寄存器;它通常通过将 SOIC8 芯片上的 !WP 引脚接地来强制执行。因此,硬件写保护仅直接保护这些特殊寄存器,但也间接保护固件芯片中的数据。
早期的 Chromebook 型号(2012-2013 年)使用跳线或开关来实现硬件写保护。2014-2017 年的大多数型号使用螺丝,而 2017 年以后的 Kabylake/Apollolake(以及更新的)型号使用电池感应线(因此断开电池是禁用硬件写保护所必需的)。
软件写保护
软件写保护是通过固件芯片上的特殊寄存器实现的,该寄存器包含一个启用/禁用标志,以及一个或多个要保护/标记为只读的地址范围。
了解禁用写保护的过程
要完全禁用写保护,需要
- 禁用特殊软件寄存器的硬件写保护。
- 更改特殊软件寄存器的值以禁用软件写保护,并清除受保护地址的范围,以便不保护任何数据(起始和结束都为 0)。
结论:如果禁用软件写保护但不重新启用它,那么即使重新启用硬件写保护,固件芯片仍将保持未受保护状态。
禁用硬件写保护
要查找硬件写保护螺丝/开关/跳线的位置以及如何禁用它,请访问您的 Chromebook 型号的 ArchWiki 页面(请参阅 Chromebook 型号)。如果 ArchWiki 上没有关于您的设备的信息,请查阅 Chrome OS 设备开发者信息 和 coreboot 的 Chromebooks 页面。
禁用软件写保护
Chromium OS 的 flashrom
可以操作软件写保护特殊寄存器。
- 读取软件写保护特殊寄存器的状态。
# flashrom --wp-status
- 禁用或启用软件写保护。
# flashrom --wp-disable
- 更改软件写保护地址范围。
# flashrom --wp-range 0 0
有关 Chromium OS 的 flashrom
以及如何获取它的更多详细信息,请参阅 #手动使用 flashrom。