使用ACPIPatcher制作DSDT补丁.docx
- 文档编号:14181881
- 上传时间:2023-06-21
- 格式:DOCX
- 页数:19
- 大小:27.15KB
使用ACPIPatcher制作DSDT补丁.docx
《使用ACPIPatcher制作DSDT补丁.docx》由会员分享,可在线阅读,更多相关《使用ACPIPatcher制作DSDT补丁.docx(19页珍藏版)》请在冰点文库上搜索。
使用ACPIPatcher制作DSDT补丁
威廉第三的MAC系列教程
(一)——使用ACPIPatcher制作DSDT补丁
很早就开始接触Hacintosh了,也经常出没在各个hacintosh论坛,因此也积累了不少知识,但是很多东西都是英文的,却没有人引进到国内,导致很多人都不了解Hacintosh社区最新的进展,或者知其然不知其所以然,因此我在这里抛砖引玉,把自己知道的一些知识写出来和大家分享,也是想引出更多高手来。
第一篇我想给大家介绍如何使用ACPIPatcher制作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,throttingT-state),设备电源管理(D-state),系统电源管理(Suspend-to-Ram,Suspend-to-Disk,poweroff)等。
设备热插拔,ACPI用一种统一的方式来描述设备的热插拔,这样的设备从单一的PCI设备,到笔记本电脑的DockingStation,到整个PCIhierarchy,CPU,Memory,甚至整个NUMA节点。
可以说要理解现代PC平台必须了解ACPI。
ACPI主要是由很多表(Table)组成,而DSDT(DifferentiatedSystemDescriptionTable)是其中一个最主要的ACPI表之一,它的定义如下
DSDTisanacronymforDifferentiatedSystemDescriptionTable.ThistablecontainstheDifferentiatedDefinitionBlock,whichsuppliestheinformationandconfigurationinformationaboutthebasesystem.
简单说就是DSDT包含了所有和基本系统(basesystem)不同的设备的信息,basesystem每台机器都是一样的,这个是在acpispec里指定的,但是每台机器都是不相同的,所以不相同的设备大都是由DSDT表来描述。
它包含了很多AML代码。
大多数BIOS是针对windows开发的,而windows自己也不完全遵循acpi规范,所以因为BIOS的bug,这些代码本身可能有错,导致其他的系统,如linux,macos出错。
我们可以手动修复这些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,这个软件相对比较复杂,今天我们就来了解一下ACPIPatcher这个软件的用法。
软件界面如上图,左上可以指定bios和制作补丁,右上是具体选择补丁选项的地方,左下是输出信息,右下可以看到进度。
1、先来看左上部分各个标签的具体作用。
BIOSPatch:
选择一个bios制作dsdt.aml,选择bios文件和指定输出dsdt.aml目录之后,选中GenerateDSDT.aml,然后按下PatchBios按钮即可,输出目录不可以是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的时候如果同时选中Patchbeforecompile,可以在把DSL编译成AML文件的时候打上ACPI补丁。
2、看完了左上的标签我们来看最重要的部分,右上bugfix的详细信息,
General:
这里有三个最重要的修复,HPETPatch,RTCPatch和AliasesPatch,前两个可以解决一些时钟方面的问题,很多机器里如果有AppleIntelCPUPowerManagement.kext就会四国,或者不能正常使用,需要Disabler.kext,如果你选了前两项,从此可以扔掉Disabler.kext,因为AppleIntelCPUPowerManagement.kext可以正常工作了,第三个选项也许更加重要,AliasesPatch直接对应是否能开双核,对asus,msi的主板来说,这个选项是非常重要的,技嘉没有这个问题,选不选都无所谓。
3、 点击Fixes…可以看到一个新窗口
这里都是一些针对编译时出现error或者warning的fix,作者的意见是当出现这些error或者warning的时候可以选择,我的意见是全部选择,防止出现error或者warning,如果还有问题,就需要去网上搜索解决方案,自己动手修改代码然后再编译了。
Network:
这里相对比较复杂,你需要知道硬件位置,这个可以用ioRegistryExplorer来看,Lan0应该是百兆网卡而GIGE是千兆网卡,FixGP9指增加一个GPIO9的控制项,UseTimeMachineFix修复TimeMachine找不到内置网卡的问题,下面是针对技嘉P43P45Realtek8111c千兆网卡的设置图,它的硬件位置在PEX5
Graphics:
这里合理设置后完全可以代替efi-string,natit,nvinject,nvdarwin,nvkush等,首先在model那里选择显卡型号和显存大小,下面绿色的选项针对N卡,红色的针对A卡,N卡需要设置nvcap值,A卡需要设置Framebuffer和DevID,Hardwarelocation需要用ioRegistryExplorer看下,PEGP和UseDSDTGFX都要选中。
这里以硬件地址PCI0为例,分别给出nVidia8800GT512MB和ATIHD3870512MB显卡的示例。
nVidia8800GT512MB
ATIHD3870512MB
Audio:
通过设置audio可以代替HDAEnabler.kext,设置很简单,AudioChipset里预置了三种,RealtekALC888-0,RealtekALC888-2,RealtekALC889a,ALC888分别对应address0和address2,技嘉P43,P45板载的ALC888选RealtekALC888-0,ALC889选RealtekALC889a,此外还要选中UseHDEFAudio,下面以889为例
3、看完bugfix来看看左下角的两个编译选项,ForceDSDTCompilation表示强制编译,即便出现错误,StoponcompilationWarning表示出现warning时停止编译,追求完美的人可以选择此项,因为0error,0warning的dsdt表示没有任何语法错误。
右边还有一个选项是bios类型选择,根据你的bios类型选择Award还是AMI,技嘉的bios是Award
操作例子:
下面我们以技嘉GIGAEP43-UD3L为例,实际操作一次,显卡是nVidiaGeforce9800GTX512MB,声卡是ALC888。
设置输入输出路径,BIOS类型,Stoponwarning,General设置
然后按下PatchBios,运行完毕可以看到成功编译,而且可以看到编译过程中出现0Errors,0Warnings,0Remarks,660Optimizations。
此时到输出目录里可以看到dsdt.aml,此外,bios文件下面还会生成patch过的以new结尾的bios文件,如ep43ud3l.f4.new,如果你确认dsdt.aml可以使用,那么这个bios也是可以使用的,有需要的话可以自行刷bios,不过刷机有风险,还请慎重。
dsdt.aml的使用非常简单,首先确保你安装了支持dsdt的引导,如PC-EFIV9,Chameleon1.0.12或者Chameleon2RC1,推荐最新的Chameleon2RC1,然后把dsdt.aml放在系统盘的根目录或者Extra文件夹里,如果是efi分区启动,放在efi分区的Extra文件夹里就可以了。
到此,本次讲座就算是结束了。
全文完整的doc档和acpipatcher可以在附件下载到。
一点小更新,如果你用acpipatcher得不到DSDT,比如ASUS,MSI的部分主板,你可以在linux下通过在终端里运行
cat/proc/acpi/dsdt>dsdt.aml
得到,然后用acpipatcher把它反编译得到dsdt.dsl就可以修改了
如果你可以进入mac,那么用附件里的getdsdt脚本也可以得到dsdt.dat,重命名为dsdt.aml即可
还可以参考yanjin的帖子
此外yanjin另外一个帖子给手动修改的朋友提供了很多示例
修改n7as主板的AMIBIOS解决安装leopard问题
1、使用MMTool提取:
做过给AMIBIOS添加SLIC以激活VISTA的用户对MMTool应该很熟悉,我们这次的目的和添加SLIC类似,都是要修改ACPI,n7as的dsdt表与其他主板不同,不在1B模块,而是在10模块名称叫"acpiaml",独立存在。
因此提取10模块取名叫10.dat。
同样提取10的时候要选中“Inuncompressedform”。
用winhex打开10.dat模块文件,看文件是否是dsdt开头,wakh结尾。
是,另存为dsdt.aml
2.修改DSDT
这时我们需要intel的一个工具――iasl,下载地址为:
http:
//acpica.org/download/iasl-win-20080729.zip
我们只需要里面的iasl.exe。
首先反编译DSDT,在命令行下输入:
iasl-dDSDT.aml
得到一个DSDT.dsl,这是个文本文件,打开找到代码的最前面,把Scope(_PR)后面的大括号里Alias开头的那四行删掉,保存。
然后重新编译:
iaslDSDT.dsl
生成新的DSDT.aml
3.用新的DSDT替换原DSDT
同样是用winhex来编辑刚才的10模块。
替换的时候有个问题,ACPI里面每个表都对应一个偏移量,在替换的时候如果不想带来其它改动,就要保证这个偏移量不变。
如果DSDT表的大小变了,就会影响后面的表的偏移量,这是我们要避免的。
由于新的DSDT比老的要小,所以并在结尾补上一些0,保证结束地址不变。
另外还要把新的DSDT紧挨着最后一个“WAKh”右面的一个字节改成2E。
修改方式如下(参考):
用winhex打开10.dat,打开新的dsdt.aml
1)全部选中10模块中,将其全部置为0;
2)从dsdt.aml文件中全部选中,复制,
3)粘贴到10模块中;
4)将新粘入的内容后面的第一个0改成2E。
其他仍然保持为0。
保存退出。
最后用MMTool把新的10模块替换到BIOS文件中,刷入。
重启,祈祷……
整个过程必须慎之又慎,因为是手动替换DSDT表,如果出错后果自不必说。
当然真刷坏了也不是啥大不了的事,只要有备份,找个修电脑的再刷回去就行。
手动修改的例子:
听说苹果新的mac和macbook都是用的mcp79的平台加扣肉。
为了追求完美的mac我入了一个昂达的 n7as主板,配合我原有的
扣肉6300 ,开始了我的mac历程。
一开始,哇,不要说原版leopard10.5.6就是ipc10.5.6,ideb1.4 ***10.5.6没有一个能正常安装。
ideb1.4,可以安装但是不能启动 ,还不如我原先的七彩虹975x主板。
怎么办。
问google.通过一番搜索,明白了这是著名的CPUS=1问题是bios中acpidsdt不兼容导致的。
我阅读了如下帖子。
里面讲述了如何修改dsdt解决cpus=1的问题,但是我照着做时,发现无法走通,经过研究发现,我的bios 与文中的不同,我的dsdt是
独立的表,而文中是和acpi放在一起。
所以我改变了方法。
如下:
刷了修改的bios后我直接安装了原版。
用变色龙引导安装。
安装后,无显卡驱动,网卡驱动,声卡驱动。
首先解决的是显卡:
我首先使用ox86tools使用EFIstring,结果是有分辨率了。
但是无qe/ci
后来我下载了nvkush安装,显卡正常。
网卡:
声卡:
我头痛死了。
装了几个驱动都不行。
后来我在ipc中提取了alc883add0 alc883add1
发现了alc883add1中的hdaenabler有用。
我有根据
的办法制作了applehdaapplehdacontrol仿冒驱动,解决了这个问题。
不过后来我发现了更好的驱动。
支持10.5.7的仿冒驱动在
现在好了,完美了
不,我不要将这些驱动放在系统中,我想将所有的破解驱动,外来驱动都放到,变色龙的Extra/Extensions 中。
保持系统干净。
说了就做。
将我所用到的所有破解驱动都放到了变色龙的Extra/Extensions 同时在驱动的infolist
后面都添加了OSBundleRequired=Root
发现声卡,网卡可以加载,显卡不能启动qe/ci
经过几次测试确认nvkush在/S/L/E下可以打开qe/ci 在变色龙的Extra/Extensions 只能改分辨率。
最后我只能孤零零的将nvkush扔在/S/L/E下
后来见到了,威廉三世的帖子,
我也起了修改dsdt支持显卡的想法、但是威廉三世提供的acpipatch不支持我的显卡,也不能识别我的bios,
但是我在insanelymac找到了asusp5n7a-vm(mcp7a)的dsdt.aml
NewUpdatedDSDT:
HPETFixed,SoyoucanhaveAppleIntelCPUPowerManagement.kextinstalledw/oaDisabler.
GPUInjection,NoneedtohaveNVKush(oranyothergpuinjector)installed.
AllthanksgotoSignal64forallthehelp.
The2coreversion.aml:
DSDT.aml.zip(16.44K)Numberofdownloads:
241
The.dslifyouwanttoeditfor4coredetection:
dsdt.dsl.zip(30.15K)Numberofdownloads:
82
-D-
我将他的dsdt.aml放到变色龙的Extra/Extensions 删除/S/L/E下的nvkush启动
果然我的先看正常驱动了开了qe/ci
但是不能像他所说使用原版AppleIntelCPUPowerManagement.kext,也不能替代hdaenabler的作用,没有关系毕竟p5n7a-vm
与我的n7as硬件有所不同。
我决定按他的办法自己修改自己的dsdt.aml
第355楼开始的帖子。
首先用mmtools提取dsdt.aml根据你的bios情况使用
或者
然后用
iasl-ddsdt.aml 反编译成dsdt.dsl
dsdt.dsl是一个文本文件。
打开
1.修改解决cpus=1
搜素Scope(_PR)
去掉alias开头的语句。
改成如下样子
原有的语句
Scope(_PR)
{
Processor(P001,0x01,0x00004010,0x06){}
Alias(P001,CPU1)
Processor(P002,0x02,0x00000000,0x00){}
Alias(P002,CPU2)
Processor(P003,0x03,0x00000000,0x00){}
Alias(P003,CPU3)
Processor(P004,0x04,0x00000000,0x00){}
Alias(P004,CPU4)
}
修改后的样子
Scope(_PR)
{
Processor(CPU1,0x01,0x00004010,0x06){}
Processor(CPU2,0x02,0x00000000,0x00){}
Processor(CPU3,0x03,0x00000000,0x00){}
Processor(CPU4,0x04,0x00000000,0x00){}
}
2.hpet修改
搜索 If(_OSI("Windows2006"))修改:
原有语句
If(_OSI("Windows2006")){
Store(0x15,Local0)
}
改为:
If(_OSI("Windows2006"))
{
Store(0x15,Local0)
}
If(_OSI("Darwin"))
{
Store(0x15,Local0)
}
3.RTCmodified-去除红色代码
搜素Device(RTC0)
原有:
Device(RTC0)
{
Name(_HID,EisaId
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 使用 ACPIPatcher 制作 DSDT 补丁