為什麼要學 ACPI ASL?

打開任何一台 x86 筆電或伺服器,作業系統之所以知道「這台機器有哪些電池、 哪顆 GPIO 控制器、感測器接在哪條 I2C 匯流排、按下電源鍵該做什麼」, 靠的不是魔法,而是韌體交給作業系統的一份「機器說明書」—— 。而撰寫這份說明書的語言,就是 (ACPI Source Language)。

ASL 是 BIOS/UEFI 韌體工程師的核心技能之一:無論是新平台 bring-up、 電源管理調校、Windows/Linux 相容性除錯,或是 Embedded/AI SoC 平台開發,最終都會回到同一個問題——「DSDT/SSDT 裡到底寫了什麼?」 本教材的目標,就是讓你有能力自己讀懂、寫出、除錯這份機器說明書。

本教材的學習路徑

真正有價值的學習路徑不是只背 ASL 語法,而是走完整條工程鏈:

教材結構總覽

全書共 12 個 Module、30 章、5 個實戰專案,難度由淺入深:

Module 主題 章節 難度
1 ACPI 基礎與架構 第 1 章
2 ASL、AML 與 ACPI Namespace 第 2–3 章
3 ASL 基本語法 第 4–7 章
4 Device 與硬體描述 第 8 章
5 OperationRegion 與 Field 第 9–11 章
6 Control Method 第 12–14 章
7 Power Management 第 15–17 章
8 DSDT / SSDT 實戰 第 18–20 章
9 iASL Toolchain 第 21 章
10 Linux ACPI Debugging 第 22–24 章
11 進階整合:ACPI、C/C++ 與 Linux Kernel 第 25 章
12 實戰專案(Projects 1–5) 第 26–30 章

12 週課程計畫

若作為一學期課程使用,建議按以下進度:

Week 學習內容 實作
1 ACPI Architecture(Module 1) 畫出 ACPI 架構圖
2 ASL / AML / Namespace(Module 2) 第一個 檔
3 ASL Syntax(Module 3) Variables / Operators
4 Device Objects(Module 4) / /
5 OperationRegion(Module 5) MMIO / I/O 存取
6 Field(Module 5) Register Access
7 Method(Module 6) Control Method
8 GPIO / I2C / SPI(Module 5、6) Hardware Device 描述
9 Power Management(Module 7) / /
10 DSDT / SSDT(Module 8) Dump & Disassemble
11 iASL / Linux Debug(Module 9、10) Real DSDT Analysis
12 Final Project(Module 11、12) ACPI Device + Driver

如何使用本教材

每一章都遵循同樣的節奏:觀念講解 → 完整範例 → 逐行拆解 → 動手練習。強烈建議你「每章至少親手編譯一次範例」—— ASL 是一門動手的語言,光用讀的學不會。

書中使用以下幾種提示框:

「核心觀念」框:本章最重要、必須內化的觀念,複習時先看這裡。

「補充說明」框:延伸知識、規格細節、與實務現場的連結。

「注意」框:常見誤解、容易踩到的坑、會讓機器不開機的操作。

「動手練習」框:每章結尾的練習題,請務必完成再進入下一章。

環境需求

  • 一台 Linux 機器(實體機或虛擬機皆可;Ubuntu 22.04+ 或 Fedora 皆適用)。

  • (含 、、)。

  • 建議另備 QEMU + OVMF,練習 DSDT/SSDT override 時安全許多。

  • 文字編輯器(VS Code、Vim 皆可,建議安裝 ASL syntax highlighting)。

安裝方式與環境驗證步驟詳見附錄。現在,讓我們從「ACPI 到底解決了什麼問題」開始。