国产av一二三区|日本不卡动作网站|黄色天天久久影片|99草成人免费在线视频|AV三级片成人电影在线|成年人aV不卡免费播放|日韩无码成人一级片视频|人人看人人玩开心色AV|人妻系列在线观看|亚洲av无码一区二区三区在线播放

網(wǎng)易首頁 > 網(wǎng)易號 > 正文 申請入駐

給一臺 17 年前的 ThinkPad 刷入開源固件后,我讓它在 2025 年「重獲新生」

0
分享至

編注:我們會不定期挑選 Matrix 的優(yōu)質(zhì)文章,展示來自用戶的最真實(shí)的體驗(yàn)和觀點(diǎn)。 文章代表作者個(gè)人觀點(diǎn),少數(shù)派僅對標(biāo)題和排版略作修改。

我手上有一臺 ThinkPad X200,誕生于 2008 年,是當(dāng)年的旗艦筆記本。十幾年過去了,依然寶刀不老,長期以來一直都是我寫程序?qū)懻撐牡闹髁Α?/p>

不過,前主人給它設(shè)置了超級管理員密碼,由于相隔已久,早已忘了密碼。幸好超級密碼只鎖定 BIOS 設(shè)置,不影響進(jìn)系統(tǒng),倒也相安無事。


然而,有密碼始終影響我對筆記本的掌控。我嘗試像臺式機(jī)那樣,拔掉 BIOS 電池來清除密碼。殊不知,X200 是商務(wù)筆記本系列,聯(lián)想早已經(jīng)做足了防范。結(jié)果很慘:每次開機(jī)都得輸入管理員密碼,否則就無法引導(dǎo)進(jìn)系統(tǒng)!

最終,我決定,刷 coreboot,一勞永逸解決。

coreboot 是一款自由、開源的系統(tǒng)固件,是 BIOS 和 UEFI 的替代。它早已對 ThinkPad X200 提供完備的支持。何不用它,繞過密碼驗(yàn)證,直接引導(dǎo)系統(tǒng)?

準(zhǔn)備工具

BIOS 刷寫需要準(zhǔn)備以下工具:

  • 一臺安裝了 Linux 發(fā)行版的電腦

  • CH341A 編程器

  • SOP-16 夾具

既然電腦無法進(jìn)系統(tǒng),想要刷 BIOS,當(dāng)然離不開編程器了。我選用的是著名的 CH341A「土豪金」編程器,接下來用到的刷寫工具 Flashrom 為它提供了官方支持。

X200 的 BIOS 芯片是「25」型,擁有16根引腳,可以直接通過 SOP-16 夾具來連接編程器。夾具和編程器都可在淘寶購買到。我手上的 X200 為高配版本,芯片容量為 8.0 MiB。

系統(tǒng)環(huán)境方面,選用 Linux 發(fā)行版。通過它來運(yùn)行 Flashrom 來刷寫 BIOS,以及編譯 coreboot。

值得注意的是,coreboot 只提供源代碼,不提供已經(jīng)編譯的固件,所以需要自己編譯。你也許可以選用網(wǎng)上別人編譯好的固件,但它們常常缺少正確的配置,導(dǎo)致功能缺失(例如,無線網(wǎng)卡和藍(lán)牙不能使用)。

編程器連接

CH341A 是編程器的芯片型號,不同的廠家在用 CH341A 設(shè)計(jì)編程器時(shí)可能有不同的外觀,配件也可能有不同的組裝方式,故應(yīng)當(dāng)以資料為準(zhǔn)。編程器的賣家通常會提供完備的資料。

就以我的編程器為例。我手上這臺 CH341A「土豪金」編程器是這樣子的:


左為 CH341A 編程器本體,右為配套的 SOP-16 夾具

卸下鍵盤與掌托

X200 的 BIOS 隱藏在掌托下,需要卸下鍵盤與掌托才能看到 BIOS 芯片。

卸掉筆記本底部除硬盤倉外所有帶三角形標(biāo)記的螺絲(還有一顆螺絲藏在電池倉,需要先卸下電池),然后小心沿著邊緣拆下掌托,即可同時(shí)將鍵盤和掌托卸下。注意不要弄壞鍵盤底部的排線。

高配版的 X200 是帶有指紋傳感器的,它在主板上的接口是一塊可拆卸的芯片,輕輕將它從主板取出。

準(zhǔn)備編程器

編程器右側(cè)有一個(gè)黑色的連接器。先把連接器右側(cè)的手柄向上推,使手柄朝上:


按下圖的方式,將夾具的 8 個(gè)針腳插入連接器左半邊的 8 個(gè)孔位。注意區(qū)分方向,不要接反了。


最后,將手柄向下壓,即可將夾具固定住,這樣編程器與夾具就連接上了。


連接 BIOS 芯片

X200 的 BIOS 芯片位于主板下沿、Intel 南橋芯片左側(cè)。先展示一下芯片的特寫:


紅圈中的芯片就是 BIOS 芯片。右側(cè)為 Intel 南橋芯片。

張開夾子,先讓連著紅色導(dǎo)線的夾板立在芯片右側(cè)(對著南橋芯片那一側(cè)),仔細(xì)對準(zhǔn)芯片的針腳。接著緩緩將夾子夾在芯片上,確保芯片兩側(cè)的針腳都被夾住。一旦夾牢靠,就不容易松動(dòng)。

注意不要把夾子的方向弄反了,否則芯片會識別不出來。

接好之后,將編程器插在電腦的 USB 接口上,確保紅燈亮起。連接完成的效果如下圖所示。


夾具連接示意圖。由于拍攝角度問題,一些細(xì)節(jié)沒能準(zhǔn)確呈現(xiàn)。你可以大致觀察到 BIOS 芯片的位置,以及編程器的連接方式。

備份原機(jī) BIOS

連接編程器后,首先需要備份原機(jī) BIOS ROM。一方面是防止萬一,另一方面是 coreboot 需要使用官方 BIOS 的組件。

檢測芯片型號

首先運(yùn)行以下命令,嘗試讀取 BIOS 芯片,檢測型號,借此檢查連接情況:

sudo flashrom -p ch341a_spi

