<cite id="ffb66"></cite><cite id="ffb66"><track id="ffb66"></track></cite>
      <legend id="ffb66"><li id="ffb66"></li></legend>
      色婷婷久,激情色播,久久久无码专区,亚洲中文字幕av,国产成人A片,av无码免费,精品久久国产,99视频精品3
      網易首頁 > 網易號 > 正文 申請入駐

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

      0
      分享至

      編注:我們會不定期挑選 Matrix 的優質文章,展示來自用戶的最真實的體驗和觀點。 文章代表作者個人觀點,少數派僅對標題和排版略作修改。

      我手上有一臺 ThinkPad X200,誕生于 2008 年,是當年的旗艦筆記本。十幾年過去了,依然寶刀不老,長期以來一直都是我寫程序寫論文的主力。

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


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

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

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

      準備工具

      BIOS 刷寫需要準備以下工具:

      • 一臺安裝了 Linux 發行版的電腦

      • CH341A 編程器

      • SOP-16 夾具

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

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

      系統環境方面,選用 Linux 發行版。通過它來運行 Flashrom 來刷寫 BIOS,以及編譯 coreboot。

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

      編程器連接

      CH341A 是編程器的芯片型號,不同的廠家在用 CH341A 設計編程器時可能有不同的外觀,配件也可能有不同的組裝方式,故應當以資料為準。編程器的賣家通常會提供完備的資料。

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


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

      卸下鍵盤與掌托

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

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

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

      準備編程器

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


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


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


      連接 BIOS 芯片

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


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

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

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

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


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

      備份原機 BIOS

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

      檢測芯片型號

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

      sudo flashrom -p ch341a_spi

      若一切正常,執行結果如下。可以看到,編程器已經識別出了芯片:

      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.

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

      提示: 檢測出多型號是正常現象,因為BIOS芯片本身有多種型號定義,僅通過編程器是無法精確識別的。 如果 Flashrom 在運行的時候出錯,再改用其他列出的型號,如MX25L6406E/MX25L6408E。
      開始備份

      運行以下命令,將整個 BIOS ROM 備份到文件x200_bios.rom中:

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

      正常情況下,輸出結果如下所示:

      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.

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

      例如,先備份,然后使用 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校驗和

      openssl sha256 x200_bios_*.rom

      如果傳輸無誤,則上述文件的 SHA256 值應當相同,如下:

      SHA256(x200_bios.rom)= 038481951bb5d3412392fc1fd02b3996a9ac5394e82aaa4593b84f90362afce4

      SHA256(x200_bios_2.rom)= 038481951bb5d3412392fc1fd02b3996a9ac5394e82aaa4593b84f90362afce4

      SHA256(x200_bios_3.rom)= 038481951bb5d3412392fc1fd02b3996a9ac5394e82aaa4593b84f90362afce4

      SHA256(x200_bios_4.rom)= 038481951bb5d3412392fc1fd02b3996a9ac5394e82aaa4593b84f90362afce4

      準備 coreboot 源代碼

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

      克隆源碼

      首先,克隆 coreboot 的代碼庫:

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

      cd coreboot

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

      cd coreboot

      git submodule update --init --recursive

      準備交叉編譯器

      coreboot 涉及到更底層的系統環境。為了保證 coreboot 的正常編譯,還需要準備交叉編譯器。ThinkPad X200 需要使用 i386 的 GCC 編譯器,編譯 32 位的 coreboot。

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

      首先,安裝 GCC Ada 工具鏈。

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

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

      sudo pacman -S gcc-ada

      接下來,就可以讓 coreboot 自動構建交叉編譯器,只需運行以下命令:

      # 使用單處理器(單個線程)進行構建。會很慢!

      make crossgcc-i386

      # 使用多個處理器(多個線程)進行構建。

      make crossgcc-i386 CPUS=$(nproc)

      構建過程是全自動的,一步到位。

      準備 BIOS 組件

      coreboot 需要從原機的官方 BIOS ROM 中提取以下三個組件:

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

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

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

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

      編譯ifdtool

      進入 coreboot 源碼目錄,然后瀏覽到ifdtool的源碼目錄,并編譯:

      cd util/ifdtool

      make

      編譯完成后,當前目錄會多出一個可執行文件:ifdtool。為便于使用,可以把它安裝到系統中:

      sudo cp ifdtool /usr/bin/

      提取組件

      瀏覽到存放 BIOS 備份的目錄,運行以下命令提取:

      執行結果如下所示:

      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

      此時,當前目錄下就會多出幾個文件。它們都是提取出的組件,屬于 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 可以識別。

      首先,進入 coreboot 源碼目錄,然后建立下面的子目錄:

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

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


      至此,BIOS 組件準備完成,可以開始后續的配置了。

      配置 coreboot

      coreboot 使用 KBuild 來配置,配備一套直觀易用的配置菜單,編譯過 Linux 內核的開發者應該不會陌生。接下來,我們將配置 coreboot,打造出功能完備的體驗,不應只滿足于點亮機器進系統。

      基本操作

      • 上下移動光標:選擇設置項

      • Enter:

        • 進入子菜單或「多選一(給你多個選項,一次只能選一個)」菜單

        • 確認當前選項

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

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

      進入配置菜單

      進入 coreboot 源碼目錄,然后打開配置菜單:

      make menuconfig

      設置主板類型

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

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

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

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

      設置 BIOS 組件

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

      此時,列表下方會多出下面兩個選項:

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

      • Add gigabit ethernet configuration(添加千兆以太網配置數據)

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

      至于Intel ME/TXE 固件,缺少該固件并不影響系統的使用,可以不勾選。關于該固件的問題,具體我會在文末「后續問題」章節討論。

      其余選項保持默認值。固件的路徑默認均指向3rdparty/blobs/mainboard/lenovo/x200這一目錄的相應文件,無需修改。

      啟用無線網卡支持

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

      進入一級菜單 Generic drivers(通用驅動),勾選最后一項 Support Intel PCI-e WiFi adapters(英特爾 PCIe 無線網卡支持),即可。

      啟用二合一網卡藍牙支持

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

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

      啟用 NVRAM 存儲

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

      但是,coreboot 默認并沒有開啟參數保存的功能,這將導致所有參數在每次開機時還原為默認。并且,還會導致藍牙指示燈無法點亮。

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

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

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

      讓 coreboot 在引導時自動清空內存

      筆者在成功編譯 coreboot 后,長期使用 X200 以測試 coreboot 的穩定性,結果遇到了一個嚴重的問題:電腦隔三岔五無預兆重啟,長則開機十幾分鐘重啟,短則還沒進入桌面就重啟,嚴重影響系統使用。

      經過一番搜索,知乎網友 flanto 的文章告訴了我答案:

      根據個人使用經驗,如果沒有啟用開機清空內存功能,就可能出現電腦隨機重啟現象。個人猜測,或許是通電后(特別是軟重啟后)內存中仍留有少數“垃圾”數據,當操作系統尋址到這些垃圾數據的地址就會發生錯誤。

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

      依次進行以下步驟,開啟 coreboot 的引導時清空內存功能:

      進入 Security(安全)——Memory initialization(內存初始化)菜單,勾選 Always clear all DRAM on regular boot(常規啟動時總是清空內存),保存設置即可。

      啟用顯卡支持

      coreboot 有兩種顯卡支持方案:

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

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

      libgfxinit 與 Linear Frame buffer

      先來介紹 libgfxinit。

      ThinkPad X200 配備 GM45 集顯,libgfxinit驅動 GM45 不在話下。在它的基礎上,再啟用 Linear Framebuffer 功能建立一個幀緩沖(frame buffer),允許程序直接在 coreboot 中調用顯卡繪圖,從而使顯卡在系統引導階段發揮應有效能。

      具體步驟如下:

      • 進入一級菜單 Devices(設備),選擇 Graphics initialization(圖形初始化)。在選項列表中,光標定位到 Use libgfxinit(使用libgfxinit),按空格確認。

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

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

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

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

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

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

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

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

      我仍然建議你優先選擇 VGA Option ROM。

      VGA Option ROM

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

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

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

      下載并解壓 BIOS

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

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

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

      上述兩個工具都可以借助 Wine 在 Linux 下運行。

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

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

      • 6DET72WW 對應的是 8MB BIOS 芯片的機型

      • 7XET72WW 對應 4MB BIOS 芯片的機型

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

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

      # Windows 下

      phcomp.exe /D $01B9100.FL1

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

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

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

      提取 VGA Option ROM

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

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


      在 PhoenixTool 中打開 BIOS 升級文件后,軟件就會自動解包固件,無需手動干預

      解包完成后就會出現圖中的提示框。

      解包完成后會彈出一個提示框。確認后,進入DUMP子目錄,使用 Linux 的file工具來驗證其中的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 源碼樹的根目錄中。

      然后,運行make menuconfig,打開 coreboot 配置菜單,依次修改以下設置:

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

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

      • 回到 Devices 菜單后,選擇第一個 Graphics initialization ,在選項列表中,光標定位到 Run VGA Option ROMs(運行 VGA Option ROM),回車確認,保存設置即可。

      • 其余選項保持默認值。

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

      建議的顯卡設置:讓 SeaBIOS 全權接管顯卡初始化

      在 ThinkPad X200 中,我們默認使用 SeaBIOS——一款開源的 BIOS 實現,作為 coreboot 的 payload。上電后,coreboot 先初始化基本硬件,然后調用 SeaBIOS 來提供我們熟悉的 BIOS 功能,并引導系統。

      SeaBIOS 自身支持顯卡初始化,在運行過程中會自動調用 VGA Option ROM。因此我們可以直接把 Graphics Initialization 設為「None」,意味著把初始化集顯的工作全權交給 SeaBIOS,不需要 coreboot 來初始化。

      實測該設置比「Run VGA Option ROMs」更為穩定,避免 coreboot 和 SeaBIOS 重復調用 VGA Option ROM 在極個別情況下造成的兼容性問題(如開機報錯、無法調節亮度等,雖然發生的可能性不大)。

      編譯 coreboot

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

      # 使用單處理器(單個線程)進行構建。會很慢!

      make

      # 使用多個處理器(多個線程)進行構建。

      make -j$(nproc)

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

      刷入 coreboot 并開機測試

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

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

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

      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.

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

      上電后,coreboot 將初始化硬件,隨后啟動 SeaBIOS——一款開源的 BIOS 實現。SeaBIOS 再引導硬盤上的操作系統。

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

      啟動成功!

      內部刷寫

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

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

      卸載lpc_ich驅動

      使用 Flashrom 獲取 BIOS 芯片狀態的命令是flashrom -p internal。但一般情況下,在 Arch Linux 中運行時,會報錯:

      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.

      網上的刷寫教程,甚至是 coreboot 的官方文檔,都是不會告訴你這個問題的。

      所幸,Flashrom 的官方文檔提供了對策。只需卸載系統的lpc_ich驅動,即可釋放對 BIOS 芯片的訪問權限。運行以下命令:

      sudo modprobe -r lpc_ich

      備份與刷寫

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

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

      # 刷寫整個 BIOS 芯片

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

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

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

      以及,備份當前版本的 BIOS:

      # 備份整個 BIOS 芯片

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

      # 只備份 BIOS 區域

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

      排查后續問題

      libgfxinit 下 Grub 的顯示問題

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

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

      然而,在使用 libgfxinit 引導系統時,如果不啟用 Linear Framebuffer,則默認只能使用文字模式,而 Grub 無法對此作出自適應的處理,所以菜單無法顯示。

      對此,有兩種解決方案:

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

      進入 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 不支持縮放,只能點對點顯示,這意味著如果輸入分辨率小于 Linear Framebuffer 指定的分辨率,畫面就只能靠左上角顯示。

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

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

      GRUB_GFXMODE=1280x800x32

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

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

      Intel ME 造成的問題

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

      不過,據筆者實測,將 ME 集成到 coreboot 中,可能會導致一些潛在的問題,包括但不限于:

      • 電腦關機后,有很大幾率無法一次點亮,需要反復重試;

      • 睡眠之后無法喚醒;

      • 關機后立即重啟時,電腦會發出尖銳的蜂鳴聲。

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

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

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

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

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

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

      make crossgcc-clean

      make crossgcc-i386 CPUS=$(nproc)

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

      隨機重啟與花屏的問題

      在啟用「開機時自動清空內存」之前,X200 會有無預兆重啟的情況,長則十幾分鐘,短則一分鐘不到,嚴重影響使用體驗。后來在 coreboot 中讓其每次開機時清空內存,該問題不再出現,電腦穩定性有了本質提升。

      不過,使用過程中我發現,無預兆重啟沒了,反而多了無預兆花屏:Arch Linux 啟動后,電腦會隨機出現花屏的現象,表現為雜色色塊像表格一樣分布在屏幕上,同時電腦死機。

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

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

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

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

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

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

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

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

      作者:愛拼安小匠

      責編:張奕源Nick

      題圖來自 Unsplas h : @ foegra

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

      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.

      相關推薦
      熱點推薦
      為什么人一定要主動?網友:因為主動真的可以改命!一定要主動!

      為什么人一定要主動?網友:因為主動真的可以改命!一定要主動!

      另子維愛讀史
      2025-12-24 17:45:08
      鳳姐未受“斬殺線”影響:還說在美國指甲店打工,也比國內白領強

      鳳姐未受“斬殺線”影響:還說在美國指甲店打工,也比國內白領強

      漢史趣聞
      2025-12-29 16:52:55
      宿茂臻:泰山小將去歐塞爾大約半年,一周一賽對他們是有利的

      宿茂臻:泰山小將去歐塞爾大約半年,一周一賽對他們是有利的

      懂球帝
      2025-12-30 13:00:08
      全身而退!北京一家5口完美套現24億,臨走前又坑了甘肅國資一把

      全身而退!北京一家5口完美套現24億,臨走前又坑了甘肅國資一把

      文史旺旺旺
      2025-12-27 18:22:03
      造成毛岸英犧牲的罪魁禍首,讓毛主席痛恨得罪人,他們下場如何?

      造成毛岸英犧牲的罪魁禍首,讓毛主席痛恨得罪人,他們下場如何?

      風笛悠揚聲
      2025-12-04 10:08:06
      西安市紀委監委通報:紅會醫院原院長郝定均多次違規收受多名下屬所送消費卡

      西安市紀委監委通報:紅會醫院原院長郝定均多次違規收受多名下屬所送消費卡

      澎湃新聞
      2025-12-29 17:22:06
      家里冒出這8個吉兆,別不信!你家正在悄悄走“旺運”

      家里冒出這8個吉兆,別不信!你家正在悄悄走“旺運”

      阿離家居
      2025-12-29 06:46:48
      越ZUO越軟 怎么辦 ?

      越ZUO越軟 怎么辦 ?

      好一朵純白的茉莉花
      2025-12-30 14:09:20
      2026年“國補”定調,范圍標準大調整

      2026年“國補”定調,范圍標準大調整

      環球網資訊
      2025-12-29 16:52:38
      女企業竟嫁19歲體育生,一天5次性生活,8年后得知丈夫隱藏身份

      女企業竟嫁19歲體育生,一天5次性生活,8年后得知丈夫隱藏身份

      今天說故事
      2025-09-12 18:14:21
      張予曦在北京被偶遇,她的腿又長又細,身材高挑,穿花高跟鞋好美

      張予曦在北京被偶遇,她的腿又長又細,身材高挑,穿花高跟鞋好美

      徐幫陽
      2025-12-21 21:19:31
      50+女人:比白發更可怕是戴“老年配飾”,太油膩廉價了,你有嗎

      50+女人:比白發更可怕是戴“老年配飾”,太油膩廉價了,你有嗎

      白宸侃片
      2025-12-29 08:31:30
      中柬泰外長舉行三方會晤

      中柬泰外長舉行三方會晤

      新京報
      2025-12-29 14:44:11
      沉寂1天后,高市終于簽字,日本怒砸9萬億反華,解放軍動作更大

      沉寂1天后,高市終于簽字,日本怒砸9萬億反華,解放軍動作更大

      諦聽骨語本尊
      2025-12-30 15:12:23
      美司令曾警告:若大陸武力收臺,美軍將摧毀中方火箭軍和核武庫!

      美司令曾警告:若大陸武力收臺,美軍將摧毀中方火箭軍和核武庫!

      壹知眠羊
      2025-12-21 07:15:19
      朱芳雨又要出手了?廣東被曝欲引進于米提,這可是杜鋒的爭冠底牌

      朱芳雨又要出手了?廣東被曝欲引進于米提,這可是杜鋒的爭冠底牌

      緋雨兒
      2025-12-30 14:54:05
      女孩駕車沖入河中身亡,長相非常漂亮,年僅26歲,內情太扎心!

      女孩駕車沖入河中身亡,長相非常漂亮,年僅26歲,內情太扎心!

      游者走天下
      2025-12-29 18:06:14
      解放軍剛包圍臺島,鄭麗文暴怒,李乾龍趕赴金門,民進黨闖下大禍

      解放軍剛包圍臺島,鄭麗文暴怒,李乾龍趕赴金門,民進黨闖下大禍

      樂天閑聊
      2025-12-30 11:24:40
      南京博物院的事,炸出了一個去年的視頻

      南京博物院的事,炸出了一個去年的視頻

      麥杰遜
      2025-12-21 12:17:15
      欠中國的錢越來越少,美國卻越來越焦慮了!美媒:17年來最低

      欠中國的錢越來越少,美國卻越來越焦慮了!美媒:17年來最低

      你的雷達站
      2025-12-29 22:30:15
      2025-12-30 16:20:49
      少數派sspai incentive-icons
      少數派sspai
      高品質數字消費指南
      4957文章數 28289關注度
      往期回顧 全部

      數碼要聞

      小米REDMI K Pad 2傳聞:配備超大容量電池

      頭條要聞

      普京通知特朗普自己官邸遇襲 澤連斯基:完全的捏造

      頭條要聞

      普京通知特朗普自己官邸遇襲 澤連斯基:完全的捏造

      體育要聞

      這個59歲的胖子,還在表演“蝎子擺尾”

      娛樂要聞

      林俊杰官宣文案爭議!女方名字都不提

      財經要聞

      朱光耀:美關稅政策正使WTO名存實亡

      科技要聞

      估值150億的智元,開始批量"制造"小獨角獸

      汽車要聞

      標配華為乾崑ADS 4 Pro 華境S明年上半年上市

      態度原創

      手機
      游戲
      教育
      本地
      公開課

      手機要聞

      蘋果客服回應iPhone電池健康度僅為0%:暫未遇到實例

      《GTA6》粉絲發現神秘角色 預告中曾多次與主角同框!

      教育要聞

      看完一定有收獲

      本地新聞

      即將過去的2025年,對重慶的影響竟然如此深遠

      公開課

      李玫瑾:為什么性格比能力更重要?

      無障礙瀏覽 進入關懷版 主站蜘蛛池模板: 国产XXXX| 久久亚洲av成人无码软件| 色一情一区二区三区四区| 国产精品77777| 日本无码中文| 黑人异族巨大巨大巨粗| 18禁无遮挡啪啪无码网站| 无码人妻aⅴ一区二区三区69岛| 色啪综合| 亚洲国产亚洲综合在线尤物| 亚洲精品麻豆一二三区| 亚洲精品欧美综合二区| 国产又色又爽又黄的视频在线| 亚洲精品有码在线观看| 亚洲熟妇av日韩熟妇在线| 亚洲精选av| 伊人a?v| 激情五区| 人妻精品网站| 在线亚洲人妻| 色欲久久久天天天精品综合网| 亚洲精品成人无| 亚洲自拍成人| 亚洲人妻影院| 91人人人| 超鹏98免费国语| 亚州脚交| 在线成人AV| 国模无码免费视频| 老熟妇仑乱视频一区二区| 国产乱码精品一品二品| 四虎国产精品永久在线国在线| 久久久久亚洲AV成人网人人小说| 国产成人精品综合| 中文字幕天天色色干干| 国产色视频网站免费| 男人扒女人添高潮视频| 国产亚洲精久久久久久无码77777| 婷婷成人丁香五月综合激情| 亚洲精品不卡无码福利在线观看| 亚洲熟女乱综合一区二区|