2023-11-07

目录

1. coreboot + SeaBios 刷入 THINKPAD X230

coreboot 是一个可扩展的固件平台. Thinkpad x230 刚好支持刷入.

1.1. 前期准备

# 安装依赖
sudo pacman -S base-devel curl git gcc-ada ncurses zlib
# 克隆代码
git clone https://review.coreboot.org/coreboot
cd coreboot

# 拉取子模块
git submodule update --init --checkout

# 构建编译工具链
make crossgcc-i386 CPUS=$(nproc)

1.2. 配置 config

使用已有的 config 文件

cat configs/builder/config.lenovo_x230 > .config
make nconfig

进入 tui 配置 Payload: Payload ---> SeaBIOS version (1.16.2) > 可选有很多种,Payload 主要为引导程序如 SeaBIOS,edk2,grub2 等. > 经过测试 edk2 编译后体积较大无法打包入 rom. F6 保存退出

1.3. 读取 BIOS 文件

根据 chuck Nemeth wiki 拆开外壳->连接烧录器.(可以不使用杜邦线外接,直接使用25L芯片底座,连接夹线器进行烧录) 夹到上方芯片,读取数据(多读几次,使用 cmp 对比是否读取有误)

cd ../
mkdir biso-backups/
cd biso-backups/
sudo flashrom -p ch341a_spi -r x230-top.bin

断开烧录器,夹到下方芯片(多读几次,使用 cmp 对比是否读取有误)

sudo flashrom -p ch341a_spi -r x230-bottom.bin

1.4. 合并 BIOS

cat x230-bottom.bin x230-top.bin > x230-bios.rom

1.5. 解包 BIOS 并保存文件

cp x230-bios.rom ../coreboot/util/ifdtool
cd ../coreboot/util/ifdtool
make
./ifdtool -x x230-bios.rom
perl-rename 's/.{14}//' *.bin
mkdir ../../site-local
cp *.bin ../../site-local
cd ../../
mv -i site-local/flashdescriptor.bin site-local/descriptor.bin
mv -i site-local/intel_me.bin site-local/me.bin
# 开始编译
make -j

1.6. 配置 rom

确认上一步编译完成后生成了 build/coreboot.rom. 配置 rom 可以用 nvramtool:

cd util/nvramtool
make
./nvramtool -C ../../build/coreboot.rom -a

# Set gfx_uma_size to max
./nvramtool -C ../../build/coreboot.rom -w gfx_uma_size=224M

1.7. 拆解 rom 以备烧录

# coreboot/build dir
cd ../../build
cp -i coreboot.rom ../../rom
cd ../../rom
bash split.sh

1.8. 烧录

bash flash_top.sh
bash flash_bottom.sh

脚本如下

dd bs=1M count=8 if=coreboot.rom of=bottom.rom
dd bs=1M skip=8 if=coreboot.rom of=top.rom
sudo flashrom -p ch341a_spi --write top.rom -c "MX25L3205D/MX25L3208D"
sudo flashrom -p ch341a_spi --write bottom.rom -c "MX25L6406E/MX25L6408E"

1.9. 装回外壳

1.10. 通过 flashrom 刷写 rom

# 解决 /dev/mem mmap failed: Operation not permitted
sudo modprobe -r lpc_ich
sudo flashrom -p internal

1.11. 后续工作

  • [X] 引导 grub 硬盘
  • [X] 启动进入 linux
  • [X] 通过 flashrom 自行刷写 rom

作者: xiliuya

Created: 2023-11-08 Wed 13:07