AML là gì?
Quicknote giải thích ACPI Machine Language.
AML là bytecode mà OS ACPI interpreter thực thi. Người viết firmware thường viết ASL, compile thành AML, nhúng vào DSDT/SSDT, rồi OS sẽ evaluate method khi cần resource, power state hoặc device-specific function.
Nói ngắn gọn: ASL là thứ người đọc, AML là thứ OS chạy.
Source dễ đọc
Method (_STA) { Return (0x0F) }
Compile
ASL được compile thành AML binary.
DSDT/SSDT
Firmware publish AML trong ACPI table.
Interpreter
OS evaluate method khi enumerate hoặc power transition.
Ví dụ ASL nhỏ
Device (DEV0) {
Name (_HID, "ACME0001")
Method (_STA, 0, NotSerialized) {
Return (0x0F)
}
}
Ý nghĩa thực tế: OS nhìn thấy device ACME0001 và _STA = 0x0F báo device present, enabled, visible và functioning.
Khi debug AML
Nếu OS báo lỗi kiểu AE_NOT_FOUND, AE_ALREADY_EXISTS, AE_AML_OPERAND_TYPE, hãy decompile AML và nhìn vào method đang bị evaluate.
iasl -d DSDT.dat SSDT*.dat
Sau đó kiểm tra method có return đúng kiểu dữ liệu OS kỳ vọng không. _CRS mà trả resource template sai, _DSM mà trả package sai format, hoặc _STA return nhầm bit đều có thể làm device biến mất.
AML debug checklist
Firmware engineer notes
AML không nên được xem là “config text”. Nó là code chạy bởi OS. Vì vậy một bug AML có thể giống bug phần mềm: sai branch, sai type, sai resource, sai timing với EC/GPIO.
Bài liên quan
Nguồn tham khảo public
Thấy nội dung này hữu ích?
Lưu lại hoặc chia sẻ cho người cũng đang học firmware, BIOS/UEFI và embedded systems.
Nội dung liên quan
Một số bài viết, ghi chú hoặc project có liên quan đến nội dung bạn vừa đọc.
DSDT vs SSDT khác nhau thế nào?
Quicknote phân biệt DSDT và SSDT trong ACPI.
ACPI Table Types cần biết
Quicknote giới thiệu các loại ACPI table thường gặp.
ACPI là gì: tại sao firmware không nên tắt máy bằng cách toggle GPIO
Tại sao firmware không nên dùng GPIO trực tiếp để tắt máy? ACPI là hợp đồng firmware viết, OS đọc: table, AML, power state và cách debug sleep/wake sai.
Biến note thành bài viết hoàn chỉnh
Notes là nơi ghi nhanh khái niệm.