AMD/Intel CPU 開機流程了解
AMD 近代 CPU
- Zen6 架構 (代號:Morpheus / 伺服器版 Venice)
- 2026 年
- 運算核心 (CCD) 預計採用 2nm/3nm
- 大幅擴充 AI 相關指令集(如支援更廣泛的 AVX-512 擴充與矩陣運算相關指令)
- 持續優化 3D V-Cache 技術,並在伺服器與消費級市場提供更高的核心擴展性
- Zen5 架構 代號:Granite Ridge / Strix Point / Turin)
- 2024 年下半年起陸續上市
- 主要採用台積電 4nm 與 3nm 製程。
- 桌上型電腦: Ryzen 9000 系列(代號 Granite Ridge
- 行動與輕薄筆電: Ryzen AI 300 系列(代號 Strix Point),這代開始大量強調內建強大 NPU(XDNA 2 架構),滿足 Copilot+ PC 的 AI 算力需求
- 伺服器: EPYC 9005 系列(代號 Turin)
- Zen 4 架構(代號:Raphael / Phoenix
從 Zen 4 開始(如 Zen 4c、Zen 5c、Zen 6c),AMD 效仿了大小核的概念,但做法跟 Intel 不同
- 標準 Zen 核心: 追求極致的單核頻率、IPC 與最強的遊戲/瞬時效能。
- Zen c 核心: 架構邏輯完全相同(相容所有 x86 指令集),但透過縮小實體電路面積(Die Size)、降低極限時脈來換取極高的省電與多核密度。主要大量用在伺服器(EPYC)或行動裝置上,用來塞入更多核心來提升多工與多執行緒吞吐量。
AMD ROM 格式
- 最外層只是純粹的二進位資料。AMD 系統通常不像 Intel 那麼嚴格依賴標準的 Intel Flash Descriptor (IFD),AMD 主要是透過一個由南橋/內建晶片(FCH/SPI 控制器)在硬體層面讀取的特定偏移量(Offsets)來尋找各分區
- AMD 專屬的表格式結構(Tables)。裡面記錄了:
- PSP Bootloader 的位置
- AGESA(AMD 核心初始化庫)的位置
- SMU(系統管理單元)的韌體: 這些檔案通常是純二進位(Raw Blobs),由 AMD 的加密晶片直接讀入記憶體執行
- 當 PSP 驗證完、把控制權交給 x86 核心後,接下來運作的就是傳統的 PI (Platform Initialization) 規範與 UEFI 模組
- UEFI 內部的元件(例如驅動程式、各種 Setup 介面)是以 FFS (Firmware File System) 的格式封裝
- 如果你用工具(如 UEFITool)將這些 FFS 內的模組單獨解開(Extract),你會發現每一個獨立的 UEFI 驅動程式(.efi 檔),其本質確實都是一個標準的 Microsoft PE32 / PE32+ 格式執行檔
假如有 Coreboot, 原本存放 UEFI FFS(那些 PE 格式模組)的區域會被完全抹除。取而代之的是 coreboot 的專屬檔案系統 —— CBFS (coreboot File System)
CBFS 裡面不會再有 UEFI 的 PE 執行檔。它放的是 coreboot 編譯出來的 ELF 格式(Linux 標準執行檔格式)段落,以及被壓縮過的小型作業系統引導載荷(Payload,如 SeaBIOS 或 GRUB)。
AMD CPU 啟動流程
但按下電源按鈕,時,x86 主核心其實還處於被暫停(Reset)的狀態,最先醒來的是 AMD 晶片內部的獨立微控制器。
- PSP ROM (Platform Security Processor Read-Only Memory)
- 這是 AMD 內嵌在 CPU 晶片裡的一段「硬體罩頂」唯讀程式碼(通常基於 ARM 架構核心)。相當於 Intel 系統中的 ME (Management Engine)
- 它是整個系統的「硬體信任根(Root of Trust)」。一上電後,PSP ROM 會去外部 SPI Flash(主機板上的 BIOS 晶片)讀取並驗證下一階段的程式碼簽章,確保韌體沒有被竄改(這也是 AMD 實作硬體驗證開機、Secure Boot 的核心機制)
- 因為 PSP Mask ROM 自身容量太小、只能放最基本的指令,所以它醒來後的唯一工作,就是去外面的 SPI Flash(大倉庫)把 ABL 讀取出來
- ABL (AGESA Bootloader),他是 AMD 自己的二進位代碼(Binary)全是 AMD 官方撰寫並打包好的。主機板廠(如華碩、微星)在做 BIOS 時,是直接把 AMD 給的這些黑箱二進位檔(Blob)包進他們的 BIOS 映像檔裡。
- ABL 二進位代碼在 ROM 上,ABL 是給 PSP(那個獨立的 ARM 核心)執行的程式(分成 ABL0 到 ABL7 等階段)
- 對主機板廠或一般開發者來說,這部分完全不能改,它是封閉的(Proprietary)。這也是為什麼以前開源韌體(如 coreboot)在支援 AMD 處理器時痛不欲生的原因——因為早期整個開機最關鍵的這一段,完全被 AMD 的閉源 ABL 壟斷
- 它算 BIOS 嗎? 嚴格來說,它不屬於傳統意義上由主機板廠寫的「BIOS 設定介面」,它是晶片原廠(AMD)提供的底層硬體初始化韌體。傳統的 UEFI BIOS(主機板廠寫的那些畫面與選單)其實要等到 ABL 把記憶體拉起來、把 x86 CPU 釋放出來之後才輪到它登場
- AGESA (AMD Generic Encapsulated Software Architecture): 這是 AMD 提供的巨大核心軟體庫(封閉原始碼的二進位包或部分源碼),專門用來控制 AMD自家處理器的各種細節
- AGESA 橫跨了底層與上層,它提供了一整套標準介面給主機板廠(如 ASUS、MSI、Gigabyte)的 UEFI BIOS 使用,用來設定 CPU 頻率、電壓、Infinity Fabric 匯流排時脈、記憶體參數等
- 當 ABL 把記憶體跟晶片基礎環境都搞定後,AMD 的 PSP 終於解除 x86 主核心的暫停狀態,把控制權交給主機板廠寫入的 UEFI 韌體,這時就進入標準的 UEFI 啟動相容階段:
- PEI (Pre-EFI Initialization,前 EFI 初始化階段):主機板廠的 PEI 模組開始執行,這時會利用 AGESA 提供的函式庫,繼續初始化晶片組、偵測 PCIe 裝置等。
- DXE (Driver Execution Environment,驅動程式執行環境階段):進入這個階段後,系統會大量載入各種 DXE 驅動程式,初始化鍵盤、螢幕輸出、儲存裝置等,準備進入作業系統開機選單(BDS 階段)。
這邊很特別喔,這是一個非常普遍的迷思!在舊時代(或某些架構),DRAM Training 確實可能是由 BIOS / UEFI 的 PEI 階段來做;但是在現代的 AMD(甚至 Intel)架構上,這已經完全變了。
- 時序與安全性要求: 現代 DDR4 / DDR5 記憶體的訊號微調、物理訓練(DRAM Training)極其複雜,牽涉到極為精細的時序控制、電壓微調,以及與 CPU 記憶體控制器(IMC)的深度配合。
- x86 還沒醒來: 在開機第一瞬間,x86 主核心根本還沒被激活,記憶體(RAM)此時也是完全無法使用的狀態。
- Cache-as-RAM (CAR) 的消失: 以前沒有 PSP 的時代,x86 必須先利用 CPU 快取模擬成記憶體(CAR)來跑一小段程式去測 RAM。但現代 AMD 處理器乾脆把這項工作交給內建的 PSP,直接由 PSP 執行 ABL 在幕後把真正的 DRAM 跑完訓練、把資料對齊好,並把結果寫給 x86 之後用。
- 雖然 DRAM 已經被 PSP 訓好可用了,但根據 UEFI(PI 規範)的標準流程,x86 核心在執行早期的 C 語言環境(PEI 階段)時,為了絕對的安全隔離,或者在尚未完全建立分頁表(Page Tables)和全域記憶體映像前,部分韌體架構(特別是開源的 coreboot 或是部分 Intel 平台的早期參考代碼)依然會宣告一段 NEM(No Eviction Mode)的快取區域,用來建立最初始的 Stack。只是這個時候的 CAR,功能已經純粹退化為「極早期的安全暫存區」,而不是為了去「拯救還沒醒的記憶體」。
所以 SPI Flash 上面會有像是 AMD ABL,主機版的 BIOS,主機板廠(如華碩、微星)在製作 BIOS 檔案時,不能把程式碼亂塞。整個 SPI Flash(BIOS 晶片)的開頭必須嚴格按照 AMD 規定的格式排列,其中包含一個類似「目錄清單」的表頭。
這個目錄清單就像是一本 「SPI Flash 內容導覽手冊」,上面清楚記錄了每一個區塊(Entry)的:
- 身分代號(Type): 標註這段是 ABL、那是 SMU(電源管理)韌體、那是安全設定、還是 x86 要用的 UEFI BIOS。
- 記憶體偏移量(Offset): 記錄這段程式碼在 SPI Flash 的哪個位置。
- 大小與數位簽章: 用來驗證這段程式碼有沒有被竄改。
開源
雖然像 coreboot 這種開源 BIOS 專案支援了很多 AMD 平台(例如透過 Dasharo 這類開源韌體專案,已經能把 coreboot 裝在現代的 AMD AM5 平台或 EPYC 伺服器上),但開發者們還是面臨現實的妥協:
- PSP / ABL 關關難過: 開源韌體開發者無法自行改寫 PSP 裡面執行的底層驗證邏輯,也無法自己寫一套 DRAM Training。
- 作法: 他們在編譯 coreboot 時,依然必須把 AMD 官方閉源的 ABL / AGESA 二進位包(Binary Blobs)「嵌」進去。
- 他們用開源程式碼替換掉了主機板廠肥大的 UEFI 介面,但在最核心的開機第一秒(PSP 啟動、記憶體訓練),還是得摸著鼻子呼叫 AMD 的閉源黑箱。
因為過去這種閉源包袱讓伺服器大廠(如 Google、Meta 等參與 OCP 的企業)和開源社群極度痛苦,AMD 近幾年已經公開承諾轉型。
- OpenSIL (Open Silicon Initialization):這是 AMD 正在推動的新一代架構,打算用來逐步取代肥大又封閉的 AGESA。
- AMD 把原本包山包海、綁定 UEFI 的閉源 AGESA 拆開,轉成以開源(Open Source)的方式釋出硬體初始化程式庫(即 OpenSIL)。
- 這讓 coreboot 或其他開源韌體開發者,未來可以直接用純原始碼的方式去呼叫硬體初始化,而不用再被迫吃 AMD 綁死死的二進位包。這幾年社群也已經成功將 OpenSIL 移植到部分 AMD 平台進行測試
即使 AMD 願意開源部分底層(如 OpenSIL),開源韌體在 AMD(或 Intel)平台上始終會面臨一個終極矛盾——硬體安全與自由的衝突:如果你今天自己改寫了開源韌體,想完全掌控每一行程式碼,只要你的簽章沒有通過 CPU 內部 PSP ROM 的驗證,CPU 會直接拒絕開機。
現今所有能跑在 AMD 上的開源韌體,基本上都必須妥協於 AMD 的安全框架——利用官方允許的方式載入二進位元件,或者透過特定的開發者除錯管道(Debug Key)來解鎖。
現代 AMD CPU 內部有一區叫做 OTP (One-Time Programmable) Fuses 的一次性可程式化熔絲。當主機板廠向 AMD 拿貨並組裝時,他們會把自家專屬的公鑰(Public Key)寫入這群硬體熔絲中。一旦寫入並「鎖死(Fusing)」,這顆 CPU 就被綁定了。
如果你今天自己寫了一段開機程式碼(例如想改寫 ABL 或底層韌體),沒有相對應的私鑰(Private Key)去簽章,CPU 內部的 PSP 在開機瞬間進行數學驗證時就會失敗。驗證失敗的結果很簡單——CPU 直接拒絕解除暫停(Release Reset),主機板連畫面都不會亮(直接變磚)。
AMD PSB
- 主機板廠在 ROM 裡面放了他們專屬的加密公鑰。
- 電腦第一次出廠開機時,CPU 會去讀取 ROM 裡的公鑰,然後在 CPU 內部「燒斷保險絲」(Fuses),把這個公鑰永久鎖死在 CPU 晶片內。
- 從此以後,這顆 CPU 就和這個主機板品牌(甚至特定型號的 ROM 簽章)一輩子綁定了。
Intel
類似相關的開機流程,差別在 AMD 使用的是 PSP (Platform Security Processor),而 Intel 使用的是 ME (Management Engine) 或新一代的 CSME (Converged Security and Management Engine)。
- BootROM (內部罩幕唯讀記憶體)
- 這是 Intel 晶片內部的硬體唯讀 ROM(相當於 AMD 的 PSP ROM)。
- 它是整個 Intel 系統的硬體信任根。一上電後,BootROM 會去外部 SPI Flash(BIOS 晶片)讀取並驗證下一階段(CSME 韌體)的數位簽章,確保系統安全。
- CSME 韌體初始化 (Converged Security and Management Engine)
- Intel 的安全管理引擎(早期叫 ME)。這是一套獨立於主作業系統、甚至獨立於 x86 核心的高權限底層韌體。
- CSME 載入後,會負責初始化晶片組的基本電源、時脈、安全性設定,並在幕後監督整個系統的健康狀態。
- MRC (Memory Reference Code,記憶體參考程式碼)
- 這相當於 AMD 的 ABL / AGESA 的記憶體部分。它是 Intel 提供的二進位二進位檔(Binary Blob)或庫。
- 由底層控制器或早期初始化程序執行,負責最關鍵的 DRAM 記憶體訓練(DRAM Training),把主記憶體喚醒並調整好時序。