若一切正常,執(zhí)行結(jié)果如下??梢钥吹?,編程器已經(jīng)識別出了芯片:

flashrom v1.2 on Linux 5.15.65-1-MANJARO (x86_64)

flashrom is free software, get the source code at https://flashrom.org

Using clock_gettime for delay loops (clk_id: 1, resolution: 1ns).

Found Macronix flash chip "MX25L6405" (8192 kB, SPI) on ch341a_spi.

Found Macronix flash chip "MX25L6405D" (8192 kB, SPI) on ch341a_spi.

Found Macronix flash chip "MX25L6406E/MX25L6408E" (8192 kB, SPI) on ch341a_spi.

Found Macronix flash chip "MX25L6436E/MX25L6445E/MX25L6465E/MX25L6473E/MX25L6473F" (8192 kB, SPI) on ch341a_spi.

Multiple flash chip definitions match the detected chip(s): "MX25L6405", "MX25L6405D", "MX25L6406E/MX25L6408E", "MX25L6436E/MX25L6445E/MX25L6465E/MX25L6473E/MX25L6473F"

Please specify which chip definition to use with the -c option.

輸出日志中,不止一個(gè)型號被檢測出來。后續(xù)的操作,我們使用最長串的型號:MX25L6436E/MX25L6445E/MX25L6465E/MX25L6473E/MX25L6473F。

提示: 檢測出多型號是正常現(xiàn)象,因?yàn)锽IOS芯片本身有多種型號定義,僅通過編程器是無法精確識別的。 如果 Flashrom 在運(yùn)行的時(shí)候出錯(cuò),再改用其他列出的型號,如MX25L6406E/MX25L6408E。
開始備份

運(yùn)行以下命令,將整個(gè) BIOS ROM 備份到文件x200_bios.rom中:

sudo flashrom -p ch341a_spi -c "MX25L6436E/MX25L6445E/MX25L6465E/MX25L6473E/MX25L6473F" -r x200_bios.rom

正常情況下,輸出結(jié)果如下所示:

flashrom v1.2 on Linux 5.15.65-1-MANJARO (x86_64)

flashrom is free software, get the source code at https://flashrom.org

Using clock_gettime for delay loops (clk_id: 1, resolution: 1ns).

Found Macronix flash chip "MX25L6436E/MX25L6445E/MX25L6465E/MX25L6473E/MX25L6473F" (8192 kB, SPI) on ch341a_spi.

Reading flash... done.

由于傳輸過程可能存在異常,為保險(xiǎn)起見,多備份幾次,然后比較各個(gè)備份文件(例如,SHA256 校驗(yàn)和)。如果完全相同,則說明備份無誤。

例如,先備份,然后使用 OpenSSL 來比較 SHA256:

# 再備份3次

sudo flashrom -p ch341a_spi -c "MX25L6436E/MX25L6445E/MX25L6465E/MX25L6473E/MX25L6473F" -r x200_bios_2.rom

sudo flashrom -p ch341a_spi -c "MX25L6436E/MX25L6445E/MX25L6465E/MX25L6473E/MX25L6473F" -r x200_bios_3.rom

sudo flashrom -p ch341a_spi -c "MX25L6436E/MX25L6445E/MX25L6465E/MX25L6473E/MX25L6473F" -r x200_bios_4.rom

# 然后,比較它們的SHA256校驗(yàn)和

openssl sha256 x200_bios_*.rom

如果傳輸無誤,則上述文件的 SHA256 值應(yīng)當(dāng)相同,如下:

SHA256(x200_bios.rom)= 038481951bb5d3412392fc1fd02b3996a9ac5394e82aaa4593b84f90362afce4

SHA256(x200_bios_2.rom)= 038481951bb5d3412392fc1fd02b3996a9ac5394e82aaa4593b84f90362afce4

SHA256(x200_bios_3.rom)= 038481951bb5d3412392fc1fd02b3996a9ac5394e82aaa4593b84f90362afce4

SHA256(x200_bios_4.rom)= 038481951bb5d3412392fc1fd02b3996a9ac5394e82aaa4593b84f90362afce4

準(zhǔn)備 coreboot 源代碼

接下來的教程中,假定我們把 coreboot 的源碼目錄放在用戶主目錄下。

克隆源碼

首先,克隆 coreboot 的代碼庫:

git clone --recursive https://github.com/coreboot/coreboot.git coreboot

cd coreboot

如果不小心漏掉了--recursive參數(shù),則同步子模塊:

cd coreboot

git submodule update --init --recursive

準(zhǔn)備交叉編譯器

coreboot 涉及到更底層的系統(tǒng)環(huán)境。為了保證 coreboot 的正常編譯,還需要準(zhǔn)備交叉編譯器。ThinkPad X200 需要使用 i386 的 GCC 編譯器,編譯 32 位的 coreboot。

?? 注意: ThinkPad X200 不支持 64 位的 coreboot。

首先,安裝 GCC Ada 工具鏈。

coreboot 包含一個(gè)顯卡驅(qū)動(dòng):libgfxinit,它可以在 Intel 平臺下初始化集成顯卡或核芯顯卡,使用 Ada 語言的子集 SPARK 編寫。要給交叉編譯器提供 Ada 語言的支持,必須先在當(dāng)前主機(jī)上安裝 GCC Ada 工具鏈。

不同的發(fā)行版有不同的包名,可以在 pkgs.org 網(wǎng)站檢索。例如,在 Arch Linux 中,使用以下命令安裝:

sudo pacman -S gcc-ada

接下來,就可以讓 coreboot 自動(dòng)構(gòu)建交叉編譯器,只需運(yùn)行以下命令:

# 使用單處理器(單個(gè)線程)進(jìn)行構(gòu)建。會很慢!

make crossgcc-i386

# 使用多個(gè)處理器(多個(gè)線程)進(jìn)行構(gòu)建。

make crossgcc-i386 CPUS=$(nproc)

構(gòu)建過程是全自動(dòng)的,一步到位。

準(zhǔn)備 BIOS 組件

coreboot 需要從原機(jī)的官方 BIOS ROM 中提取以下三個(gè)組件:

  • Flash descriptor,存放閃存芯片的布局信息(必選)

  • ME Firmware,即 Intel Management Engine 的固件(可選,提取備用)

  • GbE,有線網(wǎng)卡的配置文件(必選)

