跳转至内容

Chrome OS 设备/自定义固件

来自 ArchWiki
警告 本文依赖第三方脚本和修改,可能对您的硬件或数据造成不可逆的损害。

本文或本节需要在语言、wiki 语法或风格方面进行改进。请参阅 Help:Style 获取参考。

原因: 此页面上的主题已从 Chromebook 页面移出,因为它过于臃肿、难以导航和遵循,该页面仍需一些工作才能独立存在,我们可以从 Chromebook 页面移出更多细节以避免重复,任何在其他页面上创建指向此页面特定主题的热链接的人都应注意,某些主题的标题可能会发生更改。(讨论请参见 Talk:Chrome OS devices/Custom firmware)

为什么要刷入自定义固件?

优点

  • 允许使用 UEFI coreboot 载入器(配合 MrChromebox 的自定义固件)。
  • 可能减少启动时间。
  • 移除一些用户觉得烦人的开发者模式屏幕。
  • 在默认未激活 VMX 的型号中启用 VMX。
  • 修复一些问题(例如挂起)。

缺点

  • 危险,有使设备无法使用的潜在风险。
  • 无法启动原厂 Chrome OS(您可以安装 Arnold the Bat 的 Chromium OS 版本[死链接 2024-10-12—HTTP 404],如果用户需要,可以通过脚本升级到完整的 Chrome OS)。
  • 可能出现自定义 BIOS 特有的错误。

刷入自定义固件

刷入自定义固件有几种方法:

  • 使用 MrChromebox 的 固件工具脚本
  • 使用 John Lewis 的脚本。
  • 手动使用 flashrom,在这种情况下,您需要自己获取固件或从 coreboot 源代码编译(官方Chromium OS 分支)。
注意 对于版本大于 4.4 的 Linux 内核,CONFIG_IO_STRICT_DEVMEM 这个新的内核安全措施可能会导致 flashrom 停止工作。在这种情况下,您可以尝试将 iomem=relaxed 添加到您的内核参数中。 [1]

禁用硬件写保护

请参阅 固件写保护 部分的 禁用硬件写保护

使用 MrChromebox 的固件工具脚本进行刷入

固件介绍

MrChromebox 为 Chromebook 和 Chromebox 提供的固件与其他第三方自定义固件相比,有一些不同之处,即:

  • 通过 Tianocore coreboot 载入器实现的 UEFI
  • 为部分支持设备的嵌入式控制器 (EC) 提供更新,解决了其他自定义固件的一些相关问题。
  • 基于最新的 coreboot 上游版本构建,而不是 Google 提供的已冻结源代码快照。
  • 源代码和构建脚本可在 github 上获取。

理解脚本

MrChromebox 的固件工具脚本做什么?
  • 自动下载静态编译的 64 位版本的 chromium flashromcbfstoolgbb_utility
  • 自动检测您的设备/主板名称、当前固件和硬件写保护状态。
  • 提供将当前固件备份到 USB 的选项(在刷入完整/自定义 UEFI 固件时)。
  • 根据需要自动禁用、清除、设置和启用软件写保护。
  • 提供 RW_LEGACY、BOOT_STUB 和 UEFI Full ROM 固件之间的选择(可用类型取决于设备)。
  • 提供在 Chrome OS 之外设置原厂固件 GBB 标志的能力。
  • 提供移除开发者模式白色启动画面(仅限部分型号)。
  • 写入并验证自定义固件。
该脚本不做什么?
  • 不会为您制作三明治。
警告 如果您正在刷入自定义固件,请做好设备变砖的可能性,并熟悉 修复变砖方法

刷入固件

请查看 支持设备列表,确保您的设备受支持。对于某些设备,还提供了一个旧版 SeaBIOS (非 UEFI) 固件,尽管这些 已弃用 并且通常不会再获得更新。旧版固件映像也不提供嵌入式控制器更新。

