acpi編譯版本
A. 如何使用ACPI Patcher製作DSDT補丁
很多人都知道使用DSDT補丁可以開雙核,但DSDT的功能不僅僅如此,除了開雙核,還可以可以修復ACPI缺陷(不需要Disabler.kext,原版cpupowermanagement正常使用),RTC,HPET缺陷(原版kext正常工作),顯卡(代替efistring),音效卡(只是代替了HDAEnabler.kext),網卡(包括TimeMachine問題),此外還可以解決其他很多奇奇怪怪的問題,因此建議盡可能使用DSDT補丁。
但是DSDT到底是什麼東西,怎麼這么神奇呢?這個要從ACPI說起了,ACPI是Intel(i386,x86_64,IA64)平台的標准固件規范,絕大部分OS需要從BIOS得到的信息都可以從ACPI得到,並且現在的趨勢是未來的任何新的特性相關的信息都只能從ACPI得到。
ACPI的信息包括:
配置信息,這些信息從legacyPNP設備的配置,到多處理器,到NUMA,比如現在的MultipleCore的信息就只能從ACPI得到。linux啟動很多代碼就是處理這些配置信息,比如APIC,IOAPIC設置等。
ACPI相關設備,主要是筆記本電腦相關的設備,包括電源按鈕,電池,外接電源,風扇,熱鍵等。
底層硬體,比如PCI中斷路由,chipset(主要是南橋PCI-to-LPCbridge)操作等。
電源管理,ACPI定義的電源管理包括CPU的電源管理(調頻率P-state,idleC-state,throtting T-state),設備電源管理(D-state),系統電源管理(Suspend-to-Ram,Suspend-to-Disk, power off)等。
設備熱插拔,ACPI用一種統一的方式來描述設備的熱插拔,這樣的設備從單一的PCI設備,到筆記本電腦的DockingStation,到整個PCI hierarchy,CPU,Memory,甚至整個NUMA節點。
可以說要理解現代PC平台必須了解ACPI。ACPI主要是由很多表(Table)組成,而DSDT(Differentiated System Description Table)是其中一個最主要的ACPI表之一,它的定義如下
DSDT is an acronym for DifferentiatedSystem Description Table. Thistable contains theDifferentiated Definition Block, which supplies theinformation and configuration information about the base system.
簡單說就是包含了所有和基本系統(basesystem)不同的設備的信息,basesystem每台機器都是一樣的,這個是在acpispec里指定的,但是每台機器都是不相同的,所以不相同的設備大都是由DSDT表來描述。它包含了很多AML代碼。大多數BIOS是針對windows開發的,而windows自己也不完全遵循acpi規范,所以因為BIOS的bug,這些代碼本身可能有錯,導致其他的系統,如linux,mac os出錯。
我們可以手動修復這些bug使之兼容MAC系統。DSDT在bios里是以編譯後的aml文件存在,需要把它解出來,反編譯成aml代碼形式(dsl文件,文本文件),代碼修改完畢再重新編譯,替換掉bios里原來的dsdt表。不過PC-EFI,Chameleon的出現,使得我們不再需要冒險刷bios,只要把製作好的DSDT.aml文件放在根目錄或者/Extra文件夾里,啟動的時候就會自動使用這個DSDT.aml,從而達到修復ACPI系統bug的作用。
但是DSDT補丁怎麼製作,卻很少有人能詳細的介紹,mac上的軟體基本上只能製作解決雙核,acpi問題的dsdt.aml,要想解決更多的問題,就必須回到windows,使用insanelymac論壇里的一款軟體ACPIPatcher,這個軟體相對比較復雜,今天我們就來了解一下這個軟體的用法。
軟體界面如上圖,左上可以指定bios和製作補丁,右上是具體選擇補丁選項的地方,左下是輸出信息,右下可以看到進度。
先來看左上部分各個標簽的具體作用。
BIOSPatch:選擇一個bios製作dsdt.aml,選擇bios文件和指定輸出dsdt.aml目錄之後,選中GenerateDSDT.aml,然後按下Patch Bios按鈕即可,輸出目錄不可以是bios目錄,否則會出錯
DSDTPatch:對一個已有的DSDT.aml進行acpi修復,選擇DSDT.aml,指定輸出目錄,按下PatchAML即可
ImportDSDT:用已有的DSDT.dsl對bios打補丁,選擇輸入dsl文件和bios,按下PatchBios即可
ExportDSDT:從bios里解出DSDT.dsl文件,選擇bios文件和輸出目錄,按下Exact即可
D/CDSDT:DSL編譯成AML文件,或者AML文件反編譯成DSL文件,取決於選中Compile還是Decomplie,選中Compile的時候如果同時選中Patchbefore compile,可以在把DSL編譯成AML文件的時候打上ACPI補丁。
看完了左上的標簽我們來看最重要的部分,右上bugfix的詳細信息,
General:
這里有三個最重要的修復,HPETPatch,RTCPatch和AliasesPatch,前兩個可以解決一些時鍾方面的問題,很多機器里如果有AppleIntelCPUPowerManagement.kext就會四國,或者不能正常使用,需要Disabler.kext,如果你選了前兩項,從此可以扔掉Disabler.kext,因為AppleIntelCPUPowerManagement.kext可以正常工作了,第三個選項也許更加重要,AliasesPatch直接對應是否能開雙核,對asus,msi的主板來說,這個選項是非常重要的,技嘉沒有這個問題,選不選都無所謂。
點擊Fixes…可以看到一個新窗口
這里都是一些針對編譯時出現error或者warning的fix,作者的意見是當出現這些error或者warning的時候可以選擇,我的意見時全部選擇,防止出現error或者warning,如果還有問題,就需要去網上搜索解決方案,自己動手修改代碼然後再編譯了。
Network:
這里相對比較復雜,你需要知道硬體位置,這個可以用ioRegistryExplorer來看,Lan0應該是百兆網卡而GIGE是千兆網卡,FixGP9指增加一個GPIO9的控制項,UseTime Machine Fix修復Time Machine找不到內置網卡的問題,下面是針對技嘉P43 P45 Realtek 8111c千兆網卡的設置圖,它的硬體位置在PEX 5
Graphics:
這里合理設置後完全可以代替efi-string,natit,nvinject,nvdarwin,nvkush等,首先在model那裡選擇顯卡型號和顯存大小,下面綠色的選項針對N卡,紅色的針對A卡,N卡需要設置nvcap值,A卡需要設置Framebuffer和DevID,Hardwarelocation需要用ioRegistryExplorer看下,PEGP和Use DSDT GFX都要選中。
這里以硬體地址PCI 0為例,分別給出nVidia8800 GT 512MB和ATI HD3870 512MB顯卡的示例。
nVidia 8800 GT512MB
ATI HD3870 512MB
Audio:
通過設置audio可以代替HDAEnabler.kext,設置很簡單,AudioChipset里預置了三種,Realtek ALC888-0,Realtek ALC888-2,RealtekALC889a,ALC888分別對應address 0和address 2,技嘉P43, P45板載的ALC888選RealtekALC888-0,ALC889選Realtek ALC889a,此外還要選中Use HDEF Audio,下面以889為例
看完bug fix來看看左下角的兩個編譯選項,ForceDSDT Compilation表示強制編譯,即便出現錯誤,Stop on compilation Warning表示出現warning時停止編譯,追求完美的人可以選擇此項,因為0error,0warning的dsdt表示沒有任何語法錯誤。
右邊還有一個選項是bios類型選擇,根據你的bios類型選擇Award還是AMI,技嘉的bios是Award
目前市面上較流行的主板BIOS主要有 Award BIOS、AMI BIOS、Phoenix BIOS三種類型。
Award
Award BIOS是由Award Software公司開發的BIOS產品,在目前的主板中使用最為廣泛。Award BIOS功能較為齊全,支持許多新硬體,目前市面上多數主機板都採用了這種BIOS。
AMI
AMI BIOS是AMI公司(全稱:American Megatrends Incorporated)出品的BIOS系統軟體,開發於80年代中期,早期的286、386大多採用AMI BIOS,它對各種軟、硬體的適應性好,能保證系統性能的穩定,到90年代後,綠色節能電腦開始普及,AMI卻沒能及時推出新版本來適應市場,使得Award BIOS佔領了大半壁江山。當然現在的ami也有非常不錯的表現,新推出的版本依然功能強勁。
Phoenix
Phoenix BIOS是Phoenix公司產品,Phoenix意為鳳凰或埃及神話中的長生鳥,有完美之物的含義。Phoenix BIOS 多用於高檔的586原裝品牌機和筆記本電腦上,其畫面簡潔,便於操作。
Insyde
Insyde bios 是台灣的一家軟體廠商的產品,是一種新興的BIOS類型,被某些基於英特爾晶元的筆記本電腦採用,如神舟、聯想。
下面我們以技嘉GIGA EP43-UD3L為例,實際操作一次,顯卡是nVidiaGeforce 9800 GTX 512MB,音效卡是ALC888。
設置輸入輸出路徑,BIOS類型,Stopon warning,General設置
補丁詳細設置
然後按下Patch Bios,運行完畢可以看到成功編譯,而且可以看到編譯過程中出現 0Errors, 0 Warnings, 0 Remarks, 660 Optimizations。
此時到輸出目錄里可以看到dsdt.aml,此外,bios文件下面還會生成patch過的以new結尾的bios文件,如ep43ud3l.f4.new,如果你確認dsdt.aml可以使用,那麼這個bios也是可以使用的,有需要的話可以自行刷bios,不過刷機有風險,還請慎重。
dsdt.aml的使用非常簡單,首先確保你安裝了支持dsdt的引導,如PC-EFIV9,Chameleon1.0.12或者Chameleon 2 RC1,推薦最新的Chameleon2 RC1,然後把dsdt.aml放在系統盤的根目錄或者Extra文件夾里,如果是efi分區啟動,放在efi分區的Extra文件夾里就可以了。
到此,本次講座就算是結束了。全文完整的doc檔和acpi patcher可以在附件下載到。
一點小更新,如果你用acpi patcher得不到DSDT,比如ASUS,MSI的部分主板,你可以在linux下通過在終端里運行
cat /proc/acpi/dsdt > dsdt.aml
得到,然後用acpi patcher把它反編譯得到dsdt.dsl就可以修改了
如果你可以進入mac,那麼用附件里的getdsdt腳本也可以得到dsdt.dat,重命名為dsdt.aml即可