Chrome 操作系统设备/自定义固件
为什么要刷入自定义固件?
优点
- 允许使用 UEFI coreboot 有效载荷(使用 MrChromebox 的自定义固件)。
- 可以减少启动时间。
- 移除一些用户觉得烦人的开发者模式屏幕。
- 在默认情况下未激活 VMX 的型号中启用 VMX。
- 修复一些问题(如挂起)。
缺点
- 危险,并且有可能导致设备无法使用。
- 无法启动原厂 Chrome OS(您可以安装 Arnold the Bat 的 Chromium OS 构建版本[死链 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 可用,您可以使用 固件实用程序脚本 刷入 Full 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 子型号的兼容性。
结论
- 确保您已禁用硬件写保护。
- 阅读 FAQ。
- 确认您的 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 页面,关于 Chromebook.
- 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。