上述組件可以直接使用 coreboot 提供的ifdtool來自動(dòng)提取。

編譯ifdtool

進(jìn)入 coreboot 源碼目錄,然后瀏覽到ifdtool的源碼目錄,并編譯:

cd util/ifdtool

make

編譯完成后,當(dāng)前目錄會多出一個(gè)可執(zhí)行文件:ifdtool。為便于使用,可以把它安裝到系統(tǒng)中:

sudo cp ifdtool /usr/bin/

提取組件

瀏覽到存放 BIOS 備份的目錄,運(yùn)行以下命令提?。?/p>

執(zhí)行結(jié)果如下所示:

File x200_bios.rom is 8388608 bytes

Flash Region 0 (Flash Descriptor): 00000000 - 00000fff

Flash Region 1 (BIOS): 00600000 - 007fffff

Flash Region 2 (Intel ME): 00001000 - 005f5fff

Flash Region 3 (GbE): 005f6000 - 005f7fff

Flash Region 4 (Platform Data): 005f8000 - 005fffff

此時(shí),當(dāng)前目錄下就會多出幾個(gè)文件。它們都是提取出的組件,屬于 BIOS ROM 的組成部分。

  • flashregion_0_flashdescriptor.bin

  • flashregion_1_bios.bin

  • flashregion_2_intel_me.bin

  • flashregion_3_gbe.bin

  • flashregion_4_platform_data.bin

把組件放入 coreboot 源碼目錄中

接下來,我們把提取出的組件放入指定目錄中,使 coreboot 可以識別。

首先,進(jìn)入 coreboot 源碼目錄,然后建立下面的子目錄:

mkdir -p 3rdparty/blobs/mainboard/lenovo/x200

然后,把提取出的以下三個(gè)組件改名,放入上述目錄中:


至此,BIOS 組件準(zhǔn)備完成,可以開始后續(xù)的配置了。

配置 coreboot

coreboot 使用 KBuild 來配置,配備一套直觀易用的配置菜單,編譯過 Linux 內(nèi)核的開發(fā)者應(yīng)該不會陌生。接下來,我們將配置 coreboot,打造出功能完備的體驗(yàn),不應(yīng)只滿足于點(diǎn)亮機(jī)器進(jìn)系統(tǒng)。

基本操作

  • 上下移動(dòng)光標(biāo):選擇設(shè)置項(xiàng)

  • Enter:

    • 進(jìn)入子菜單或「多選一(給你多個(gè)選項(xiàng),一次只能選一個(gè))」菜單

    • 確認(rèn)當(dāng)前選項(xiàng)

  • Y/N/空格:勾選(或取消勾選),適用于帶有方括號的項(xiàng)目,方括號里出現(xiàn)星號,表示已選中

  • 連按兩次 ESC:返回上一頁

進(jìn)入配置菜單

進(jìn)入 coreboot 源碼目錄,然后打開配置菜單:

make menuconfig

設(shè)置主板類型

首先,要將 coreboot 的主板類型設(shè)置為 ThinkPad X200。

1. 進(jìn)入一級菜單 Mainboard(主板),然后選擇 Mainboard vendor(主板廠商),按Enter進(jìn)入。在列表中,光標(biāo)定位到Lenovo,按空格選中。

2. 然后,選擇 Mainboard model(主板型號),同樣按Enter進(jìn)入,在列表中,光標(biāo)定位到ThinkPad X200 / X200s / X200t,按空格選中。

選好后,按兩次 ESC,退回主頁面。接下來的步驟都從主頁面開始。

設(shè)置 BIOS 組件

進(jìn)入一級菜單 Chipset(芯片組),然后勾選 Add Intel descriptor.bin file(添加英特爾 descriptor.bin 文件)。

此時(shí),列表下方會多出下面兩個(gè)選項(xiàng):

  • Add Intel ME/TXE firmware(添加英特爾ME/TXE固件)

  • Add gigabit ethernet configuration(添加千兆以太網(wǎng)配置數(shù)據(jù))

為了保證以太網(wǎng)能正常工作,你需要勾選 Add gigabit ethernet configuration。

至于Intel ME/TXE 固件,缺少該固件并不影響系統(tǒng)的使用,可以不勾選。關(guān)于該固件的問題,具體我會在文末「后續(xù)問題」章節(jié)討論。

其余選項(xiàng)保持默認(rèn)值。固件的路徑默認(rèn)均指向3rdparty/blobs/mainboard/lenovo/x200這一目錄的相應(yīng)文件,無需修改。

啟用無線網(wǎng)卡支持

一些型號的 Intel PCIe 無線網(wǎng)卡,如果在 ACPI 和 SMBIOS 中缺少數(shù)據(jù),則操作系統(tǒng)將無法識別它們。為了保證筆記本上安裝的 Intel 網(wǎng)卡可用,需要在 coreboot 中提供對它們的支持。

進(jìn)入一級菜單 Generic drivers(通用驅(qū)動(dòng)),勾選最后一項(xiàng) Support Intel PCI-e WiFi adapters(英特爾 PCIe 無線網(wǎng)卡支持),即可。

啟用二合一網(wǎng)卡藍(lán)牙支持

有別于筆記本常見的二合一無線網(wǎng)卡,X200 采用獨(dú)立的博通藍(lán)牙適配器(BCM2045B),走的是 USB 通道。但部分用戶可能更換了二合一網(wǎng)卡。要想讓這類網(wǎng)卡的藍(lán)牙工作,需要開啟 coreboot 的相關(guān)支持選項(xiàng)。

進(jìn)入一級菜單 Chipset,選擇 Support bluetooth on wifi cards(為搭載于無線網(wǎng)卡上的藍(lán)牙提供支持),按Y勾選即可。

啟用 NVRAM 存儲

coreboot 可以把 BIOS 的參數(shù)保存在 NVRAM 中,這些參數(shù)控制著筆記本的各種特性,比如顯存大小、無線網(wǎng)卡開關(guān)、告警提示音開關(guān)等。

