在聯想ThinkPad X230上刷寫Coreboot
警告:本人不對因爲刷機失敗而導致的後果及事故負責,建議刷機之前備份原廠韌體。別說我沒有警告過你喔!
準備工作(難度極高,請慎重)
首先,我們需要一卷膠帶;
其次是一些螺絲刀,你會需要將你的筆電大卸八塊;
一個CH341a編程器(有夾子的最好了!)

之後是PC上的工作,我使用Debian來完成這次工作:
首先,打開終端機,安裝下列軟體:
sudo apt install bison build-essential curl flashrom flex git gnat libncurses5-dev m4 reneme zlib1g-dev
你完成了嗎?讓我們繼續吧。
其次,我們將克隆Coreboot的源碼至本機:
git clone https://review.coreboot.org/coreboot
git submodule update --init --checkout
通過"make nconfig"來配置coreboot:
注意⚠️:圖片中有類似「[*]」的符號代表此項被選中。
在“通用(General setup)”那裡選擇“使用本機CMOS設定值”;
在“主機板(mainboard)”選擇“供應商(vendor)”為“Lenovo”,機型(model)那裡選擇“ThinkPad X230”;
在“ROM大小(ROM chip size)”選擇“12MB”;
“CBFS文件系統大小(Size of CBFS filesystem in ROM)”鍵入“0x100000”
在“晶片組”設定中,選擇這些設定,為X230啟用CPU微碼和其他韌體:
Include CPU microcode in CBFS (Generate from tree)
選擇: Add Intel descriptor.bin file
(3rdparty/blobs/mainboard/$(MAINBOARDDIR)/descriptor.bin)
選擇: Add Intel ME/TXE firmware
(3rdparty/blobs/mainboard/$(MAINBOARDDIR)/me.bin)
選擇: Verify the integrity of the supplied ME/TXE firmware
選擇: Strip down the Intel ME/TXE firmware
選擇: Add gigabit ethernet firmware
(3rdparty/blobs/mainboard/$(MAINBOARDDIR)/gbe.bin)
之後是“設備(Devices)”選項。我們需要啟用Coreboot的核顯支援,並添加VBIOS表:
Graphics initialization (Use libgfxinit)
Display
Framebuffer mode (Linear “high-resolution” framebuffer)
選擇: Enable PCIe Clock Power Management
選擇: Enable PCIe ASPM L1 SubState
Add a Video Bios Table (VBT) binary to CBFS
(src/mainboard/$(MAINBOARDDIR)/data.vbt)


然後是“驅動程式(Generic Drivers)”,鑒於ThinkPad的鍵盤走PS/2通道,我們必須啟用PS/2設備支援;
現在,我們來到了“Payload”這一選項。從這裡選擇的項目,將會決定你的X230支援什麼方式啟動:
比較流行的兩個選擇是“SeaBIOS”和“Tianocore EDK II”,前者支援BIOS啟動,後者支援UEFI啟動。
你可以在這裡了解CoreBoot支援的Payloads:
(來源:GNU/Genshin作業系統維基大典)
這裡是一副使用“SeaBIOS”的配置,可以參考:
配置完成了,保存配置文件。
之後還需要鍵入“make ~/X230/coreboot/util/ifdtool“來從專有BIOS中提取驅動程式。
1.拆解筆記本
萬事開頭,先拆電池!然後卸下後蓋板;然後從正面拆掉鍵盤,請務必小心。
鍵盤拆除後,就可以來解決觸摸板了,輕輕地翹起它,然後移走。
注意到那塊黑色膠布了嗎,撕下來,就可以看到BIOS晶片了。
2.檢查電壓
因為一些CH341a可能會輸出5v電壓,而我們需要給晶片提供3.3V的電壓,因此需要對編程器的引腳進行測量。
如果你的編程器輸出電壓為5v,你可以嘗試刷寫了...但是我建議你修補它。
如果沒有問題,就找出那根夾子線來,把夾子夾在BIOS晶片上,檢查是否連結好,我選擇的是上面那顆晶片;
將線連接到右側針腳上:
完成後應該是這樣:
3.驗證連接
準備好後,將編程器與PC連接。在終端機鍵入此命令:
sudo flashrom -p ch341a_spi
用同樣的方法,對下面的晶片再來一次:
sudo flashrom -p ch341a_spi -r bottom.bin
4.備份BIOS
哎呀!其實我本應該把這一步放在第三步的。既然我們可以與晶片交流了,我們就可以備份原廠的BIOS了:
mkdir -p ~/X230/bios-backup && cd ~/X230/bios-backup
sudo flashrom -p ch341a_spi -r factory_top-1.bin -c "MX25L3206E/MX25L3208E"
sudo flashrom -p ch341a_spi -r factory_top-2.bin -c "MX25L3206E/MX25L3208E"
sudo flashrom -p ch341a_spi -r factory_bottom-1.bin -c "MX25L6406E/MX25L6408E"
sudo flashrom -p ch341a_spi -r factory_bottom-2.bin -c "MX25L6406E/MX25L6408E"
cat factory_bottom-1.bin factory_top-1.bin > X230-bios.rom
保留好這些文件,如果Coreboot有問題,可以用原廠BIOS救急的。
5.準備Coreboot
cp ~/X230/bios-backup/X230-bios.rom ~/X230/coreboot/util/ifdtool/
cd ~/X230/coreboot/util/ifdtool/
(1)將BIOS複製到Coreboot的源代碼下,之後鍵入“make”來編譯ifdtool,我們要用這個程式來提取BIOS的二進制文件:
./ifdtool -x X230-bios.rom
echo *.bin
mkdir -p ~/X230/coreboot/3rdparty/blobs/mainboard/lenovo/x230
mv ~/X230/coreboot/util/ifdtool/*.bin ~/X230/coreboot/3rdparty/blobs/mainboard/lenovo/x230
cd ~/X230/coreboot/3rdparty/blobs/mainboard/lenovo/x230
rename 's/.{14}//' *.bin
mv flashdescriptor.bin descriptor.bin
mv intel_me.bin me.bin
這些是你應該得到的文件:
bios.bin descriptor.bin gbe.bin me.bin
(2)編譯Coreboot
參考“準備工作”進行修改配置文件。完成後鍵入“make”開始編譯吧!
(3)拆分文件
我們需要將Coreboot拆分成兩部分:一個8MB的文件給底下的晶片,另一個4MB的給上面的BIOS晶片:
dd if=coreboot.rom of=coreboot-bottom.rom bs=1M count=8
dd if=coreboot.rom of=coreboot-top.rom bs=1M skip=8
6.燒寫
上方晶片:
time sudo flashrom --chip "MX25L3206E/MX25L3208E" --programmer ch341a_spi --write coreboot-top.rom
下方晶片:
time sudo flashrom --chip "MX25L6406E/MX25L6408E" --programmer ch341a_spi --write coreboot-bottom.rom
然後就可以開機試試了!
如果你成功了,就可以為你的ThinkPad安裝作業系統了!這裡是EDKPiepaint,登出,祝你有個美好的刷機時刻!

浙公网安备 33010602011771号