1. Libreboot简介与安装准备

任务目标

本案例要求你完成两项工作:第一,理解Libreboot是什么、它与coreboot的关系以及其硬件支持边界;第二,在你自己的机器上完成安装前的软硬件准备,并验证准备结果。完成本案例后,你应能准确判断一台电脑是否可能运行Libreboot,并拥有一台已就绪的安装主机。

Libreboot项目背景与硬件边界

Libreboot是coreboot的一个发行版,目标是提供完全自由的固件:它移除了coreboot中所有非自由二进制blob(如CPU微码补丁、VGA BIOS、内存初始化二进制),并默认构建为带有简单文本菜单的BIOS/UEFI替代品。这意味着Libreboot对硬件的要求比coreboot更严格——只有那些不需要任何非自由初始化代码即可启动的主板才被支持。

截至当前版本,支持的平台集中在Intel Sandy Bridge/Ivy Bridge(如ThinkPad X220、T420)、AMD Family 15h/16h(如ASUS KGPE-D16服务器主板)以及部分ARM Chromebook。所有支持的设备列表、各自所需的外部 flashing 设备型号和布线方式,都维护在官方文档的 Hardware compatibility list 页面中。你需要以该页面为准,而不是依赖本文或任何第三方说法。

安装准备:硬件与软件清单

Libreboot不能像普通软件那样在操作系统内自行刷写(部分设备支持内部刷写,但首次安装几乎都需要外部编程器)。准备阶段需要确认以下内容:

类别必需项用途
目标硬件一台在官方支持列表中的设备被刷写对象
编程器CH341A或Raspberry Pi(GPIO直连)外部读取/写入flash芯片
连接线杜邦线、Pomona 5250测试夹或SOP8转DIP8转接板连接编程器与主板flash芯片
主机系统Linux发行版(Debian/Ubuntu/Fedora均可)运行flashrom工具
软件flashrom、git、build-essential读取/写入flash、获取Libreboot源码

主机环境准备与验证

以下命令在安装主机(不是目标设备)上执行。先安装必要工具:

sudo apt update
sudo apt install -y flashrom git build-essential
flashrom --version

验证通过条件:flashrom --version 输出包含版本号且无“command not found”错误。接着确认编程器被系统识别(以CH341A为例):

lsusb | grep -i ch341

若输出包含类似 1a86:5512 的设备行,说明USB编程器已被识别。对于Raspberry Pi方案,则跳过此步,直接检查GPIO引脚定义是否与目标主板flash芯片的datasheet对应。

获取Libreboot源码与固件镜像

源码和预编译镜像都从官方仓库获取。预编译镜像适合直接刷写,源码适合需要自定义配置的场景。本案例只需下载并校验完整性:

git clone https://notabug.org/libreboot/lbmk.git
cd lbmk
git tag -l | tail -5

预期输出:显示最近的版本标签(如 20241206 或更新),证明源码树完整。若需要预编译镜像,前往Libreboot官网下载对应设备的ROM文件,并用 sha256sum 与官网公布的校验值比对。

目标设备flash芯片定位

在目标设备上(若当前系统仍可启动),运行以下命令确认flash芯片型号和当前固件状态:

sudo flashrom -p internal --ifd -i bios

该命令尝试读取当前BIOS区域。预期输出会显示检测到的flash芯片型号(如 Winbond W25Q64)和读取结果。如果命令失败并提示“No EEPROM/flash device found”,说明内部读取被禁止(常见于新机器),这进一步确认必须使用外部编程器。此步骤仅用于信息收集,不写入任何数据。

验证清单与通过标准

  1. 目标设备型号出现在Libreboot官方支持列表中——在官网硬件页面逐项核对,不凭记忆判断。
  2. 安装主机上 flashrom --version 正常输出。
  3. CH341A方案下 lsusb 能看到设备;树莓派方案下GPIO连线已按文档接好。
  4. git clone 成功且 git tag -l 显示版本标签。
  5. 目标设备上 flashrom -p internal --ifd -i bios 能报告芯片型号,或明确报错说明无法内部访问(两者均视为有效结果,分别对应不同刷写路径)。

以上五项全部满足,即完成本案例的安装准备。下一步(后续案例)将涉及备份原始固件和首次外部刷写。