手機編譯aml軟體
『壹』 誰能幫我把dsdt.dsl編譯成dsdt.aml
論壇上隨處可見。到處充斥著修改dsdt的軟體。比如。 dsdt auto pactor(但其中有好多壇友提出,自己的主板型號裡面都沒有)。dsdt se (此軟體集修改和修復於一身,我也漢化dsdt se了一下,下面有下載地址)。還有dsdt edit& auto fix/patcher
『貳』 如何使用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的詳細信息,