但是,coreboot 默認(rèn)并沒有開啟參數(shù)保存的功能,這將導(dǎo)致所有參數(shù)在每次開機(jī)時(shí)還原為默認(rèn)。并且,還會導(dǎo)致藍(lán)牙指示燈無法點(diǎn)亮。

因此,我們需要手工打開它。具體步驟如下:

1. 進(jìn)入一級菜單 General setup(一般配置),然后選中 Option backend to use(要使用的配置項(xiàng)存儲后端)。

2. 回車,然后在列表中,光標(biāo)定位到 Use CMOS for configuration values(用 CMOS 來保存設(shè)置值),按空格選中,搞定。

讓 coreboot 在引導(dǎo)時(shí)自動(dòng)清空內(nèi)存

筆者在成功編譯 coreboot 后,長期使用 X200 以測試 coreboot 的穩(wěn)定性,結(jié)果遇到了一個(gè)嚴(yán)重的問題:電腦隔三岔五無預(yù)兆重啟,長則開機(jī)十幾分鐘重啟,短則還沒進(jìn)入桌面就重啟,嚴(yán)重影響系統(tǒng)使用。

經(jīng)過一番搜索,知乎網(wǎng)友 flanto 的文章告訴了我答案:

根據(jù)個(gè)人使用經(jīng)驗(yàn),如果沒有啟用開機(jī)清空內(nèi)存功能,就可能出現(xiàn)電腦隨機(jī)重啟現(xiàn)象。個(gè)人猜測,或許是通電后(特別是軟重啟后)內(nèi)存中仍留有少數(shù)“垃圾”數(shù)據(jù),當(dāng)操作系統(tǒng)尋址到這些垃圾數(shù)據(jù)的地址就會發(fā)生錯(cuò)誤。

經(jīng)過測試,答案的確如此,讓 coreboot 每次開機(jī)后清空內(nèi)存,無故重啟的故障終于徹底解決。

依次進(jìn)行以下步驟,開啟 coreboot 的引導(dǎo)時(shí)清空內(nèi)存功能:

進(jìn)入 Security(安全)——Memory initialization(內(nèi)存初始化)菜單,勾選 Always clear all DRAM on regular boot(常規(guī)啟動(dòng)時(shí)總是清空內(nèi)存),保存設(shè)置即可。

啟用顯卡支持

coreboot 有兩種顯卡支持方案:

  • 首選的顯卡支持方案是 VGA Option ROM,即 VBIOS 鏡像。它包含在官方的 BIOS 中,對 ThinkPad X200 的集顯支持最完備最充分。

  • 如果沒有 VGA Option ROM,則可以使用后備方案:libgfxinit,這是使用 Ada 語言編寫的開源顯卡驅(qū)動(dòng),用于為 coreboot 提供基本顯示功能。目前僅支持 Intel 的核顯和集顯。

libgfxinit 與 Linear Frame buffer

先來介紹 libgfxinit。

ThinkPad X200 配備 GM45 集顯,libgfxinit驅(qū)動(dòng) GM45 不在話下。在它的基礎(chǔ)上,再啟用 Linear Framebuffer 功能建立一個(gè)幀緩沖(frame buffer),允許程序直接在 coreboot 中調(diào)用顯卡繪圖,從而使顯卡在系統(tǒng)引導(dǎo)階段發(fā)揮應(yīng)有效能。

具體步驟如下:

  • 進(jìn)入一級菜單 Devices(設(shè)備),選擇 Graphics initialization(圖形初始化)。在選項(xiàng)列表中,光標(biāo)定位到 Use libgfxinit(使用libgfxinit),按空格確認(rèn)。

  • 然后,依次進(jìn)入子菜單 Display(顯示)——Framebuffer mode(幀緩沖模式)。在選項(xiàng)列表中,光標(biāo)定位到 Linear “high-resolution” framebuffer(線性高分辨率幀緩沖)。

  • 之后,在 Framebuffer mode 子菜單中,會多出以下兩個(gè)選項(xiàng),指定為X200顯示器的最佳分辨率即可:

    • Maximum width in pixels(最大像素寬度),指定為1280

    • Maximum height in pixels(最大像素高度),指定為800

至此,coreboot 的顯卡配置完成。

?? 但要注意的是,libgfxinit對顯卡的支持不充分:

  • 它無法實(shí)現(xiàn)縮放顯示,意味著如果操作系統(tǒng)、引導(dǎo)程序(如 Grub、Ventoy)的分辨率小于最佳分辨率,就只能顯示在左上角那一塊。

  • 它支持純字符模式顯示(也就是 「Legacy Text Mode」),但該模式不兼容 Grub 等使用圖形模式的 Bootloader——你會看不到任何東西,只能盲操作。

我仍然建議你優(yōu)先選擇 VGA Option ROM。

VGA Option ROM

最懂英特爾集顯的還是自己人,只有官方的 VGA Option ROM (VBIOS 鏡像)才能完美驅(qū)動(dòng) X200 的集顯。coreboot 在集成了 VGA Option ROM 之后,使用體驗(yàn)和官方 BIOS 一樣絲滑:同時(shí)兼容字符模式和圖形模式,二者可以無縫切換,皆可滿屏顯示。

用戶需要獲取當(dāng)前顯卡的 VGA Option ROM,編譯時(shí)將它集成在 coreboot 中,每次開機(jī)即可利用它來初始化顯卡。

VGA Option ROM 可以直接從官方 BIOS 升級文件中提取,接下來筆者就來演示如何提取 Option ROM,并將其配置到 coreboot 中。

下載并解壓 BIOS

要從官方升級文件中提取 VGA Option ROM,需要使用兩個(gè)工具,可自行檢索下載:

  • PhoenixTool:用于解包 BIOS 升級文件

  • phcomp.exe:用于將經(jīng)過壓縮的 BIOS 升級文件解壓成 PhoenixTool 可識別的格式

上述兩個(gè)工具都可以借助 Wine 在 Linux 下運(yùn)行。

首先,從聯(lián)想的海外版官網(wǎng)下載 X200 系列的 BIOS 更新工具。下載之前需要驗(yàn)證筆記本的序列號(位于筆記本底部)。你會得到一個(gè)安裝程序,運(yùn)行它,并在安裝過程中記下安裝目錄(默認(rèn)為C:\DRIVERS\FLASH\ <一個(gè)6開頭的文件夾(如6duj48us)>)。

