目錄

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 格式

  1. 最外層只是純粹的二進位資料。AMD 系統通常不像 Intel 那麼嚴格依賴標準的 Intel Flash Descriptor (IFD),AMD 主要是透過一個由南橋/內建晶片(FCH/SPI 控制器)在硬體層面讀取的特定偏移量(Offsets)來尋找各分區
  2. AMD 專屬的表格式結構(Tables)。裡面記錄了:
    1. PSP Bootloader 的位置
    2. AGESA(AMD 核心初始化庫)的位置
    3. SMU(系統管理單元)的韌體: 這些檔案通常是純二進位(Raw Blobs),由 AMD 的加密晶片直接讀入記憶體執行
  3. 當 PSP 驗證完、把控制權交給 x86 核心後,接下來運作的就是傳統的 PI (Platform Initialization) 規範與 UEFI 模組
    1. UEFI 內部的元件(例如驅動程式、各種 Setup 介面)是以 FFS (Firmware File System) 的格式封裝
    2. 如果你用工具(如 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 晶片內部的獨立微控制器。

  1. PSP ROM (Platform Security Processor Read-Only Memory)
    1. 這是 AMD 內嵌在 CPU 晶片裡的一段「硬體罩頂」唯讀程式碼(通常基於 ARM 架構核心)。相當於 Intel 系統中的 ME (Management Engine)
    2. 它是整個系統的「硬體信任根(Root of Trust)」。一上電後,PSP ROM 會去外部 SPI Flash(主機板上的 BIOS 晶片)讀取並驗證下一階段的程式碼簽章,確保韌體沒有被竄改(這也是 AMD 實作硬體驗證開機、Secure Boot 的核心機制)
    3. 因為 PSP Mask ROM 自身容量太小、只能放最基本的指令,所以它醒來後的唯一工作,就是去外面的 SPI Flash(大倉庫)把 ABL 讀取出來
  2. ABL (AGESA Bootloader),他是 AMD 自己的二進位代碼(Binary)全是 AMD 官方撰寫並打包好的。主機板廠(如華碩、微星)在做 BIOS 時,是直接把 AMD 給的這些黑箱二進位檔(Blob)包進他們的 BIOS 映像檔裡。
    1. ABL 二進位代碼在 ROM 上,ABL 是給 PSP(那個獨立的 ARM 核心)執行的程式(分成 ABL0 到 ABL7 等階段)
    2. 對主機板廠或一般開發者來說,這部分完全不能改,它是封閉的(Proprietary)。這也是為什麼以前開源韌體(如 coreboot)在支援 AMD 處理器時痛不欲生的原因——因為早期整個開機最關鍵的這一段,完全被 AMD 的閉源 ABL 壟斷
    3. 它算 BIOS 嗎? 嚴格來說,它不屬於傳統意義上由主機板廠寫的「BIOS 設定介面」,它是晶片原廠(AMD)提供的底層硬體初始化韌體。傳統的 UEFI BIOS(主機板廠寫的那些畫面與選單)其實要等到 ABL 把記憶體拉起來、把 x86 CPU 釋放出來之後才輪到它登場
  3. AGESA (AMD Generic Encapsulated Software Architecture): 這是 AMD 提供的巨大核心軟體庫(封閉原始碼的二進位包或部分源碼),專門用來控制 AMD自家處理器的各種細節
    1. AGESA 橫跨了底層與上層,它提供了一整套標準介面給主機板廠(如 ASUS、MSI、Gigabyte)的 UEFI BIOS 使用,用來設定 CPU 頻率、電壓、Infinity Fabric 匯流排時脈、記憶體參數等
  4. 當 ABL 把記憶體跟晶片基礎環境都搞定後,AMD 的 PSP 終於解除 x86 主核心的暫停狀態,把控制權交給主機板廠寫入的 UEFI 韌體,這時就進入標準的 UEFI 啟動相容階段:
    1. PEI (Pre-EFI Initialization,前 EFI 初始化階段):主機板廠的 PEI 模組開始執行,這時會利用 AGESA 提供的函式庫,繼續初始化晶片組、偵測 PCIe 裝置等。
    2. 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

  1. 主機板廠在 ROM 裡面放了他們專屬的加密公鑰。
  2. 電腦第一次出廠開機時,CPU 會去讀取 ROM 裡的公鑰,然後在 CPU 內部「燒斷保險絲」(Fuses),把這個公鑰永久鎖死在 CPU 晶片內。
  3. 從此以後,這顆 CPU 就和這個主機板品牌(甚至特定型號的 ROM 簽章)一輩子綁定了。

Intel

類似相關的開機流程,差別在 AMD 使用的是 PSP (Platform Security Processor),而 Intel 使用的是 ME (Management Engine) 或新一代的 CSME (Converged Security and Management Engine)。

  1. BootROM (內部罩幕唯讀記憶體)
    1. 這是 Intel 晶片內部的硬體唯讀 ROM(相當於 AMD 的 PSP ROM)。
    2. 它是整個 Intel 系統的硬體信任根。一上電後,BootROM 會去外部 SPI Flash(BIOS 晶片)讀取並驗證下一階段(CSME 韌體)的數位簽章,確保系統安全。
  2. CSME 韌體初始化 (Converged Security and Management Engine)
    1. Intel 的安全管理引擎(早期叫 ME)。這是一套獨立於主作業系統、甚至獨立於 x86 核心的高權限底層韌體。
    2. CSME 載入後,會負責初始化晶片組的基本電源、時脈、安全性設定,並在幕後監督整個系統的健康狀態。
  3. MRC (Memory Reference Code,記憶體參考程式碼)
    1. 這相當於 AMD 的 ABL / AGESA 的記憶體部分。它是 Intel 提供的二進位二進位檔(Binary Blob)或庫。
    2. 由底層控制器或早期初始化程序執行,負責最關鍵的 DRAM 記憶體訓練(DRAM Training),把主記憶體喚醒並調整好時序。