Chrome OS 设备/自定义固件

出自 ArchWiki
警告: 本文依赖于第三方脚本和修改,可能会对您的硬件或数据造成不可修复的损坏。

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

原因: 本页面的主题是从 Chromebook 页面移出的,因为它过于臃肿,难以导航和跟踪。此页面本身仍然需要更多的工作,我们可以从 Chromebook 页面移出更多细节以避免重复。任何在其他页面中创建指向此页面特定主题的热链接的人都应该意识到某些主题的标题可能会更改。(在 Talk:Chrome OS 设备/自定义固件 中讨论)

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

优点

  • 允许使用 UEFI coreboot 负载(使用 MrChromebox 的自定义固件)。
  • 可以缩短启动时间。
  • 移除某些用户觉得烦人的开发者模式屏幕。
  • 在默认情况下未激活 VMX 的型号中启用 VMX。
  • 修复一些问题(如挂起)。

缺点

  • 危险,并且有可能使设备无法使用。
  • 无法启动原厂 Chrome OS(您可以安装 Arnold the Bat’s Chromium OS build[死链 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 可用,您可以使用固件实用工具脚本刷入完整 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