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

網(wǎng)易首頁(yè) > 網(wǎng)易號(hào) > 正文 申請(qǐng)入駐

給一臺(tái) 17 年前的 ThinkPad 刷入開(kāi)源固件后,我讓它在 2025 年「重獲新生」

0
分享至

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

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

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


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

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

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

準(zhǔn)備工具

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

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

  • CH341A 編程器

  • SOP-16 夾具

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

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

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

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

編程器連接

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

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


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

卸下鍵盤(pán)與掌托

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

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

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

準(zhǔn)備編程器

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


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


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


連接 BIOS 芯片

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


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

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

注意不要把夾子的方向弄反了,否則芯片會(huì)識(shí)別不出來(lái)。

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


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

備份原機(jī) BIOS

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

檢測(cè)芯片型號(hào)

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

sudo flashrom -p ch341a_spi

若一切正常,執(zhí)行結(jié)果如下。可以看到,編程器已經(jīng)識(shí)別出了芯片:

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è)型號(hào)被檢測(cè)出來(lái)。后續(xù)的操作,我們使用最長(zhǎng)串的型號(hào):MX25L6436E/MX25L6445E/MX25L6465E/MX25L6473E/MX25L6473F。

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

運(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.

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

例如,先備份,然后使用 OpenSSL 來(lái)比較 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

如果傳輸無(wú)誤,則上述文件的 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 源代碼

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

克隆源碼

首先,克隆 coreboot 的代碼庫(kù):

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 平臺(tái)下初始化集成顯卡或核芯顯卡,使用 Ada 語(yǔ)言的子集 SPARK 編寫(xiě)。要給交叉編譯器提供 Ada 語(yǔ)言的支持,必須先在當(dāng)前主機(jī)上安裝 GCC Ada 工具鏈。

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

sudo pacman -S gcc-ada

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

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

make crossgcc-i386

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

make crossgcc-i386 CPUS=$(nproc)

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

準(zhǔn)備 BIOS 組件

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

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

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

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

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

編譯ifdtool

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

cd util/ifdtool

make

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

sudo cp ifdtool /usr/bin/

提取組件

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

執(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)前目錄下就會(huì)多出幾個(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 源碼目錄中

接下來(lái),我們把提取出的組件放入指定目錄中,使 coreboot 可以識(shí)別。

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

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

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


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

配置 coreboot

coreboot 使用 KBuild 來(lái)配置,配備一套直觀易用的配置菜單,編譯過(guò) Linux 內(nèi)核的開(kāi)發(fā)者應(yīng)該不會(huì)陌生。接下來(lái),我們將配置 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/空格:勾選(或取消勾選),適用于帶有方括號(hào)的項(xiàng)目,方括號(hào)里出現(xiàn)星號(hào),表示已選中

  • 連按兩次 ESC:返回上一頁(yè)

進(jìn)入配置菜單

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

make menuconfig

設(shè)置主板類(lèi)型

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

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

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

選好后,按兩次 ESC,退回主頁(yè)面。接下來(lái)的步驟都從主頁(yè)面開(kāi)始。

設(shè)置 BIOS 組件

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

此時(shí),列表下方會(huì)多出下面兩個(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)于該固件的問(wèn)題,具體我會(huì)在文末「后續(xù)問(wèn)題」章節(jié)討論。

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

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

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

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

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

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

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

啟用 NVRAM 存儲(chǔ)

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

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

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

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

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

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

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

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

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

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

依次進(jìn)行以下步驟,開(kāi)啟 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 中,對(duì) ThinkPad X200 的集顯支持最完備最充分。

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

libgfxinit 與 Linear Frame buffer

先來(lái)介紹 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)入一級(jí)菜單 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 子菜單中,會(huì)多出以下兩個(gè)選項(xiàng),指定為X200顯示器的最佳分辨率即可:

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

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

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

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

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

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

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

VGA Option ROM

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

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

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

下載并解壓 BIOS

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

  • PhoenixTool:用于解包 BIOS 升級(jí)文件

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

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

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

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

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

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

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

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

# Windows 下

phcomp.exe /D $01B9100.FL1

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

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

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

提取 VGA Option ROM

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

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


在 PhoenixTool 中打開(kāi) BIOS 升級(jí)文件后,軟件就會(huì)自動(dòng)解包固件,無(wú)需手動(dòng)干預(yù)

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

解包完成后會(huì)彈出一個(gè)提示框。確認(rèn)后,進(jìn)入DUMP子目錄,使用 Linux 的file工具來(lái)驗(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 源碼樹(shù)的根目錄中。

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

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

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

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

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

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

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

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

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

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

編譯 coreboot

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

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

make

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

make -j$(nproc)

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

刷入 coreboot 并開(kāi)機(jī)測(cè)試

連接編程器,運(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.

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

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

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

啟動(dòng)成功!

內(nèi)部刷寫(xiě)

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

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

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

使用 Flashrom 獲取 BIOS 芯片狀態(tài)的命令是flashrom -p internal。但一般情況下,在 Arch Linux 中運(yùn)行時(shí),會(huì)報(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)上的刷寫(xiě)教程,甚至是 coreboot 的官方文檔,都是不會(huì)告訴你這個(gè)問(wèn)題的。

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

sudo modprobe -r lpc_ich

備份與刷寫(xiě)

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

例如,刷寫(xiě)剛剛編譯好的 coreboot:

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

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

# 只刷寫(xiě) 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ù)問(wèn)題

libgfxinit 下 Grub 的顯示問(wèn)題

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

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

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

對(duì)此,有兩種解決方案:

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

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

_TERMINAL=console

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

_TERMINAL_OUTPUT=console

重新生成 Grub 配置文件:

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

重啟后,Grub 就會(huì)以簡(jiǎn)易的文字來(lái)繪制界面,可以順利使用了。

方案二:?jiǎn)⒂?Linear Framebuffer

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

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

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

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

GRUB_GFXMODE=1280x800x32

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

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

Intel ME 造成的問(wèn)題

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

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

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

  • 睡眠之后無(wú)法喚醒;

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

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

更新源碼樹(shù)后,記得重新編譯工具鏈

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

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

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

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

make crossgcc-clean

make crossgcc-i386 CPUS=$(nproc)

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

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

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

不過(guò),使用過(guò)程中我發(fā)現(xiàn),無(wú)預(yù)兆重啟沒(méi)了,反而多了無(wú)預(yù)兆花屏:Arch Linux 啟動(dòng)后,電腦會(huì)隨機(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)后就不會(huì)再繼續(xù)記錄了。

那么,會(huì)不會(huì)是顯卡問(wèn)題?

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

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

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

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

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

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

作者:愛(ài)拼安小匠

責(zé)編:張奕源Nick

題圖來(lái)自 Unsplas h : @ foegra

特別聲明:以上內(nèi)容(如有圖片或視頻亦包括在內(nèi))為自媒體平臺(tái)“網(wǎng)易號(hào)”用戶上傳并發(fā)布,本平臺(tái)僅提供信息存儲(chǔ)服務(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)推薦
小楊生煎、清美要成老字號(hào)了?曾被移出的老半齋也回來(lái)了!2025年上海老字號(hào)名錄正在公示

小楊生煎、清美要成老字號(hào)了?曾被移出的老半齋也回來(lái)了!2025年上海老字號(hào)名錄正在公示

縱相新聞
2026-01-08 21:49:20
特斯拉宣布延長(zhǎng)部分地區(qū)保修時(shí)間,五年不限公里

特斯拉宣布延長(zhǎng)部分地區(qū)保修時(shí)間,五年不限公里

XCiOS俱樂(lè)部
2026-01-09 15:32:29
成龍?jiān)谌嗣袢請(qǐng)?bào)撰文

