ACPI 模塊

出自 Arch Linux 中文维基

簡介[編輯 | 編輯原始碼]

從 kernel 2.6.20.7 開始,acpi 模塊化了, 以避免一些機器上面產生的 acpi 的問題。

本文是對內核的 acpi 模塊的一個簡單介紹,這些模塊可以激活一些特別的 acpi 函數或者添加一些信息到 /proc 下面,以使得 acpid 或者其他監視程序可以處理 acpi 事件。

目前有哪些模塊?[編輯 | 編輯原始碼]

  • ac (電源連接情況) => 在啟動的時候由 initscripts-0.8-7 自動加載
  • asus_acpi (使用asus/medion 筆記本電腦的時候有用)
  • battery (電池狀態) => 在啟動的時候由 initscripts-0.8-7 自動加載
  • bay (bay status)
  • button (捕獲按鍵事件,比如合上顯示器或者按下電源按鈕) => 在啟動的時候由 initscripts-0.8-7 自動加載
  • container (container status)
  • dock (docking station status) 有些筆記本可以在下面附加一個dock來提供一些額外的功能,比如sony、dell的很多筆記本都有這個接口。
  • fan (風扇狀態) => 在啟動的時候由 initscripts-0.8-7 自動加載
  • hotkey (筆記本電腦的熱鍵)
  • i2c_ec (EC SMBus 驅動)
  • ibm_acpi (使用IBM筆記本電腦的時候有用)(2.6.22後是thinkpad_acpi)
  • processor (CPU處理器狀態) => 集成到了 kernel 2.6.20.7-2 中
  • sbs (smart battery status)
  • thermal (status of thermal sensors) => 集成到了 kernel 2.6.20.7-2 中
  • toshiba_acpi (使用toshiba筆記本電腦的時候有用)
  • video (視頻設備的狀態)

當前正在使用的內核支持的acpi模塊列表可以用下面命令查看:

# ls -l /usr/lib/modules/$(uname -r)/kernel/drivers/acpi
total 112
-rw-r--r-- 1 root root  2808 Aug 29 23:58 ac.ko.gz
-rw-r--r-- 1 root root  3021 Aug 29 23:58 acpi_ipmi.ko.gz
-rw-r--r-- 1 root root  3354 Aug 29 23:58 acpi_memhotplug.ko.gz
-rw-r--r-- 1 root root  4628 Aug 29 23:58 acpi_pad.ko.gz
drwxr-xr-x 2 root root  4096 Aug 29 23:59 apei
-rw-r--r-- 1 root root  7120 Aug 29 23:58 battery.ko.gz
-rw-r--r-- 1 root root  3700 Aug 29 23:58 button.ko.gz
-rw-r--r-- 1 root root  2181 Aug 29 23:58 container.ko.gz
-rw-r--r-- 1 root root  1525 Aug 29 23:58 custom_method.ko.gz
-rw-r--r-- 1 root root  1909 Aug 29 23:58 ec_sys.ko.gz
-rw-r--r-- 1 root root  2001 Aug 29 23:58 fan.ko.gz
-rw-r--r-- 1 root root  1532 Aug 29 23:58 hed.ko.gz
-rw-r--r-- 1 root root  3241 Aug 29 23:58 pci_slot.ko.gz
-rw-r--r-- 1 root root 17742 Aug 29 23:58 processor.ko.gz
-rw-r--r-- 1 root root  3073 Aug 29 23:58 sbshc.ko.gz
-rw-r--r-- 1 root root  7098 Aug 29 23:58 sbs.ko.gz
-rw-r--r-- 1 root root  6311 Aug 29 23:58 thermal.ko.gz
-rw-r--r-- 1 root root  8891 Aug 29 23:58 video.ko.gz

如何選擇正確的模塊[編輯 | 編輯原始碼]

你只能自己來測試哪個模塊在你機器上面能正常工作:

# modprobe <yourmodule>

然後使用下面命令檢查模塊是否可用

# dmesg
提示: 可以用 grep 進行過濾
 # dmesg | grep acpi
[    0.000000] ACPI: LAPIC (acpi_id[0x00] lapic_id[0x00] enabled)
[    0.000000] ACPI: LAPIC (acpi_id[0x01] lapic_id[0x04] enabled)
[    0.000000] ACPI: LAPIC (acpi_id[0x02] lapic_id[0x01] enabled)
[    0.000000] ACPI: LAPIC (acpi_id[0x03] lapic_id[0x05] enabled)
[    0.000000] ACPI: LAPIC_NMI (acpi_id[0x00] high edge lint[0x1])
[    0.000000] ACPI: LAPIC_NMI (acpi_id[0x01] high edge lint[0x1])
[    0.000000] ACPI: LAPIC_NMI (acpi_id[0x02] high edge lint[0x1])
[    0.000000] ACPI: LAPIC_NMI (acpi_id[0x03] high edge lint[0x1])
[    5.066752] ACPI: acpi_idle yielding to intel_idle
[    5.438998] acpi device:04: registered as cooling_device4

把需要的模塊按照 man modules-load.d 加入配置文件/etc/modules-load.d.

問題解決[編輯 | 編輯原始碼]

DSDT 修正[編輯 | 編輯原始碼]

如果裝入模塊後電源管理問題仍然存在,可能是 Linux 兼容性較差的DSDT導致。請參閱DSDTWiki 文檔。

筆記本 ACPI 修正[編輯 | 編輯原始碼]

如果遇到 ACPI: EC: input buffer is not empty, aborting transaction。 可能是 acpi 模塊導致。有兩個解決方法:

1. "簡單" 在 GRUB 的 menu.lst 或者 grub.cfg 中的內核行加入 acpi=off,這將禁用所有 acpi 功能,包括電池充電。

2. "難" 用 bugs.launchpad.net 中的補丁重新編譯內核。