如果您的设备有 UEFI ROM,您可以使用 固件工具脚本 刷入 Full ROM 固件(确保您已移除设备上的固件写保护螺丝)。成功刷入固件后,您可以按照 安装指南 在任何 UEFI 计算机上安装 Arch Linux。 Systemd-boot 是推荐的 引导加载程序,因为它默认将自身安装在 esp/EFI/Boot/BOOTX64.EFI,这是此固件默认尝试引导的路径。

从 Arch Linux 使用脚本

您需要安装 dmidecodewhich。此外,为了确保 flashrom 能正确刷入固件,需要同时使用 nopatiomem=relaxed 内核参数引导。这是由于脚本使用的 chromium 版 flashrom 存在一个 问题,而 chromium 版是必需的,因为上游 flashrom 无法用于设置/清除软件写保护状态或范围。

使用 John Lewis 的脚本进行刷入

警告 请勿在禁用硬件写保护之前运行脚本。

理解脚本

John Lewis 的 flash_chromebook_rom.sh 脚本做什么?
  • 自动下载 Chromium OS 64 位版本的 flashrom
  • 备份您的当前固件。
  • 通过运行 # ./flashrom --wp-disable 禁用软件写保护。
  • 使用 dmidecode 检查 Chromebook 产品名称并下载正确的自定义固件。
  • 写入自定义固件。
该脚本不做什么?
  • 不询问确认。
  • 不检查硬件写保护是否已禁用。
  • 不确认自定义固件与特定 Chromebook 子型号的兼容性。
结论
注意 John Lewis 于 2017 年 12 月关闭了他的 Google+ 社区;他的固件现已假定不受支持。
警告 如果您正在刷入自定义固件,请做好设备变砖的可能性,并熟悉 修复变砖方法

在 Chrome OS 中运行脚本

  • 通过 VT-2 (Ctrl+Alt+→) 访问您的命令提示符。
  • 输入 John Lewis 网站上的 Download ROM 页面 上显示的命令[死链接 2025-08-15—SSL 错误]
    注意 不在此处发布命令的原因是强制您访问网站并在继续之前阅读该页面。
  • 脚本退出后,在重启系统之前,将备份的固件复制到外部存储。

现在您的设备上应该安装了自定义固件,祈祷好运并重启。

如果您在安装过程中刷入了固件,则继续按照 Chrome OS 设备#安装 Arch Linux 进行操作;如果自定义固件正确引导了安装介质,您可能希望重新启用硬件写保护。

在 Arch Linux 中运行脚本

  • 安装 dmidecode
  • 输入 John Lewis 网站上的 Download ROM 页面 上显示的命令[死链接 2025-08-15—SSL 错误]
    注意 不在此处发布命令的原因是强制您访问网站并在继续之前阅读该页面。
  • 脚本退出后,在重启系统之前,将备份的固件复制到外部存储。

现在您的设备上应该已经安装了自定义固件,祈祷好运并重启。

如果自定义固件正确引导了 Arch Linux,您可能希望重新启用硬件写保护,尽管 John Lewis 表示 这是不必要的,并且只会使将来升级更加困难。但是,如果您不重新启用它,您需要小心不要使用 flashrom。

手动使用 flashrom

不建议使用上游的 flashrom 包,因为它缺少 --wp-disable--wp-status 等操作,并且除非 ROM 已通过外部方式(即通过 SPI 和 SOIC 夹子使用另一个设备刷写)预先编程,否则它无法成功将固件写入 Chromebook 的 ROM。这就是为什么推荐使用 Chromium OS 的 flashrom

获取 Arch Linux 的 flashrom

https://johnlewis.ie/flashrom 下载 64 位静态链接的 Chromium OS flashrom 版本[死链接 2025-08-15—SSL 错误] 并使其 可执行

获取 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' 来查找您的固件芯片。

刷回原厂固件

注意 以下假设您的设备未变砖;如果变砖了,请跳转至 修复变砖的 Chrome OS 设备

禁用硬件写保护,并按照 手动使用 flashrom 刷入固件 的说明来刷入您原厂固件的备份。

修复变砖的 Chrome OS 设备

注意 本指南无意成为一个详尽的教程,仅为您提供刷写变砖 Chromebook 固件过程的基本了解。ArchWiki 不是详细硬件黑客指南的场所,因此没有必要扩展此主题。