進(jìn)入安裝目錄,你會看到兩個(gè)全大寫字母的文件夾,BIOS 的原廠文件就在里面。其中:

  • 6DET72WW 對應(yīng)的是 8MB BIOS 芯片的機(jī)型

  • 7XET72WW 對應(yīng) 4MB BIOS 芯片的機(jī)型

考慮到筆者的 X200 用的是 8MB 的芯片,因此進(jìn)入6DET72WW子目錄。

phcomp.exe放到該子目錄中,然后運(yùn)行以下命令,解壓官方 BIOS 升級文件:

# Windows 下

phcomp.exe /D $01B9100.FL1

# Linux 下(借助 Wine),注意“$”前面的轉(zhuǎn)義字符

wine ./phcomp.exe /D \$01B9100.FL1

稍等片刻,工具就會在當(dāng)前目錄下生成一個(gè)新文件:$01B9100.FLh

提取 VGA Option ROM

運(yùn)行 PhoenixTool,找到最頂部「Original(原始 BIOS)」那一欄,點(diǎn)擊右側(cè)的「..」按鈕,打開剛剛生成的$01B9100.FLh文件。

此時(shí),無須進(jìn)一步操作,PhoenixTool 就會自動(dòng)開始解包$01B9100.FLh這個(gè) BIOS 升級文件,所有解包出來的文件都放到升級文件所在位置的DUMP子目錄中。


在 PhoenixTool 中打開 BIOS 升級文件后,軟件就會自動(dòng)解包固件,無需手動(dòng)干預(yù)

解包完成后就會出現(xiàn)圖中的提示框。

解包完成后會彈出一個(gè)提示框。確認(rèn)后,進(jìn)入DUMP子目錄,使用 Linux 的file工具來驗(yàn)證其中的OPROM00.ROM,可以看出這就是我們要找的 VGA Option ROM:

$ file OPROM00.ROM

OPROM00.ROM: BIOS (ia32) ROM Ext. IBM comp. Video "IBM VGA Compatible BIOS. \003Z" (128*512) jmp 0xf6ff; at

將 VGA Option ROM 添加到 coreboot 中

OPROM00.ROM更名為vgabios.bin(或者是其他便于記憶的名字),放到 coreboot 源碼樹的根目錄中。

然后,運(yùn)行make menuconfig,打開 coreboot 配置菜單,依次修改以下設(shè)置:

  • 進(jìn)入一級菜單 Devices(設(shè)備),勾選 Add a VGA BIOS image(添加一個(gè) VGA BIOS 鏡像);

  • 隨后,下方會多出幾個(gè)選項(xiàng)。選中 VGA BIOS path and filename(VGA BIOS 路徑與文件名) ,回車,輸入 VGA Option ROM 的文件名(vgabios.bin),然后回車確認(rèn)。

  • 回到 Devices 菜單后,選擇第一個(gè) Graphics initialization ,在選項(xiàng)列表中,光標(biāo)定位到 Run VGA Option ROMs(運(yùn)行 VGA Option ROM),回車確認(rèn),保存設(shè)置即可。

  • 其余選項(xiàng)保持默認(rèn)值。

這樣,我們就成功把 VGA Option ROM 集成到了 coreboot 中,現(xiàn)在 coreboot 就有了火力全開的顯卡支持。

建議的顯卡設(shè)置:讓 SeaBIOS 全權(quán)接管顯卡初始化

在 ThinkPad X200 中,我們默認(rèn)使用 SeaBIOS——一款開源的 BIOS 實(shí)現(xiàn),作為 coreboot 的 payload。上電后,coreboot 先初始化基本硬件,然后調(diào)用 SeaBIOS 來提供我們熟悉的 BIOS 功能,并引導(dǎo)系統(tǒng)。

SeaBIOS 自身支持顯卡初始化,在運(yùn)行過程中會自動(dòng)調(diào)用 VGA Option ROM。因此我們可以直接把 Graphics Initialization 設(shè)為「None」,意味著把初始化集顯的工作全權(quán)交給 SeaBIOS,不需要 coreboot 來初始化。

實(shí)測該設(shè)置比「Run VGA Option ROMs」更為穩(wěn)定,避免 coreboot 和 SeaBIOS 重復(fù)調(diào)用 VGA Option ROM 在極個(gè)別情況下造成的兼容性問題(如開機(jī)報(bào)錯(cuò)、無法調(diào)節(jié)亮度等,雖然發(fā)生的可能性不大)。

編譯 coreboot

配置完成后,就可以立刻著手編譯:

# 使用單處理器(單個(gè)線程)進(jìn)行構(gòu)建。會很慢!

make

# 使用多個(gè)處理器(多個(gè)線程)進(jìn)行構(gòu)建。

make -j$(nproc)

最終編譯好的 coreboot ROM 位于build子目錄,文件名為coreboot.rom

刷入 coreboot 并開機(jī)測試

連接編程器,運(yùn)行以下命令,將 coreboot 刷入 BIOS 芯片中:

sudo flashrom -p ch341a_spi -c "MX25L6436E/MX25L6445E/MX25L6465E/MX25L6473E/MX25L6473F" -w build/coreboot.rom

若一切正常,輸出結(jié)果將如下所示:

flashrom v1.2 on Linux 5.15.65-1-MANJARO (x86_64)

flashrom is free software, get the source code at https://flashrom.org

Using clock_gettime for delay loops (clk_id: 1, resolution: 1ns).

Found Macronix flash chip "MX25L6436E/MX25L6445E/MX25L6465E/MX25L6473E/MX25L6473F" (8192 kB, SPI) on ch341a_spi.

Reading old flash chip contents... done.

Erasing and writing flash chip... Erase/write done.

Verifying flash... VERIFIED.

刷好之后,松開夾具,斷開編程器,扣上電池,開機(jī)!

上電后,coreboot 將初始化硬件,隨后啟動(dòng) SeaBIOS——一款開源的 BIOS 實(shí)現(xiàn)。SeaBIOS 再引導(dǎo)硬盤上的操作系統(tǒng)。

