為什麼要學 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 到底解決了什麼問題」開始。