1、当出现 running /sbin/loader 就停止不前了在安装启动时按住 TAB 键就可以到内核配置栏里了,加入:apm=off acpi=off pci=noacpi 就可以决定个问题了。其它 Linux 版本出现这个问题也可以用上面的方法决定。当然也可以通过以下命令进行安装linux all-generic-ide pci=nommconf 但是这种又会出现其他问题 kernel panic not syncingacpi_power_off called2007-08-27 09:49 解决办法:kernel /vmlinuz-2.4.22-jhsea3do ro root=LAB
2、EL=/ hdd=ide-scsi vga=0x31A apm=off acpi=on我是 asrock 的 k7vt2 主板, 装好 fedora 后发现不能用 poweroff (halt -p)关闭电源,时分郁闷!然后就是搜索问题原因,很多地方都说是 apmd 服务没有启动导致的,也有说和 acpid 有关.我试着用 service apmd start | service acpid start 来启动服务.未果然后我使用 /usr/bin/apmd ,提示说 apm 不被内核支持,在看了很多电源讨论贴后,我觉得有比要重新编译内核,前前后后编译了 5 次,都是针对 apm 来编译的,模
3、块化和内置我都试了,但还是提示 apm 不被内核支持 .接着我就开始看主板的说明书,我注意到说明书上标明该主板采用的试 acpi 的电源技术,我想这下可以解决问题了把,然后再一次编译了内核, 这次针对 acpi 编译的, 还是没有结果. 太胸闷了,要知道我在 XP 下关机是很顺利的然后我就到 google 上搜 acpid+linux+poweroff 这些关键字,果然有线索了,原来是要在内核启动上加参数,我马上修改/boot/grub/grub.confkernel /vmlinuz-2.4.22-jhsea3do ro root=LABEL=/ hdd=ide-scsi vga=0x31A
4、 apm=off acpi=on 我仔细观察了 init 的全过程,很好这次 acpid 服务启动了, 然后我试着 halt -p,终于连电源一起关闭了,真的很高兴阿 .我琢磨了一下那两句代码的意思,这是内核的启动参数, 也就是告诉内核该不要启用 apm,而应该启用 acpi, 我又注意到主板在开机启动是自检的结果是 power management = disable(我的主板不能在 bios 里面修改这个属性), 也就是说主板默认是不启动电源管理功能的,所以acpi=on 参数等于强至性的启用了 acpi.至此, 这个困扰我的问题解决了, 通过这件事,我学习了内核修改( 迫不得已阿),我也
5、找到了问题解决原理和过程,我把这个帖子发上来, 希望大家又类似问题的可以参考我的解决办法,这样可以少走弯路时间是宝贵的!当不能关闭电源时:1.请先看主板说明书,看看电源采用的技术2.看看能不能在 bios 里设置好电源方安3.启动相应的服务 service apmd start | service acpid start4.加入内核启动参数疑惑不解的 RED HAT 9 关机问题我现在使用的是 RED HAT 9,硬件环境为赛扬 D 315 ,KINGMAX 256*2 DDR400,华擎P4I48,世纪之星的电源。在 2.4 内核下使用 shutdown -h now,halt -p 以及
6、power off命令关机后都无法自动切断电源,在 power down 前有一行 flushing ide devices:hda hdc hdd.现在将内核升级至 2.6.9 就可以正常切断电源,而且所有 2.4 版的内核都无法自动切断电源,但是我不想用 2.6 的内核。我原来使用赛扬 1.3 加 815 时可以自动切断电源,望指教。2.6 内核电源管理方面同时支持高级电源管理 (Advanced Power Management, APM)、高级配置和电源接口(Advanced Configuration and Power Interface,ACPI) 两种电源管理方式。高级电源管理
7、(APM)由支持在计算机中对可管理电源硬件进行电源管理的一个或多个软件层组成。 APM 定义的是独立于硬件的软件接口,这个独立是指硬件特定的电源管理软件和操作系统电源管理策略驱动程序之间的独立。它不注重硬件的细节,使得高一级软件无须了解任何硬件接口,便可以使用 APM。而高级配置和电源接口(ACPI)是开放式工业规范,它为主板定义了灵活、可扩充的硬件接口。软件设计人员使用此规范将电源管理功能集成在整个计算机系统中,包括硬件、操作系统和程序。基本上就目前的 Linux 核心而言,皆已支援 APM 及 ACPI 這兩種標準的電源管理系統,但兩種電源管理系統只能同時使用一種,如果你使用的核心比 2.
8、4.10 新且會重新編譯kernel 及更新 source code,那你將會享受到 ACPI 功能的好處。但如果你熟悉舊式的方法或使用較老舊的系統,那你大可選擇 APM 方式的電源管理。當然如果遇到有問題或支援不佳的電源管理系統時亦可關閉所有的電源管理系統改用其他工具或方法節省電源,因為設計不良或沒有完全支援標準的電源管理系統將會造成系統毀壞或資料流失,在安裝系統前必須先注意小心。APM 電源管理系統雖為舊式的方法但已在 Linux 系統上使用一段時間其功能和應用程式較齊全且完善,KDE 圖形介面也包含了它的管理程式,較 ACPI 穩定許多。其最簡單的功能就是顯示目前供電的方式及電池的狀態容
9、量,使用者可設定進入省電模式的等待時間及預設需執行的動作,還可將系統置於 Suspend 或 Standby 的狀態。若要使用它就必須在kernel 中將它啟動,如果系統正確的啟動將可找到檔案 /proc/apm ,其中記錄了 APM 的版次及相關內容,或使用 dmesg | grep -i apm 查看 kernel 是否有正確的啟動它。APM daemon 主要可分為個程式apmd 掌控電源管理的主要工作 apm 命令列工具程式用於顯示目前的電池狀態及將電腦處於 Suspend 的狀態 xapm 使用於 X-window 的簡易型電池計量程式 ACPI 電源管理系統的功能較強但在 Linu
10、x 的應用上還在發展當中,所產生的問題也非常多,雖然 ACPI 的規格已發展到版本 2.0b,但硬體系統廠商雖支援 ACPI 但也同時支援舊的 APM/PNPBIOS 規格因此造成相當多的問題,但可以慶幸的是由於主導廠商之一的微軟夾著 windows 系統的優勢強全力支援 ACPI,造成廠商大量製造可經由微軟 WHQL 測試通過含ACPI 功能的電腦,使含 ACPI 功能的硬體大量普及,但不幸的是微軟的 ACPI 功能測試是很簡短的並無法保證完全相容於 ACPI 的規格,因此若使用 ACPI 支援不佳的電腦安裝 Linux系統,將會造成有一些 ACPI 的問題造成系統當機或更本無法安裝,但這一
11、些問題在window 上並不會發生。會有這一篇文章是因為本中心 TNDC 最近針對相當多的系統、主機板進行相容的硬體測試發現經由微軟 WHQL 測試通過的系統安裝 Linux 時會無法安裝或重新開機的現象,必須將 ACPI 的功能關閉才能正常運作,有的雖然可以支援但其功能不正常無法讀取硬體資訊供作業系統判讀等問題,因此使用 Linux 系統的 ACPI 功能必須小心挑選電腦硬體,否則將無法保證其功能可完全發揮。為了避免發生這個問題 Linux ACPI driver有維護一個名為“bad BIOS“的黑名單,紀錄已知無法使用 ACPI 功能的 BIOS 資訊,如果你的電腦在此當中將無法啟用 A
12、CPI 的功能。許多製造商為了讓使用者能順利安裝及執行 Linux 於所生產的電腦系統上,便以幾家主要的 Linux 套件商的系統為標地,用預定的核心作為系統功能及相容性的測試標準,便造成如果製造商要完全支援 ACPI 於 Linux 執行就必須等到主要的 Linux 套件商將 ACPI 功能加入 kernel 中,但目前的情況是 Linux 套件希望自己所出版的 OS 版本可以在大多數的硬體系統上執行,而將相容性有問題且支援不佳的 ACPI 於 kernel 中移除以減少安裝及使用上的問題擴大其佔有率。就如同目前市場上的例子,如果使用者安裝新版 RedHat 9.0 應該不會發現有 ACPI
13、 的問題,因為如上所敘 ACPI 與硬體有相容性的問題且基本上 RedHat還是以 server 的市場為利基點省電裝置對其來說功能不大,故將 ACPI 於 kernel 中移除所以使用 RedHat 9.0 Linux 基本上並沒有 ACPI 的功能。反觀 United Linux Group 就將 ACPI 功能包含於 kernel 中,使用者可以很方便的使用 ACPI 管理電源,以 SuSE Linux 為例其產品有慢慢走向 WORKSTATION 的趨勢,因此就必須考慮使用者安裝於筆記型電腦的操作行為和使用習慣,尤其在有限電源上的管理便成為非常重要,SuSE 8.1 號稱是第一個完全支
14、援 ACPI 2.0 功能的版本,但在安裝及使用系統時卻有可能發生一些議顯不到的問題,我們實際的經驗於安裝時就無法找到儲存設備或安裝完畢開機時無法載入驅動程式及找不到 PCI 設備 IRQ 管理等問題,這一些問題可以於開機時使用 ACPI 的參數將其功能完全取消,以下為 SuSE 8.1 於開機時對 ACPI 可採用的參數 :acpi=off 這個參數將使 ACPI 的功能完全停止,如果你的系統並不支援 ACPI 或發生 ACPI相關的問題。 acpi=oldboot 取消絕大部分 ACPI 的功能,只保留於開機時需 ACPI 功能的設備使用。 pci=acpi 系統的 IRQ 是由 ACPI
15、 (PIC) 只能提供 16 個 IRQ 或是由 APIC 來控制,APIC 功能將可使系統不受傳統的 16 個 IRQ 的限制可提供 24 個 IRQ,這個參數將使 PCI 介面採用ACPI (PIC)的方式取得 IRQ。 雖然 SuSE 8.1 所包含的 ACPI 功能在使用上會遇到一些問題,但很慶幸終於有套件商願意將此一功能加入,對於知道且願意使用的用戶方便許多,這版本還沒有發展到支援所有ACPI 的功能且沒有像 APM 一樣有完整的 KDE 圖形化工具可以使用,只提供了 ACPI 相關環境及參數的圖形瀏覽工具如 acpiw (ACPI watch: GUI and CLI for wa
16、tching /proc/acpi) AKPI (provides a simple KDE GUI frontend for ACPI) ,雖然相關應用軟體還在持續發展當中但仍可將 CPU 設定到多種不同的休眠狀態實際達到省電的效果,此外還可以支援 S3 (suspend to RAM)模式。上個月 SuSE 8.2 已經於美國公開發行了,這次針對 ACPI 的問題作了修補的動作及修改核心參數,新增了 pci=noacpi 和 acpi=force 兩個參數讓系統的相容性更好,更方便解決 ACPI 的問題。acpi=force 如果系統 BIOS 是在 2000 以前的舊設備此參數將強迫 A
17、CPI 功能啟動,這將會覆蓋參數 acpi=off 。 pci=noacpi 這個參數將關閉 PCI IRQ routing 在新的 ACPI 系統上。 雖然 ACPI 在 Linux 的應用上有許多問題,但由於 Intel 的全力的支持 Linux 在此技術上的應用,Linux 開發者已在 2.5.X kernel 中正式加入 ACPI 的功能,希望新版本的問世能將問題減少且能有多一點的應用程式及介面的支援。Linux 支援 ACPI 管理電源可分為三大部分,一. 系統核心對 ACPI driver 的支援 二. “ acpid “ 程式套件,包含了監督處理系統所收到 ACPI 事件的常駐程
18、式和 acpictl 為使用者於 client 端監督控自程式 三. “pmtools“ 程式套件,是一套開發者對 ACPI 功能分析及除錯的工具,目前這一些程式都還在發展當中,有一些甚至有使用上的問題,SuSE 8.2 就將用途不大的 acpictl 及有問題的 pmtools 移除,當然這一些工具仍然可由 ACPI 的相關網站取得如http:/ 和 http:/ ACPI 以 SuSE 8.2 為例一般安裝完畢就已經有包含部分 ACPI 的功能,可以檢查是否有 /proc/apci 目錄,如果有表示 kernel 中有開啟 ACPI 的功能,使用者可依電腦硬體支援的情況將需要的功能加入 k
19、ernel 中重新編譯新的 kernel。# cd /usr/src/linux/# make menuconfig 選擇 General Setup 選擇 ACPI Support 選擇所需要的功能加入 儲存後重新 Build kernel,重新開機載入新 kernel你會看到如下的檔案和目錄/proc/apci/ac_adapter alarm battery button debug_layer debug_level dsdt embedded_controller event fadt fan info power_resource processor sleep thermal_z
20、one如果編譯 kernel 有啟用 sleep 模式可以發現檔案/proc/apci/sleep,其中記錄著硬體系統可支援的模式,如 cat /proc/apci/sleepS0 S1 S3 S4 S5 執行 cat -v /proc/acpi/fadt 將顯現出 “FACP“table 的內容,前幾個 bytes 將可看到BIOS 的廠商名稱,假如你有看到表示 ACPI driver 已經能由 BIOS 當中讀取適當的 ACPI table,亦表示 ACPI 可以被正常執行。 ACPI package 中包含 acpid 和 acpictl 程式。 acpid 是一 daemon 程式,主
21、要用來監督 ACPI 的事件在依事件的內容作不同的處理,該事件紀錄於 /proc/acpi/event ,可接受的參數如下:acpid -d or -debug 在前景執行 daemon 程式 -t or -trace 開啟一個除錯追蹤模式 -v or -version 顯示出 acpid 的版本訊息 acpid 就算沒有載入來處理 ACPI 的事件,系統會因核心的支援而保有某些 ACPI 的功能如processor thermal support。acpictl 是一個使用者與 acpid 溝通的工具程式,SuSE 8.2 在 ACPI package 中並沒有將acpictl 程式放入,使
22、用者如果有需要必須自行下載完整的 ACPI tarball file,重新安裝才能使用,但我認為其對使用者用處不大。可接受的參數如下:acpictl -p or -pid 顯示出 acpid 的 pid number -b or -battery 顯示出電池的相關資訊 -i or -intermediary 作為 acpid 與其他程式的中介者 Pmtools 是程式開發者所使用的工具,可直接控制系統轉換為特定的 ACPI 模式,用於測試ACPI 的功能及解決問題,該程式已被包含在 SuSE 8.2 中,更新且完整的資料可由 Intel網站取得 http:/ Pmtools 請執行:#tar
23、zxvf pmtools-xxx.tar.gz 上述的 xxx 是 pmtools package 的版本 在相同的目錄下重新 build package,執行,#make由於 pmtools package 並沒有製作成為可自行安裝的方式,所以你必須自行手動的將它們複製到適當的地方:cp acpidisasm/acpidisasm /usr/local/bincp acpidmp/acpidmp acpdmp/acpitbl acpidmp/acpxtract /usr/local/bincp pmtest/pmtest /usr/local/binPmtools package 並沒有提供
24、任何文件可供參考,以下是一些該如何使用這一些工具的簡短說明:Acpidmp 是用來讀取 ACPI BIOS 中的 Table 值,將其內容匯出到螢幕上,這些 Table 包含了 FACP , DSDT , RSDT 如果想明瞭這些 Table 的內容及涵義,就必須去查詢 ACPI 2.0b 的規格書,使用 Acpidmp 若沒有提供 Table 的名稱,預設將顯示 RSDP Table 的內容。Acpidmp 所顯示的內容並不適合閱讀,必須搭配 acpidisam 程式加以轉換,如下#acpidmp DSDT | acpidisam輸出如下00000000: Scope _PR_ (_PR_)
25、 00000006: Processor CPU0 (_PR_.CPU0) 0000000d: 0x00 0000000e: 0x00008010 00000012: 0x06 00000013: Name _S0_ (_S0_) 00000018: Package 0000001a: 0x04 0000001b: 0x05 0000001d: 0x05 0000001f: 0x00 00000021: 0x00 00000023: Name _S1_ (_S1_) 00000028: Package 0000002a: 0x04 0000002b: 0x04 0000002d: 0x04 0
26、000002f: 0x00 00000031: 0x00 00000033: Name _S3_ (_S3_) 00000038: Package 0000003a: 0x04 利用 acpitbl 程式可以由 /proc/acpi 內查看系統所取得的 Table 內容#acpitbl /proc/acpi/dsdtproduces Signature: DSDT Length: 11841 Revision: 0x01 Checksum: 0x3c OEMID: SONY OEM Table ID: K1 OEM Revision: 0x20000203 Creator ID: MSFT C
27、reator Revision: 0x01000007 或是 FACP 的內容值#acpitbl /proc/acpi/fadt OEM Table ID: K1 2 0x32 Signature: FACP Length: 116 Revision: 0x01 Checksum: 0x12 OEMID: SONY OEM Revision: 0x20000203 Creator ID: PTL Creator Revision: 0x000f4240 FIRMWARE_CTRL: 0x03ffffc0 DSDT: 0x03ffc924 INT_MODEL: 0x00 SCI_INT: 9 S
28、MI_CMD: 0x000000b2 ACPI_ENABLE: 0xf0 ACPI_DISABLE: 0xf1 S4BIOS_REQ: 0xf2 PM1a_EVT_BLK: 0x00008000 PM1b_EVT_BLK: 0x00000000 PM1a_CNT_BLK: 0x00008042 PM1b_CNT_BLK: 0x00000000 PM2_CNT_BLK: 0x00000022 PM_TMR_BLK: 0x00008008 GPE0_BLK: 0x0000800c GPE1_BLK: 0x00000000 PM1_EVT_LEN: 4 PM1_CNT_LEN: PM2_CNT_LE
29、N: 1 PM_TM_LEN: 4 GPE0_BLK_LEN: 4 GPE1_BLK_LEN: 0 GPE1_BASE: 0 P_LVL2_LAT: 10 P_LVL3_LAT: 4097 FLUSH_SIZE: 0 FLUSH_STRIDE: 0 DUTY_OFFSET: 1 DUTY_WIDTH: 3 DAY_ALRM: 0x0d MON_ALRM: 0x00 CENTURY: Flags: 0x00000000 也可用下列方法取得#acpidmp FACP | acpitblPmtest 工具是一個專門給撰寫設備驅動程式的軟體工程師使用的,可以將不同的 ACPI 休眠狀態植入各設備中來測
30、試 ACPI 各狀態的功能,Pmtest 是一個 kernel module 所以它必須被建立於 /proc 當中,但該程式尚有若干 bug 未解,因此在應用上還有一些問題。Pmtest 工具說明如下放置於此 /proc/driver/pmtest/devices 中的設備是已經在電源管理系統註冊且可被控管的設備,設備檔案的內容含有一 0-3 的數值分別代表著 D0-D3 的狀態,如果直接執行則會列出所有已知設備的名稱及目前的狀態# ./pmtools/pmtestVGA (D0)PCI 0x0 (D0)CPU (D0)PCI 0x62 (D0) 以上所列的設備都是系統所能辨識的 ACPI 設
31、備,它們的狀態都是 D0 也就是說是處於正常的活動狀態,當然我們可以利用此工具將它的活動狀態改為 D1, D2 減少電源消耗,或是D3 完全關閉電源供應。用法: pmtest OPTION TYPE IDOPTION 的選項如下:-l 列出設備活動狀態(default) -d0 恢復正常設備活動狀態(ACPI D0) -d1, -d2, -d3 休眠狀態 (ACPI D1-D3) TYPE 的選項如下:PCI USB SCSI ISA system unknown ID 的選項如下:Keyboard serial irda floppy vga pcmcia 或由/usr/include/li
32、nux/pm.h 內指定的設備 Examples:#pmtest -d1 VGA#pmtest -lVGA (D1)PCI 0x0 (D0)CPU(D0)PCI 0x62 (D0) 改變 VGA 的活動狀態至省電模式 D1 (blank),改變後重新執行 pmtest 查看目前的活動狀態,就可以發現 VGA 的活動狀態已轉換到 D1 省電模式。pmtest -l PCI 列出所有已註冊的 PCI 設備活動狀態pmtest -d0 VGA 恢復 VGA(unblank)正常設備活動狀態pmtest -d3 PCI 0x62 讓 PCI 設備處於休眠狀態 D3 完全關閉其電源供應 其他問題 Sus
33、pend-to-Disk 在 Window 上使用問題不大但在 Linux 上的問題可就很難處理,主要的困難點在於 Suspend-to-Disk 無法正確地在 Linux ACPI 上執行,且許多筆記型電腦廠商使用許多方法來產生“suspend-to-disk“ 或 “hibernate“ 的檔案,缺乏統一的標準。如果想要達到在 Linux 上使用 Suspend-to-Disk 的功能,建議向廠商索取 Suspend-to-Disk (s2d)的工具程式執行,例如 Dell Inspiron 8000 多筆記型電腦使用 Dell 的 phdisk utility,當然其中問題還很多像是 p
34、artition 的規劃與放置及格式化,都必須向製造廠商詳細詢問及使用特定工具。 如果你的電腦不支援 ACPI APM 或是電源管理系統出了問題,在 Linux 上還有很多工具可以達到省電的功能。hparm 是 Linux 上的 shell utility 可以用來改善 IDE 硬碟的執行效率及電源管理,此工具可由系統中找到若沒有找到可由http:/ 下載,執行# hdparm -B128 -c1 -d1 -m16 -S60 -u1 -K1 -k1 -W1 /dev/had將會得到較好的執行效率及節省電源,但必須注意的是不同的系統的配備亦不同必須對各項參數作適當的調整,由其是 -B 及 -m 以防止資料流失。目前為止 ACPI 在 Linux 的使用上還有相當多的問題,實際執行時可能會遇到各種狀況,但ACPI 是電源管理發展的方向與目標,在此需要 Linux 的愛好者共同努力以解決實際的運用及相容的問題。相關內容參考於下列文章。http:/www.acpi.info/index.htmlhttp:/