按下電源鍵不久,屏幕上出現(xiàn) SeaBIOS 的版本號,以及本機(jī)的 UUID。不一會,本地硬盤上的 Grub 也成功引導(dǎo),出現(xiàn)了「Welcome to Grub!」的字樣,隨后熟悉的Grub菜單出現(xiàn)在眼前。

啟動(dòng)成功!

內(nèi)部刷寫

刷好 coreboot 之后,將鍵盤、掌托及指紋識別器的排線按原樣裝回去,然后就可以放心上螺絲了。

后續(xù)的 BIOS 更新,無需再使用編程器,僅使用 Flashrom 就可以完成。

卸載lpc_ich驅(qū)動(dòng)

使用 Flashrom 獲取 BIOS 芯片狀態(tài)的命令是flashrom -p internal。但一般情況下,在 Arch Linux 中運(yùn)行時(shí),會報(bào)錯(cuò):

flashrom v1.2 on Linux 5.15.72-1-lts (x86_64)

flashrom is free software, get the source code at https://flashrom.org

Using clock_gettime for delay loops (clk_id: 1, resolution: 1ns).

Found chipset "Intel ICH9M".

Enabling flash write... Error accessing ICH RCRB, 0x4000 bytes at 0x00000000fed1c000

/dev/mem mmap failed: Operation not permitted

FAILED!

FATAL ERROR!

Error: Programmer initialization failed.

網(wǎng)上的刷寫教程,甚至是 coreboot 的官方文檔,都是不會告訴你這個(gè)問題的。

所幸,F(xiàn)lashrom 的官方文檔提供了對策。只需卸載系統(tǒng)的lpc_ich驅(qū)動(dòng),即可釋放對 BIOS 芯片的訪問權(quán)限。運(yùn)行以下命令:

sudo modprobe -r lpc_ich

備份與刷寫

卸載上述驅(qū)動(dòng)后,直接運(yùn)行 Flashrom 刷寫即可。你既可以備份整顆芯片,也可以只備份 BIOS 區(qū)域而保持 ME、GbE 等其他部分不變。

例如,刷寫剛剛編譯好的 coreboot:

# 刷寫整個(gè) BIOS 芯片

sudo flashrom -p internal -c "MX25L6436E/MX25L6445E/MX25L6465E/MX25L6473E/MX25L6473F" -w build/coreboot.rom

# 只刷寫 BIOS 區(qū)域,保持其他部分不變

sudo flashrom -p internal -c "MX25L6436E/MX25L6445E/MX25L6465E/MX25L6473E/MX25L6473F" -w build/coreboot.rom --ifd -i bios

以及,備份當(dāng)前版本的 BIOS:

# 備份整個(gè) BIOS 芯片

sudo flashrom -p internal -c "MX25L6436E/MX25L6445E/MX25L6465E/MX25L6473E/MX25L6473F" -r coreboot_backup.ro

# 只備份 BIOS 區(qū)域

sudo flashrom -p internal -c "MX25L6436E/MX25L6445E/MX25L6465E/MX25L6473E/MX25L6473F" -r coreboot_backup.rom --ifd -i bios

排查后續(xù)問題

libgfxinit 下 Grub 的顯示問題

我在測試啟用了 libfgxinit 的 coreboot 時(shí),啟動(dòng)過程中,會卡在「Welcome to Grub!」字樣。但沒過多久,Grub 仍能正常引導(dǎo) Linux。

Grub 默認(rèn)會以圖形方式顯示菜單,這要求顯卡必須初始化圖形功能——有別于傳統(tǒng)的 VGA 文字模式。

然而,在使用 libgfxinit 引導(dǎo)系統(tǒng)時(shí),如果不啟用 Linear Framebuffer,則默認(rèn)只能使用文字模式,而 Grub 無法對此作出自適應(yīng)的處理,所以菜單無法顯示。

對此,有兩種解決方案:

方案一:將 Grub 切換到文字模式

進(jìn)入 Linux 后,修改/etc/default/grub,取消注釋下面這行:

_TERMINAL=console

如果是新版本的 Grub,則取消注釋這一行:

_TERMINAL_OUTPUT=console

重新生成 Grub 配置文件:

sudo grub-mkconfig -o /boot/grub/grub.cfg

重啟后,Grub 就會以簡易的文字來繪制界面,可以順利使用了。

方案二:啟用 Linear Framebuffer

使用 Linear Framebuffer,就可以保證 Grub 的圖形菜單能正常顯示。

但是,Linear Framebuffer 不支持縮放,只能點(diǎn)對點(diǎn)顯示,這意味著如果輸入分辨率小于 Linear Framebuffer 指定的分辨率,畫面就只能靠左上角顯示。

并且,Grub 也無法獲取 Linear Framebuffer 的最佳分辨率,它一律會用 640x480 的最低分辨率輸出。最終的顯示效果很“憋屈”。

所以,我們還需要設(shè)置 Grub 的輸出分辨率。打開修改/etc/default/grub,修改參數(shù)GRUB_GFXMODE

GRUB_GFXMODE=1280x800x32

X200 的最佳分辨率是 1280x800,32位色深。后面的x32可以省略。

修改后,更新 Grub 配置文件,重啟生效,此時(shí) Grub 能全屏顯示了。

Intel ME 造成的問題

Intel ME(Management Engine)是內(nèi)置在英特爾處理器中的底層軟件框架,用于遠(yuǎn)程管理、系統(tǒng)啟動(dòng)保護(hù)(Bootguard)等。它的固件集成在官方 BIOS 中,同時(shí) coreboot 也提供了對 ME 的支持。

不過,據(jù)筆者實(shí)測,將 ME 集成到 coreboot 中,可能會導(dǎo)致一些潛在的問題,包括但不限于:

  • 電腦關(guān)機(jī)后,有很大幾率無法一次點(diǎn)亮,需要反復(fù)重試;

  • 睡眠之后無法喚醒;

  • 關(guān)機(jī)后立即重啟時(shí),電腦會發(fā)出尖銳的蜂鳴聲。

