Chrome 操作系统设备/自定义固件

来自 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 ⓘ],如果用户需要,应该可以使用脚本将其升级到完整版的 Chrome OS)。
  • 可能会出现自定义 BIOS 特有的错误。

刷入自定义固件

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

注意: 对于 Linux 内核版本高于 4.4,CONFIG_IO_STRICT_DEVMEM 一项新的内核安全措施可能会导致 flashrom 停止工作,在这种情况下,您可以尝试将 iomem=relaxed 添加到您的内核参数中。[1][死链 2025-01-19 ⓘ]

禁用硬件写保护

请参阅 禁用硬件写保护,位于 固件写保护 部分。

使用 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 固件之间的选择(可用类型因设备而异)。
  • 提供在 ChromeOS 之外设置原厂固件的 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 存在 问题[死链 2025-01-19 ⓘ],这是必需的,因为上游 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 网站上的下载 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' 查找您的固件芯片

刷回原厂固件

注意: 以下假设您的设备没有变砖,如果它确实变砖了,请跳转到 修复 Chrome OS 设备变砖

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

修复 Chrome OS 设备变砖

注意: 这并非旨在成为详尽的指南,而只是让您基本了解将固件刷入变砖的 Chromebook 的过程。ArchWiki 不是详细硬件破解指南的场所,因此扩展此主题没有意义。

所需工具

  • 编程器,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 方便的原因)。

关于修复变砖的推荐阅读

固件写保护

注意: 关于此主题的信息仅旨在让您基本了解 Chromebook 中的写保护功能。ArchWiki 不是详细硬件破解指南的场所,因此扩展此主题没有意义。

固件(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 页面

禁用软件写保护

注意: 如果使用 MrChromebox 的固件实用程序脚本来刷入固件或设置设备上的 GBB 标志,则无需(也不建议)手动禁用软件写保护。固件实用程序脚本将根据需要自动禁用/清除/设置/启用软件写保护。

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

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

有关 Chromium OS 的 flashrom 以及如何获取它的更多详细信息,请参阅 #手动使用 flashrom