使用ACPI Patcher制作DSDT补丁 下载本文

内容发布更新时间 : 2024/9/24 20:25:52星期一 下面是文章的全部内容请认真阅读。

威廉第三的MAC系列教程(一) ——使用ACPI Patcher制作DSDT补丁

很多人都知道使用DSDT补丁可以开双核,但DSDT的功能不仅仅如此,除了开双核,还可以可以修复ACPI缺陷(不需要Disabler.kext,原版cpupowermanagement正常使用),RTC,HPET缺陷(原版kext正常工作),显卡(代替efi string),声卡(只是代替了HDAEnabler.kext),网卡(包括Time Machine问题),此外还可以解决其他很多奇奇怪怪的问题,因此建议尽可能使用DSDT补丁。

但是DSDT到底是什么东西,怎么这么神奇呢?这个要从ACPI说起了,ACPI是Intel(i386,x86_64,IA64)平台的标准固件规范,绝大部分OS需要从BIOS得到的信息都可以从ACPI得到,并且现在的趋势是未来的任何新的特性相关的信息都只能从ACPI得到。

ACPI的信息包括:

配置信息,这些信息从legacy PNP设备的配置,到多处理器,到NUMA,比如现在的Multiple Core的信息就只能从ACPI得到。Linux启动很多代码就是处理这些配置信息,比如APIC,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。ACPI主要是由很多表(Table)组成,而DSDT (Differentiated System Description Table)是其中一个最主要的ACPI表之一,它的定义如下

DSDT is an acronym for Differentiated System Description Table. This table contains the Differentiated Definition Block, which supplies the information and configuration information about the base system.

简单说就是包含了所有和基本系统(base system)不同的设备的信息,base system每台机器都是一样的,这个是在acpi spec里指定的,但是每台机器都是不相同的,所以不相同的设备大都是由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论坛里的一款软件ACPI Patcher,这个软件相对比较复杂,今天我们就来了解一下这个软件的用法。

软件界面如上图,左上可以指定bios和制作补丁,右上是具体选择补丁选项的地方,左下是输出信息,右下可以看到进度。

先来看左上部分各个标签的具体作用。 BIOS Patch:选择一个bios制作dsdt.aml,选择bios文件和指定输出dsdt.aml目录之后,选中Generate DSDT.aml,然后按下Patch Bios按钮即可,输出目录不可以是bios目录,否则会出错

DSDT Patch:对一个已有的DSDT.aml进行acpi修复,选择DSDT.aml,指定输出目录,按下Patch AML即可

Import DSDT:用已有的DSDT.dsl对bios打补丁,选择输入dsl文件和bios,按下Patch Bios即可

Export DSDT:从bios里解出DSDT.dsl文件,选择bios文件和输出目录,按下Exact即可

D/C DSDT:DSL编译成AML文件,或者AML文件反编译成DSL文件,取决于选中Compile还是Decomplie,选中Compile的时候如果同时选中Patch before compile,可以在把DSL编译成AML文件的时候打上ACPI补丁。

看完了左上的标签我们来看最重要的部分,右上bug fix的详细信息, General:

这里有三个最重要的修复,HPET Patch,RTC Patch和Aliases Patch,前两个可以解决一些时钟方面的问题,很多机器里如果有

AppleIntelCPUPowerManagement.kext就会四国,或者不能正常使用,需要Disabler.kext,如果你选了前两项,从此可以扔掉Disabler.kext,因为

AppleIntelCPUPowerManagement.kext可以正常工作了,第三个选项也许更加重