筆者在近期(2024年5月初)重新構(gòu)建 coreboot 時(shí),就把 ME 剔除在外。即,在make menuconfig配置過程中,不開啟【Add Intel ME/TXE firmware】這個(gè)選項(xiàng)。刷入固件后,電腦無法一次點(diǎn)亮的問題就不再出現(xiàn)。

更新源碼樹后,記得重新編譯工具鏈

你可以隨時(shí)使用git pull命令來更新 coreboot 源碼樹。

但要注意的是,coreboot 會始終使用最新版本的 GCC 來作為交叉編譯工具。如果編譯時(shí)出現(xiàn)了以下的錯(cuò)誤,則說明工具鏈需要重新構(gòu)建了:

The coreboot toolchain for 'x86_32' architecture was not found.

此時(shí),請使用以下命令,先執(zhí)行清理,然后再重新編譯工具鏈:

make crossgcc-clean

make crossgcc-i386 CPUS=$(nproc)

注意:如果不運(yùn)行make crossgcc-clean,那么編譯 GCC 時(shí)將會發(fā)生一些莫名其妙的錯(cuò)誤,光搜索錯(cuò)誤信息是完全找不到任何答案的。

隨機(jī)重啟與花屏的問題

在啟用「開機(jī)時(shí)自動(dòng)清空內(nèi)存」之前,X200 會有無預(yù)兆重啟的情況,長則十幾分鐘,短則一分鐘不到,嚴(yán)重影響使用體驗(yàn)。后來在 coreboot 中讓其每次開機(jī)時(shí)清空內(nèi)存,該問題不再出現(xiàn),電腦穩(wěn)定性有了本質(zhì)提升。

不過,使用過程中我發(fā)現(xiàn),無預(yù)兆重啟沒了,反而多了無預(yù)兆花屏:Arch Linux 啟動(dòng)后,電腦會隨機(jī)出現(xiàn)花屏的現(xiàn)象,表現(xiàn)為雜色色塊像表格一樣分布在屏幕上,同時(shí)電腦死機(jī)。

為此,我嘗試各種方法抓取 coreboot 日志,例如使用cbmem工具獲取日志(sudo cbmem -c)。然而折騰許久才明白,coreboot 的日志只記錄到 SeaBIOS 完成系統(tǒng)引導(dǎo)的時(shí)候,操作系統(tǒng)啟動(dòng)后就不會再繼續(xù)記錄了。

那么,會不會是顯卡問題?

我接著嘗試在 Grub 中關(guān)閉顯卡驅(qū)動(dòng),方法是在 Grub 菜單中選擇 Arch Linux 的啟動(dòng)項(xiàng),按e鍵編輯,在linux這行命令最后加上nomodeset參數(shù)。之后,Linux 成功引導(dǎo),并且能通過Ctrl+Alt+F2快捷鍵切換到 TTY——還是最原始的 VGA 文本模式的 TTY。此時(shí)電腦很穩(wěn)定,長時(shí)間運(yùn)行 pacman 更新系統(tǒng)都沒有花屏。

看來可以判斷是顯卡驅(qū)動(dòng)的原因了。在 Linux 6.12.57 LTS 內(nèi)核推出后,電腦終于可以正常使用,不再花屏,我猜想是該版本修復(fù)了英特爾顯卡的驅(qū)動(dòng)程序問題。

忘記 BIOS 管理員密碼,給我掌控手上這臺 ThinkPad X200 帶來了麻煩,無法進(jìn)系統(tǒng),近似于變磚。幸運(yùn)的是,我有開源的力量——借助開源固件 coreboot,順利繞開了官方 BIOS 的安全保護(hù)。

coreboot 的表現(xiàn)非常驚艷,按下電源鍵的一瞬間,就立即進(jìn)入了 SeaBIOS,隨后迅速引導(dǎo)硬盤中的 Arch Linux。啟動(dòng)速度遠(yuǎn)遠(yuǎn)快于官方 BIOS(僅支持MBR啟動(dòng)),表現(xiàn)堪比 UEFI 固件,不像官方 BIOS 在按下電源鍵后還要磨蹭那么幾秒鐘才亮屏。

如今,X200 成功煥發(fā)新生,不再吃灰,繼續(xù)作為我的第二主力。在這里衷心感謝 coreboot 團(tuán)隊(duì)的匠心和努力,以及開源世界生生不息的力量。

https://sspai.com/post/88834?utm_source=wechat&utm_medium=social

作者:愛拼安小匠

責(zé)編:張奕源Nick

題圖來自 Unsplas h : @ foegra

特別聲明:以上內(nèi)容(如有圖片或視頻亦包括在內(nèi))為自媒體平臺“網(wǎng)易號”用戶上傳并發(fā)布,本平臺僅提供信息存儲服務(wù)。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相關(guān)推薦
熱點(diǎn)推薦
洗碗機(jī)大反轉(zhuǎn)!砸家男越看越冤,知情人曝更多,難怪丈夫會崩潰

洗碗機(jī)大反轉(zhuǎn)!砸家男越看越冤,知情人曝更多,難怪丈夫會崩潰

八斗小先生
2026-01-10 15:30:07
那對迎著槍口前進(jìn)的年輕情侶

那對迎著槍口前進(jìn)的年輕情侶

玖奌雜貨鋪
2026-01-10 19:14:44
罕見一幕!阿根廷全額償還美方資金,實(shí)際只用25億美元

罕見一幕!阿根廷全額償還美方資金,實(shí)際只用25億美元

桂系007
2026-01-11 06:33:06
人民日報(bào)罕見“鐘才平”四連評,釋放極強(qiáng)政策信號,信息量巨大!

人民日報(bào)罕見“鐘才平”四連評,釋放極強(qiáng)政策信號,信息量巨大!

識局Insight
2026-01-10 13:23:53
哈梅內(nèi)伊喊話特朗普

哈梅內(nèi)伊喊話特朗普

第一財(cái)經(jīng)資訊
2026-01-09 23:45:42
報(bào)告稱中國人均存款11萬,但有8.37億人負(fù)債,占比達(dá)73%

報(bào)告稱中國人均存款11萬,但有8.37億人負(fù)債,占比達(dá)73%

爆角追蹤
2026-01-10 21:36:39
分手14年,釋小龍何潔境遇天差地別,一個(gè)身家過億,一個(gè)養(yǎng)不起娃

