Linux acpi off學習的必要

G8bao7發表於2016-01-19

ACPI的內容龐雜,學習ACPI至少可以幫助我們理解配置資訊。這些資訊從legacy PNP裝置的配置,到多處理器,到NUMA,比如現在的Multiple Core的資訊就只能從ACPI得到。Linux啟動很多程式碼就是處理這些配置資訊,比如Linux acpi off,IOAPIC設定等。


ACPI相關裝置。主要是膝上型電腦相關的裝置,包括電源按鈕,電池,外接電源,風扇,熱鍵等。
底層硬體。比如PCI中斷路由,chipset(主要是南橋PCI-to-LPC bridge)操作等。
電源管理。ACPI定義的電源管理包括CPU的電源管理(調頻率P-state,idle C-state,throtting T-state),裝置電源管理(D-state),系統電源管理(Suspend-to-Ram, Suspend-to-Disk, power off)等。
裝置熱插拔。ACPI用一種統一的方式來描述裝置的熱插拔,這樣的裝置從單一的PCI裝置,到膝上型電腦的Docking Station,到整個PCI hierarchy,CPU,Memory,甚至整個NUMA節點。
可以說要理解現代PC平臺必須瞭解ACPI。

Linux acpi off解決ACPI問題的小竅門

首先可以看看是否這是一個regression,如果以前版本的Linux kernel可以工作,但新的不行,則是一個regression,可以測試不同的kernel從而找出哪個版本引入了bug。使用git-bisect 是一個好的選擇,它可以幫你定位到哪個patch導致了regression。一些git-bisect相關的資料如下:


Linux acpi off系統不能啟動

試試kernel引數”acpi=off”,如果此引數沒有帶來任何改變,那麼這不是一個ACPI bug。反之,則這很可能是一個ACPI bug。 確定了是一個ACPI bug後,我們還有其他一些引數來更進一步的區分到底是ACPI哪個部分的bug。

acpi=ht
這個引數和"acpi=off"幾乎一樣,它禁止了除多處理器配置相關的內容以外的所有ACPI功能。如果acpi=off正常,但acpi=ht 不正常, 則解析ACPI 表或者Linux SMP的程式碼有bug.

pci=noacpi
禁止使用ACPI來處理任何PCI相關的內容,包括PCI root bus的列舉和PCI裝置中斷路由。

acpi=noirq
禁止使用ACPI來處理PCI裝置中斷路由,和pci=noacpi的區別是它允許使用ACPI來列舉PCI root bus.

pnpacpi=off
禁止使用ACPI來列舉PNP裝置,比如串列埠、PS2鍵盤滑鼠等。

noapic
禁止使用io-apic來做裝置中斷路由,這樣做的效果之一是ACPI返回的中斷路由表將是針對PIC(8259)的。

nolapic
禁止使用Local-APIC和IO-APIC。

Linux acpi off裝置中斷相關的問題
出現中斷問題的可能性很多,比如驅動程式有bug。由ACPI導致的最常見的中斷問題是kernel打出:”irqXX: nobody cared!”。這意味著kernel收到一箇中斷,但是沒有驅動程式來處理此中斷。Kernel會將此中斷禁止,從而導致掛在此中斷上的所有裝置都停止 工作。pci=noacpi, acpi=noirq, pnpacpi=off, noapic, nolapic這些引數可以幫助隔離一些問題。另外一個有用的引數是”irqpoll”,出現上面的中斷問題時,它可以使kernel自動探測哪個裝置發 出了中斷。這個引數對於除錯那些中斷路由有問題的系統很有用。

[@more@]

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/26250550/viewspace-1978816/,如需轉載,請註明出處,否則將追究法律責任。

相關文章