所需工具

  • 编程器, Raspberry PiBus Pirate 都在 flashrom wiki 上被提及为兼容设备[死链接 2025-08-15—HTTP 404]Bus Pirate 更受欢迎,因为它允许您使用支持 --wp-disable--wp-status 标志的 Chromium OS 版 flashrom
  • 推荐使用 SOIC 夹,参见 [2]
  • 母对母跳线。
  • 如果您想使用 Chromium OS 的 flashrom,则需要另一台 Linux 机器(32 位或 64 位)。

修复过程的总体思路

  • 将跳线连接到编程器和 SOIC 夹。
  • 将 SOIC 夹连接到 ROM 芯片。
  • 如果您的编程器运行 Linux(Raspberry Pi),则加载 spi 模块。
  • 如果您的编程器不运行 Linux,则将其连接到您的 Linux 机器。
  • 使用 flashrom 写入固件,您可能需要通过运行带 --wp-disable 标志的 flashrom 来禁用软件写保护(这就是为什么 Chromium OS 版 flashrom 很方便)。

固件写保护

注意 此主题上的信息仅旨在让您对 Chromebook 中的写保护功能有一个基本了解。ArchWiki 不是详细硬件黑客指南的场所,因此没有必要扩展此主题。

固件(coreboot 及其载入器)存储在 SPI 闪存芯片(通常是 SOIC8)上,该芯片的某些部分受到硬件和软件措施的组合保护,防止写入。

只要写保护未被禁用并且受保护的范围未被清除(设置为 0,0),固件未受保护(RW)部分(主要是 SeaBIOS)的任何更改都可以通过已启动的 Chrome OS 安装或 Chrome OS 恢复介质来恢复。

固件写保护有两个部分:硬件和软件。

硬件写保护

硬件写保护是一种防止写入软件保护特殊寄存器的电路;它通常通过将 SOIC8 芯片上的 !WP 引脚接地来强制执行。因此,硬件写保护仅直接保护这些特殊寄存器,但间接也保护了固件芯片中的数据。

早期的 Chromebook 型号(2012-2013)使用跳线或开关来实现硬件写保护。大多数 2014-2017 年的型号使用螺丝,而 Kabylake/Apollolake(及更新)型号(2017 年至今)使用电池感应线(因此断开电池连接是禁用硬件写保护所必需的)。

软件写保护

软件写保护是通过固件芯片上的一个特殊寄存器实现的,该寄存器包含一个启用/禁用标志,以及一个或多个要保护/标记为只读的地址范围。

理解禁用写保护的过程

要完全禁用写保护,需要执行以下操作:

  • 禁用特殊软件寄存器的硬件写保护。
  • 更改特殊软件寄存器的值以禁用软件写保护,并清除受保护地址的范围,使其不保护任何数据(起始和结束都为 0)。

结论:如果禁用了软件写保护并且没有重新启用它,那么即使重新启用了硬件写保护,固件芯片也将保持不受保护。

禁用硬件写保护

要查找硬件写保护螺丝/开关/跳线的位置以及如何禁用它,请访问您 Chromebook 型号的 ArchWiki 页面(参见 Chromebook 型号)。如果 ArchWiki 上没有您设备的信息,请查阅 Chrome OS 设备开发者信息coreboot 的 Chromebook 页面

禁用软件写保护

注意 如果使用 MrChromebox 的固件工具脚本刷写固件或设置设备上的 GBB 标志,则无需(也不推荐)手动禁用软件写保护。固件工具脚本将根据需要自动禁用/清除/设置/启用软件写保护。

Chromium OS 的 flashrom 可以操作软件写保护特殊寄存器。

  • 读取软件写保护特殊寄存器的状态。
# flashrom --wp-status
  • 禁用或启用软件写保护。
# flashrom --wp-disable
  • 更改软件写保护地址范围。
# flashrom --wp-range 0 0

有关 Chromium OS 的 flashrom 及其获取方式的更多详情,请参阅 #手动使用 flashrom