成龍?jiān)谌嗣袢請(qǐng)?bào)撰文

澎湃新聞
2026-01-08 11:56:23
王騰:新公司薪資福利基本看齊大廠 已收到幾百份簡(jiǎn)歷

王騰:新公司薪資福利基本看齊大廠 已收到幾百份簡(jiǎn)歷

快科技
2026-01-09 15:53:04
梁靜茹突然關(guān)閉社交媒體賬號(hào)

梁靜茹突然關(guān)閉社交媒體賬號(hào)

大象新聞
2026-01-08 12:21:06
他是任期最長(zhǎng)的江蘇省長(zhǎng),1967年被奪權(quán),1980年又擔(dān)任江蘇省長(zhǎng)

他是任期最長(zhǎng)的江蘇省長(zhǎng),1967年被奪權(quán),1980年又擔(dān)任江蘇省長(zhǎng)

嘆為觀止易
2026-01-08 15:59:17
張靈甫之子張道宇:成富商后回國(guó)與母定居上海,其子長(zhǎng)相酷似父親

張靈甫之子張道宇:成富商后回國(guó)與母定居上海,其子長(zhǎng)相酷似父親

歷史龍?jiān)w
2026-01-09 10:40:06
又轟下38+10+10!抱歉威少:你從歷史第二變成了歷史第三

又轟下38+10+10!抱歉威少:你從歷史第二變成了歷史第三

籃球大視野
2026-01-08 17:43:43
春晚彩排名單被曝僅4天,讓人擔(dān)心的事就發(fā)生了,網(wǎng)友:沒(méi)人了?

春晚彩排名單被曝僅4天,讓人擔(dān)心的事就發(fā)生了,網(wǎng)友:沒(méi)人了?

妙知
2026-01-08 19:53:48
跨年僅3天,具俊曄撕破汪小菲面子,馬筱梅悲慘出局!

跨年僅3天,具俊曄撕破汪小菲面子,馬筱梅悲慘出局!

瓜汁橘長(zhǎng)Dr
2026-01-07 17:20:23
67歲老人燒柴取暖被罰8000塊,法庭上哭吼:我燒柴怎么就違法了?

