警告:作者在笔记本看似正常工作后编写了此指南,未来可能会遇到问题。作者不对按照此指南操作造成的任何损害负责。
前言
我曾在我的 Lenovo ThinkPad X200 和 HP EliteBook 820 G2 上刷写过 Libreboot,但它们仅支持 SeaBIOS,而 SeaBIOS 仅支持 CSM。Libreboot 文档说明其 U-Boot 支持 EFI 启动,但我从未成功。Tianocore 是自由软件社区中成熟的 UEFI 实现,我最近发现可以使用 EDK II(Tianocore 的一个项目)构建并刷写 coreboot,从而获得 EFI 启动支持。
昨天,我完成了两台机器的构建与刷写,现分享操作流程。
Lenovo ThinkPad X200
对于 Lenovo ThinkPad X200,步骤相对简单,可以直接在原厂固件上刷写。如果你当前使用 Libreboot,我建议先恢复原厂固件,因为直接覆盖 Libreboot 我未测试过。
步骤 1:检查芯片容量
使用 iomem=relaxed 参数启动机器。如果你使用 Debian 13 或其仓库已包含 flashprog,可直接安装而无需编译源代码:
# apt install flashprog
在机器上执行:
# flashprog -p internal
你将看到芯片容量。如果是 4 MiB,你的机器可能不支持 EDK II 下的 coreboot,固件构建很可能失败,但仍可尝试。如果是 8 MiB,则支持——我的 X200 为 8 MiB。
步骤 2:构建固件
获取并准备 coreboot:
$ git clone https://review.coreboot.org/coreboot
$ cd coreboot
$ make help_toolchain
$ make crossgcc-i386 CPUS=$(nproc)
$ make -C payloads/coreinfo olddefconfig
$ make -C payloads/coreinfo
打开 menuconfig:
$ make menuconfig
操作如下:
- 在 Mainboard 部分选择 Lenovo, ThinkPad X200 / X200s / X200t 及芯片容量。
- 在 Payload 部分选择 edk2,禁用 Enable UEFI Secure Boot support,启用 Disable TPM support in edk2。
- 其他保持默认,退出并保存配置。
然后运行:
$ make -j$(nproc)
固件将生成在 ./build/coreboot.rom。
步骤 3:刷写固件
在另一台机器上准备 flashprog,可通过包管理器安装或自行编译。
按照 此指南 的第 2、5 步以及第 6 步前半部分操作,然后仅刷写 bios 区域:
# flashprog -p serprog:dev=/dev/ttyACMx,spispeed=8M -w /path/to/rom/file.rom -c "MX25L6405D" --ifd -i bios
启动机器,应显示 coreboot Logo。完成。
HP EliteBook 820 G2
该流程比 Lenovo ThinkPad X200 稍复杂。
步骤 1:刷写 Libreboot
我不清楚如何在原厂固件上刷写 coreboot,请先按 此指南 刷写 Libreboot,然后再在其上刷写 coreboot。
步骤 2:提取 blobs
步骤 2.1:提取芯片内容
多次提取芯片,并比较 ROM 文件的哈希:
# flashprog -p serprog:dev=/dev/ttyACMx,spispeed=8M -r /path/to/rom/file1.rom -c "MX25L12805D"
# flashprog -p serprog:dev=/dev/ttyACMx,spispeed=8M -r /path/to/rom/file2.rom -c "MX25L12805D"
...
$ sha256sum /path/to/rom/file1.rom
$ sha256sum /path/to/rom/file2.rom
...
哈希不同则重复,若一致则继续。
步骤 2.2:从 ROM 文件提取 blobs
提取 memory reference code 和 external reference code:
$ ./build/cbfstool /path/to/extracted/rom/file.rom extract -n mrc.bin -f /path/where/you/want/to/store/your/mrc.bin -m x86
$ ./build/cbfstool /path/to/extracted/rom/file.rom extract -n fallback/refcode -f /path/where/you/want/to/store/your/refcode.bin -m x86
步骤 3:构建固件
获取并准备 coreboot:
$ git clone https://review.coreboot.org/coreboot
$ cd coreboot
$ make help_toolchain
$ make crossgcc-i386 CPUS=$(nproc)
$ make -C payloads/coreinfo olddefconfig
$ make -C payloads/coreinfo
打开 menuconfig:
$ make menuconfig
操作如下:
- 在 Mainboard 部分选择 HP, EliteBook 820 G2 及芯片容量,设置 Size of coreboot owned area in ROM 为
0x600000。 - 在 Chipset 部分选择步骤 2.2 提取的 memory reference code 和 external reference code。
- 在 Payload 部分选择 edk2。
- 其他保持默认,退出并保存。
然后运行:
$ make -j$(nproc)
固件位于 ./build/coreboot.rom。
步骤 4:刷写固件
在另一台机器上准备 flashprog,连接编程器,仅刷写 bios 区域:
# flashprog -p serprog:dev=/dev/ttyACMx,spispeed=8M -w /path/to/rom/file.rom -c "MX25L12805D" --ifd -i bios --no-verifyall
请勿移除 --no-verifyall,否则可能出错。即使使用该选项,flashprog 仍会在刷写后验证。
启动机器,应显示 coreboot Logo。完成。