基本原理
在电脑开机时(对应_INI method)和睡眠唤醒时(对应_WAK method)调用关闭Nvidia独显的Method。
这个网站http://hybrid-graphics-linux.tuxfamily.org/index.php?title=ACPI_calls总结了关闭Nvidia显卡的常见methods,还列举了一些机型的具体情况,大家可以去看看,弄清楚自己电脑关闭显卡的method究竟是哪个,然后结合这个帖子来修改DSDT.
正如上面那个网站所示,关闭Nvidia独显一般有两种方法:一、使用 _DSM + _PS3;二、直接用_OFF(或者DOFF,SGOF等等,有些机型是不同的);
虽然上面那个网站一般都是直接调用OFF()函数来关闭独显的,但个人觉得如果有_DSM和_PS3的话,先使用方法一比较好,因为方法二可能会有一些影响,比如CPU变频的问题。(具体请看参考帖子[教程] 解决Optimus 和CPU Turbo 变频冲突)。
具体方法
很多人喜欢把SSDT的显卡部分移到DSDT中然后添加关闭独显的代码,并且开机DropOEMSSDT只用DSDT。但是我个人觉得这样子很麻烦,首先在移动过程中可能会产生错误,而且Drop掉SSDT后,DSDT中的那些External variables,methods就无法access了,因此DSDT中用到这些Objects,Methods的地方就会产生问题。如果Drop SSDT的目的是为了使用clover和变色龙的Generate P-States和C-States的话,clover可以只Drop掉有CPU信息的SSDT,变色龙可以把除有CPU信息的其他SSDT放在Extra目录下再DropSSDT,所以我认为完全没有必要花时间来移动显卡部分或者其他东西。如果DSDT和SSDT要相互调用对方的函数,那就在definition block那里加上External就好了。(如果新人看不懂这一段就跳过吧)说了那么多废话,终于开始了。
注意,在修改DSDT和SSDT之前,可以用这个帖子介绍的方法先生成dsl文件,可以减少错误,还有其他错误自己爬帖解决。不过如果你某个DSDT或SSDT有错误不能解决但你不需要再把它编译成AML文件的话,可以不用管它。
方法一:搜索函数
首先在DSDT和SSDT中搜索找到要用的函数_WAK,_INI,_PS3,_DSM。_WAK一般只有一个。_INI可能有很多个,最好用\_SB.PCI0下或\_SB.PCI0.PEG0.PEGP的。_PS3只有一个,如果没有的话看方法二。_DSM会有很多个,一定要用\_SB.PCI0.PEG0.PEGP下的,如果\_SB.PCI0.PEG0.PEGP下没有,搜索看看Device(GFX0)下有没有,如果都没有就看方法二.(注意,以下步骤是默认你DSDT的相关methods为一般情况,若有不同需根据你自己的DSDT做相应更改)
方法一:在_WAK之前新建一个Method PINI()
Method(PINI,0,NotSerialized)
{
\_SB.PCI0.PEG0.PEGP._DSM(Buffer(0x10)
{
/*0000*/0xF8,0xD8,0x86,0xA4,0xDA,0x0B,0x1B,0x47,
/*0008*/0xA7,0x2B,0x60,0x42,0xA6,0xB5,0xBE,0xE0
},0x0100,0x1A,Buffer(0x04)
{
0x01,0x00,0x00,0x03
})
\_SB.PCI0.PEG0.PEGP._PS3()
}
Method(_WAK,1,Serialized)
{
PINI()
......
}
[。。。省略。。。]
Method(_INI,0,NotSerialized)
{
PINI()
.......
}
ErrorObjectdoesnotexist(PINI)
External(PINI,MethodObj)
DefinitionBlock("acpi_dsdt.aml","DSDT",1,"LENOVO","CB-01",0x00000001)
{
External(_SB_.PCI0.PAUD.PUAM,MethodObj)//Warning:UnresolvedMethod,guessing0arguments(maybeincorrect,seewarningabove)
External(_SB_.PCI0.XHC_.DUAM,MethodObj)//Warning:UnresolvedMethod,guessing0arguments(maybeincorrect,seewarningabove)
External(_SB_.TPM_.PTS_,MethodObj)//Warning:UnresolvedMethod,guessing1arguments(maybeincorrect,seewarningabove)
External(_PR_.CFGD,FieldUnitObj)
External(_PR_.CPU0._PPC,IntObj)
External(_PR_.CPU0._PSS,PkgObj)
External(PINI,MethodObj)
External(_SB_.PCI0.PEG0.PEGP._PS3,MethodObj)
External(_SB_.PCI0.PEG0.PEGP._DSM,MethodObj)
Method(_WAK,1,Serialized)
{
\_SB.PCI0.PEG0.PEGP._OFF()
......
}
[。。。省略。。。]
Method(_INI,0,NotSerialized)
{
\_SB.PCI0.PEG0.PEGP._OFF()
.......
}
方法一:在_WAK和适当的_INI中调用PINI()
_WAK和_INI可能不在同一个DSDT或SSDT中,没有关系
方法一:编译错误
如果有类似以下的错误
在DefinitionBlock(在DSDT和SSDT的最上面)加上以下代码
方法一:错误修正示范:
如果错误提示Object does not exist (\_SB.PCI0.PEG0.PEGP._PS3)
在DefinitionBlock加上
如果错误提示Object does not exist (\_SB.PCI0.PEG0.PEGP._DSM)
在DefinitionBlock加上
方法一:保存编译
没有错误了,编译,save AML,把修改了的DSDT.aml, SSDT.aml和其他所以没有修改的SSDT*.aml放在Extra目录(变色龙),或patched文件夹(Clover),这样的话要DropSSDT。开机,幸运的话,Nvidia显卡应该被屏蔽了。
方法二:没有_PS3函数
如果没有_PS3函数,或者使用上面的方法没效果,那就试试这个方法吧。
在_WAK和适当的_INI里面加入\_SB.PCI0.PEG0.PEGP._OFF()
方法二:编译错误
如果编译时有错误,像方法一的4中那样解决错误即可。
方法二:编译保存
没有错误了,编译,save AML,把修改了的DSDT.aml, SSDT.aml和其他所以没有修改的SSDT*.aml放在Extra目录(变色龙),或patched文件夹(Clover),这样的话要DropSSDT。开机,幸运的话,Nvidia显卡应该被屏蔽了。
查看是否生效
如何查看是否成功屏蔽Nvidia独显:打开“系统信息”→“图形卡/显示器”,若只有Intel显卡的信息就证明屏蔽成功。若成功了就支持一下吧!
如何使用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即可
有人会修改DSDT驱动显卡吗,我的是ATI5650
1、显卡驱动没有哪个版本最好的说法,也不是最新的就是最好的。
2、如果显卡的驱动正常,不影响电脑的正常使用,可以不选择更高版本的显卡驱动进行更新。
3、因为高版本的驱动不一定完全适合当前使用的显卡,即使是官方提供的显卡驱动,也有可能出现更新驱动之后导致电脑蓝屏、死机等现象。
4、如果显卡性能比之前下降,或者性能不稳定的话,可以尝试更新显卡驱动,如果新版本的驱动适合当前显卡,和系统兼容的话,可以更好的发挥显卡性能。
如何使用ACPI Patcher制作DSDT补丁
不对,你应该选dsdt patch。dsdt在win下用Everest生成。显卡就更简单了,framebuffer选wormy,devid右击我的电脑。
变色龙驱动显卡方式和DSDT驱动显卡方式有什么区别
1.GTX650一般都是免驱的,打开变色龙的显卡侦测即可!判断驱动否就是看有莫有水波纹和状态栏是否透明。
2.驱动一般建议在MAC下用工具KextUtility安装,这个重建缓存修复权限是自动的,至于在win7下的操作,如果是放在Extra\Extensions里的驱动只需放入即可,SLE的驱动win7下放入后,变色龙需加——F参数启动(忽略系统缓存),进入MAC后再手动修复权限。
3.Extra为变色龙目录,里面包含配置文件,机型配置文件,DSDT,等,驱动是在Extra的Extensions目录里,建议你不了解Extra下的内容还是只复制Extensions里的驱动即可。
如何使用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 Patcher制作DSDT补丁
黑苹果由于硬件兼容性问题; Plug and Play(配置, Intel, Microsoft,BIOS(略)
二、ACPI是Hewlett-Packard,它是ACPI其中一个表,SLIT,SRAT。(略写了,不用太详细介绍)其中DSDT就是它的一个重要的描述表,包括:RSDP。例如显卡,声卡驱动,多使用修改DSDT的方法来解决,XSDT,ECDT。什么是ACPI呢,它是BIOS的一个高级功能模块。下面咱稍微详细的从最大的开始说:
一、首先, Phoenix, 和Toshiba共同制定的一个开放的行业规范。是The Advanced Configuration and Power Interface的缩写。那什么是DSDT呢;即插即用) System Events(系统事件) Battery management(电池管理) Thermal management(温度管理) Embedded Controller(嵌入式控制器)
SMBus Controller(SMBus控制器)
ACPI越来越重要在计算机应用平台。
更多详细描述可以访问Intel technologyPDF描述文档。
ACPI由很多表组成,我们先需要了解一下它。
什么是DSDT呢,MADT,SBST。从名字可以看出主要是“电源管理”和“配置管理”。
它主要涵盖的功能包括:
System power management(系统电源管理) Device power management(设备电源管理) Processor power management(处理器电源管理) Device and processor performance management(设备及处理器性能管理) Configuration ,SDTH,RSDT,FADT,FACS,DSDT,SSDT,也就是“电源管理模式和配置管理的接口规范”
台式机 4600显卡驱动 dsdt注入求助
方法/步骤
方法一:直接通过查找相应的驱动程序文件法进行安装:
1、具体方法为:右击“我的电脑”,从弹出的菜单中选择“管理”项。
2、在打开的“计算机管理”窗口中,点击“设备管理器”,然后在未正常安装驱动(即有黄色感叹号)的名称上右击,选择“更新驱动程序”项。
3、在打开的“安装驱动程序向导”窗口中,选择“从列表或指定位置安装”并点击“下一步”,接着指定驱动程序的存放位置,点击“下一步”即可自动更新硬件驱动程序。
方法二、采用软件自动查找匹配驱动进行更新
我们也可以采用相应的驱动管理类软件来实现硬件驱动的自动安装。
上网搜索并下载“驱动精灵”或“驱动人生”,下载完成后直接进行安装。
运行该软件时,会自动对当前电脑的所有硬件进行扫描并确定硬件的型号以及驱动的安装情况。
在打开的主界面中,点击“驱动”→“自动更新”选项卡,然后勾选驱动未正确安装的硬件列表项,最后点击“立即更新”按钮进行更新操作。
接着就会看到驱动文件的下载进度以及更新情况。
转载请注明出处51数据库 » 制作显卡dsdt软件 求助如何修改DSDT来禁用独显