在聯想ThinkPad X230上刷寫Coreboot

在聯想ThinkPad X230上刷寫Coreboot

 

5 人赞同了该文章

 

警告:本人不對因爲刷機失敗而導致的後果及事故負責,建議刷機之前備份原廠韌體。別說我沒有警告過你喔!

準備工作(難度極高,請慎重)

首先,我們需要一卷膠帶

其次是一些螺絲刀,你會需要將你的筆電大卸八塊;

一個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,登出,祝你有個美好的刷機時刻!

发布于 2023-08-12 19:10・山东

posted on 2025-04-22 01:19  漫思  阅读(74)  评论(0)    收藏  举报

导航