67歲老人燒柴取暖被罰8000塊,法庭上哭吼:我燒柴怎么就違法了?

青青會(huì)講故事
2026-01-08 15:49:23
經(jīng)典恐怖片確認(rèn)引進(jìn)中國(guó)內(nèi)地!網(wǎng)友:曾經(jīng)的陰影

經(jīng)典恐怖片確認(rèn)引進(jìn)中國(guó)內(nèi)地!網(wǎng)友:曾經(jīng)的陰影

環(huán)球網(wǎng)資訊
2026-01-07 10:02:21
老鷹拒助火箭續(xù)約18.8分新援,范喬丹用意明顯

老鷹拒助火箭續(xù)約18.8分新援,范喬丹用意明顯

嘴角上翹
2026-01-09 16:29:21
北京出租車(chē)亂象:外地司機(jī)成主力,公司“割韭菜”式管理何時(shí)休?

北京出租車(chē)亂象:外地司機(jī)成主力,公司“割韭菜”式管理何時(shí)休?

劉哥談體育
2026-01-09 00:44:17
因車(chē)禍僅剩1條腿,女子9年遭數(shù)次家暴無(wú)處逃,生娃后彩禮也被要回

因車(chē)禍僅剩1條腿,女子9年遭數(shù)次家暴無(wú)處逃,生娃后彩禮也被要回

游者走天下
2026-01-08 10:24:20
癌癥去世的人越來(lái)越多!建議:2不喝、3不吃、1堅(jiān)持,別馬虎了!

癌癥去世的人越來(lái)越多!建議:2不喝、3不吃、1堅(jiān)持,別馬虎了!

鬼菜生活
2026-01-07 09:58:31
值得珍藏:商業(yè)航天+國(guó)產(chǎn)算力+機(jī)器人+全球第一的企業(yè)+6G產(chǎn)業(yè)鏈等

值得珍藏:商業(yè)航天+國(guó)產(chǎn)算力+機(jī)器人+全球第一的企業(yè)+6G產(chǎn)業(yè)鏈等

Thurman在昆明
2026-01-08 10:06:36
俄稱(chēng)控制一居民點(diǎn) 烏稱(chēng)前線態(tài)勢(shì)嚴(yán)峻

俄稱(chēng)控制一居民點(diǎn) 烏稱(chēng)前線態(tài)勢(shì)嚴(yán)峻

財(cái)聯(lián)社
2026-01-09 06:58:11
流浪柬埔寨20歲女子新進(jìn)展:給她打八萬(wàn)過(guò)去,說(shuō)回來(lái)后會(huì)好好做人

流浪柬埔寨20歲女子新進(jìn)展:給她打八萬(wàn)過(guò)去,說(shuō)回來(lái)后會(huì)好好做人

江山揮筆
2026-01-08 16:33:57
每名格陵蘭居民或能得到1萬(wàn)至10萬(wàn)美元 白宮“購(gòu)島”方案流出

每名格陵蘭居民或能得到1萬(wàn)至10萬(wàn)美元 白宮“購(gòu)島”方案流出

新京報(bào)
2026-01-09 08:36:04
2026-01-09 18:47:00
少數(shù)派sspai incentive-icons
少數(shù)派sspai
高品質(zhì)數(shù)字消費(fèi)指南
4970文章數(shù) 28298關(guān)注度
往期回顧 全部

數(shù)碼要聞

網(wǎng)易數(shù)碼2025年度好物揭曉:30款精選產(chǎn)品上榜,你用過(guò)哪些?

頭條要聞

特朗普稱(chēng)美必須"擁有"整個(gè)格陵蘭 英法德迅速統(tǒng)一戰(zhàn)線

頭條要聞

特朗普稱(chēng)美必須"擁有"整個(gè)格陵蘭 英法德迅速統(tǒng)一戰(zhàn)線

體育要聞

金元時(shí)代最后的外援,來(lái)中國(guó)8年了

娛樂(lè)要聞

關(guān)曉彤鹿晗風(fēng)波后露面 不受影響狀態(tài)佳

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

投資必看!瑞銀李萌給出3大核心配置建議

科技要聞

市場(chǎng)偏愛(ài)MiniMax:開(kāi)盤(pán)漲42%,市值超700億

汽車(chē)要聞

助跑三年的奇瑞 接下來(lái)是加速還是起跳?

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

本地
旅游
健康
房產(chǎn)
軍事航空

本地新聞

云游內(nèi)蒙|“包”你再來(lái)?一座在硬核里釀出詩(shī)意的城

旅游要聞

青春不設(shè)限,臺(tái)兒莊古城有“飲”力!解鎖年輕人的旅行新玩法

這些新療法,讓化療不再那么痛苦

房產(chǎn)要聞

66萬(wàn)方!4755套!三亞巨量房源正瘋狂砸出!

軍事要聞

特朗普:已開(kāi)始從委石油資源中賺錢(qián)

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