分手14年,釋小龍何潔境遇天差地別,一個(gè)身家過億,一個(gè)養(yǎng)不起娃

查爾菲的筆記
2026-01-09 22:17:44
澤連斯基引發(fā)的鏈?zhǔn)椒磻?yīng):敘利亞、哈馬斯、黎巴嫩真主黨、委內(nèi)瑞拉、伊朗

澤連斯基引發(fā)的鏈?zhǔn)椒磻?yīng):敘利亞、哈馬斯、黎巴嫩真主黨、委內(nèi)瑞拉、伊朗

高博新視野
2026-01-08 20:22:29
官媒發(fā)文,揭開王思聰與秦嵐真實(shí)關(guān)系,原來汪小菲一個(gè)字都沒說錯(cuò)

官媒發(fā)文,揭開王思聰與秦嵐真實(shí)關(guān)系,原來汪小菲一個(gè)字都沒說錯(cuò)

郭蛹包工頭
2026-01-08 18:19:09
特朗普宣稱“不需要國際法”,聯(lián)合國秘書長重申立場

特朗普宣稱“不需要國際法”,聯(lián)合國秘書長重申立場

澎湃新聞
2026-01-10 19:57:04
多哈冠軍賽:林詩棟男單四強(qiáng)出局,奧運(yùn)亞軍意外落敗

多哈冠軍賽:林詩棟男單四強(qiáng)出局,奧運(yùn)亞軍意外落敗

大昆說臺球
2026-01-10 22:47:58
神仙姐姐的野生圖,太美了。

神仙姐姐的野生圖,太美了。

微微熱評
2026-01-09 12:20:53
特朗普:自己不拿下格陵蘭島,俄羅斯或中國就會拿下,網(wǎng)友反駁:這是個(gè)謊言

特朗普:自己不拿下格陵蘭島,俄羅斯或中國就會拿下,網(wǎng)友反駁:這是個(gè)謊言

大象新聞
2026-01-11 00:13:15
麥當(dāng)勞漢堡尺寸小得像馬卡龍?網(wǎng)友吐槽“一邊縮水一邊漲價(jià)”

麥當(dāng)勞漢堡尺寸小得像馬卡龍?網(wǎng)友吐槽“一邊縮水一邊漲價(jià)”

中國能源網(wǎng)
2026-01-10 22:46:13
江蘇35歲男子被騙到柬埔寨!妻子接到遺言電話,不止詐騙這么簡單

江蘇35歲男子被騙到柬埔寨!妻子接到遺言電話,不止詐騙這么簡單

李健政觀察
2026-01-10 14:45:38
3-2!非洲杯7冠王淘汰衛(wèi)冕冠軍進(jìn)4強(qiáng) 紅軍巨星傳射+國家隊(duì)造百球

3-2!非洲杯7冠王淘汰衛(wèi)冕冠軍進(jìn)4強(qiáng) 紅軍巨星傳射+國家隊(duì)造百球

我愛英超
2026-01-11 06:41:21
從扣船到炸港僅數(shù)小時(shí),俄軍讓北約明白,手伸太長必被砍

從扣船到炸港僅數(shù)小時(shí),俄軍讓北約明白,手伸太長必被砍

星辰夜語
2026-01-10 11:55:24
別看現(xiàn)在美國威脅丹麥,這么可憐巴巴,其實(shí)丹麥人也不是什么好人

別看現(xiàn)在美國威脅丹麥,這么可憐巴巴,其實(shí)丹麥人也不是什么好人

花顏蘊(yùn)韻
2026-01-10 18:21:39
19歲河南小伙在倫敦“撿”了個(gè)瑞士爺爺,回國后硬是把他接來鄭州養(yǎng)老,臨終前老人說了一句話,讓無數(shù)人破防

19歲河南小伙在倫敦“撿”了個(gè)瑞士爺爺,回國后硬是把他接來鄭州養(yǎng)老,臨終前老人說了一句話,讓無數(shù)人破防

源溯歷史
2026-01-09 18:47:21
特朗普要求美國信用卡利率封頂10%,國內(nèi)利率仍普遍超18%,甚至更高

特朗普要求美國信用卡利率封頂10%,國內(nèi)利率仍普遍超18%,甚至更高

風(fēng)向觀察
2026-01-10 12:42:54
2026-01-11 10:39:00
少數(shù)派sspai incentive-icons
少數(shù)派sspai
高品質(zhì)數(shù)字消費(fèi)指南
4970文章數(shù) 28298關(guān)注度
往期回顧 全部

數(shù)碼要聞

美的空界M5空調(diào)發(fā)布:開源鴻蒙系統(tǒng)、海思芯片,預(yù)售價(jià)2949元

頭條要聞

牛彈琴:特朗普沒想到 抓馬杜羅后全球情緒總體很穩(wěn)定

頭條要聞

牛彈琴:特朗普沒想到 抓馬杜羅后全球情緒總體很穩(wěn)定

體育要聞

詹皇曬照不滿打手沒哨 裁判報(bào)告最后兩分鐘無誤判

娛樂要聞

網(wǎng)友偶遇賈玲張小斐崇禮滑雪

財(cái)經(jīng)要聞

外賣平臺"燒錢搶存量市場"迎來終局?

科技要聞

“我們與美國的差距也許還在拉大”

汽車要聞

2026款宋Pro DM-i長續(xù)航補(bǔ)貼后9.98萬起

態(tài)度原創(chuàng)

教育
親子
房產(chǎn)
數(shù)碼
時(shí)尚

教育要聞

拋物線旋轉(zhuǎn)問題,一個(gè)視頻學(xué)會!

親子要聞

當(dāng)家里有雙胞胎,什么東西都要一模一樣,網(wǎng)友:不是雙胞胎也這樣

房產(chǎn)要聞

66萬方!4755套!三亞巨量房源正瘋狂砸出!

數(shù)碼要聞

蘋果MacBook Pro問世20周年 從PowerPC轉(zhuǎn)向自研芯片的里程碑產(chǎn)品

動(dòng)物紋回潮,那很狂野了

無障礙瀏覽 進(jìn)入關(guān)懷版