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