dsdt中蓝宝石显卡是全国联保?代码必须放在PEGP下么

相关文章超级管理员南风知我意,吹梦到西洲!3698文章1373评论大家喜欢12345免责声明本站大部分下载资源收集于网络,只做学习和交流使用,版权归原作者所有,请在下载后24小时之内自觉删除,若作商业用途,请购买正版,由于未及时购买和付费发生的侵权行为,与本站无关。本站发布的内容若侵犯到您的权益,请联系站长删除,我们将及时处理!
记住我的登录信息
输入用户名或电子邮箱地址,您会收到一封新密码链接的电子邮件。 用户名或电子邮件地址
文章目录微信Linux Kernel Developer(WindRiver System)
【黑苹果教程】对笔记本的 DSDT/SSDT 打补丁
版权说明:本文章参考tonymacx86的这篇文章,
如果需要转载,请注明原文地址:
为了让OS X的各个组件在你的笔记本上更好的运行,你通常需要一个经过适当打了补丁的DSDT以及一系列SSDT。本文将为你之后正确地对OEM提供的DSDT/SSDT打补丁打下基础。
高级用户或许希望能够通过Clover实现在不提取DSDT/SSDT的情况下打补丁,参见这篇教程:。
如果你尝试使用来自另一台电脑的DSDT,那么你几乎总会以失败告终。你很难验证来自其他电脑的ACPI文件是否有效。如果你使用外来的ACPI文件,有时即使硬件配置上的细微差别(BIOS版本,内存大小,BIOS的设置以及其它硬件差异不如无线网卡)也会导致系统的不稳定和莫名其妙的问题。这些硬件配置差异会导致地址空间的差异,从而导致一台计算机的DSDT并不适合另一台计算机。即使同一型号的电脑,也经常会发生配置了不同的主板这种情况,从而导致ACPI文件的各不相同。
打补丁的过程分为以下几步:
获取原始文件
反编译原始文件
分析和过滤原始文件
保存(编译)和安装
获取原始ACPI文件
所有的BIOS都会为操作系统提供一套ACPI文件。所以,不管什么操作系统,你都可以获取这些文件以便后续打补丁。你可以在Linux,OS X,Windows甚至 Clover里取得这些文件。不管什么方式,你获取的这些文件都完全相同,不过因为软件不同,命名可能也不同。
本篇教程将使用三种方法获得ACPI文件:在OS X里使用patchmatic;在Clover里使用F4;使用Linux。
使用patchmatic
如果你已经安装了OS X,并且没有使用任何打过补丁的ACPI文件启动,你可以使用patchmatic来获得DSDT/SSDT原始文件。从此处下载patchmatic可执行文件(请务必阅读README文件因为下载地址在里面)。如果想要在终端中使用,你需要把可执行文件(在ZIP中)复制到 /usr/bin 中。
安装完patchmatic之后,你可以在终端中这样调用:
cd ~/Desktop
mkdir extract
cd extract
patchmatic -extract
patchmatic会把所有已经加载的ACPI文件释放到当前文件夹,如果你在bootloader中使用了任何选项从而影响了DSDT/SSDT,你将无法获得原始的ACPI文件,所以你需要确保没有使用这样的选项。比如说,如果你使用(Chameleon)DropSSDT=Yes,或者(Clover) DropOem=true,原生的SSDT会被忽略,这样你就没有办法在patchmatic获得它们了。对于Clover DSDT “Fixes”也是相同的道理——这些修复会修改原生的DSDT,所以你需要避免这些修复。有一些选项比如GeneratePStates/GenerateCStates=Yes, 或者是 Clover的 /ACPI/SSDT/Generate/CStates /ACPI/SSDT/Generate/PStates将会注入额外的SSDT,从而导致一些莫名其妙的问题,这些情况都应该被避免。
结合上述这些原因,使用Linux或Clover来获得ACPI文件更加简单。
注意:使用’patchmatic -extract’来确认你获得的DSDT/SSDT是否是你需要的文件是一个有效的方法。
使用Clover F4(推荐)
推荐使用Clover F4这种方法,不仅因为提取的方法很简单,而且还可以很方便地对ACPI的原始文件和打过补丁的文件进行比对(为了分析解决问题)。
在Clover的主页,你可以按F4然后Clover会把原生的ACPI文件放到EFI/Clover/ACPI/origin目录下。当你启动OS X之后你就可以对它们进行反编译或者打补丁操作。注意,有些BIOS需要同时按Fn+F4才能激活F4,所以如果你不确定,把F4盒Fn+F4都按一遍。这个过程并不会有任何反馈,因为要等待文件写入会有一个小小的延迟,如果这些文件被写入USB存储设备,那么这个延迟会更加明显。
有时,Clover F4会写入重复的SSDT。这些副本在反编译的时候会造成一些问题。如果你真的遇到这样的问题,你需要分析哪些文件是副本,最简单的方法就是看文件大小,相同的文件大小往往对应着相同的文件。
你可以通过在终端中输入以下命令来查看SSDT的字节大小。
ls -l SSDT*.aml
使用Linux获得文件
在Linux中,原生的ACPI文件直接存在于文件系统之中。你可以在/sys/firmware/acpi/tables 和 /sys/firmware/acpi/tables/dynamic目录中找到它们。你可以在终端中输入命令来获得所有文件。
你没有必要安装Linux,只要从USB启动即可:
在终端中输入
sudo cp -R /sys/firmware/acpi/tables DEST
你需要把这些文件复制到一个FAT32文件系统的USB设备。使用FAT32文件系统可以避免权限问题因为这个文件系统不支持文件权限。DEST的值是你的USB设备的挂载点,它由你的Linux版本和Linux的启动方式决定,你可以 通过在终端中输入mount来查看挂载点,或者在Linux文件管理器中把鼠标放在存储设备的图标上来查看。
反编译所需的工具
为了正确反编译你获得的文件,你需要iasl编译器,它需要在终端运行。
你需要一个较新版的iasl来正确地反编译。可以在这里下载适当的版本:。。推荐把iasl的可执行文件复制到/usr/bin,这样就能在终端中方便使用该工具。
举个例子,如果你把它下载到~/Downloads/iasl.zip,你可以在终端中通过以下方法进行解压和复制:
cd ~/Downloads
unzip iasl.zip
sudo cp iasl /usr/bin
从github编译最新版本的iasl
你可以从github编译最新版的iasl,假设你已经安装了Xcode:
mkdir ~/Projects && cd ~/Projects
git clone https://github.com/RehabMan/Intel-iasl.git iasl.git
cd iasl.git
最新的版本总是包含一些实验性的并且没有经过完全测试的代码。比如,新的代码中Intel添加了If/Else代码块因为Switch/Case有Bug。
建议使用修改之前的版本
git checkout b9c6c2b
注意:b9c6c2b这个版本在bitbucket已经提供下载。
然后编译工程:
现在你可以使用以下命令安装:
sudo make install
如果你已经安装了MaciASL,你也可以在MaciASL中使用新版的编译器(在/usr/bin这个目录下):
sudo cp /usr/bin/iasl /Applications/MaciASL.app/Contents/MacOS/iasl61
最新版的iasl总会在bitbucket提供下载,但对于那些总是喜欢使用最新版的人,需要自己编译项目。。。
反编译ACPI文件
虽然原生的ACPI文件可以通过MaciASL直接打开,但并不推荐这么做。直接使用MaciASL打开将会导致aml文件被单独反编译,如果aml文件之间有复杂的引用关系,将不能正确地进行反编译,你将会发现一堆难以修复的错误。
因此,最好将所有aml文件一起进行反编译。你需要把所有的DSDT/SSDT放在一个独立的文件夹中,不要把不相关的文件复制进来,并且确保所有文件以.aml结尾。
然后,在终端中输入以下命令进行反编译:
cd "to directory where you placed all SSDT/DSDT"
iasl -da -dl *.aml
注意:不要尝试使用-da选项反编译其它的ACPI文件,不会有任何效果。
注意:也请阅读下方的部分,考虑使用refs.txt,方法很简单,但可以有效排除许多常见的错误。
完成上述步骤之后,你只需要使用*.dsl文件来做接下来的工作,可以使用MaciALS来编辑它们。当然,要使用它们,你必须把它们保存为“ACPI Machine Language Binary”格式并且以.aml作为文件的后缀,然后将它们放在正确的位置以便被bootloader加载。你可以保留这些打过补丁的..dsl文件以便以后打更多的补丁。
注意:使用ACPI6.1可以更好地处理被iasl编译过的aml文件。ACPI6.1在编译器中添加了一个组件,使用它可以在生成的aml文件中添加外部引用信息。ACPI的解释器会忽略这些信息,但是这些信息对于反编译器正确地反编译一个独立的aml文件很有用。因此,你可能会发现被新的工具重新编译过的aml文件可以直接被MaciASL打开并且不包含任何错误。当然,我们直接提取的aml文件中由于不包含这些信息,所以此时我们仍然需要使用-da选项联合所有的aml文件进行反编译,正如上面所介绍的。
注意:针对Snow Leopard的ACPI文件:很不幸,10.6.8这个版本太老了以至于其阻止aml进行外部引用。如果你需要将ACPI文件应用在Snow Leopard中,你需要在将dsl编译到aml的时候使用-oe选项。这个选项不能在MaciASL中使用,因此你只能在终端中完成编译。
使用refs.txt来完成反编译
有时会存在一些未定义的外部符号。isal反编译器会尝试猜测参数的个数,但这种尝试经常出错。你可以通过使用一个记录着外部定义的文本文件来纠正这些错误。常见的未定义符号比如SGPO, ECRD, ECWT, 和 MMTB。下面的refs.txt包括一些常见和非常见的丢失符号(根据论坛上网友的反馈得来)来解决反编译器遇到的问题。
首先在DSDT/SSDT所在的目录下厂家refs.txt文件:
External(MDBG, MethodObj, 1)
External(_GPE.MMTB, MethodObj, 0)
External(_SB.PCI0.LPCB.H_EC.ECWT, MethodObj, 2)
External(_SB.PCI0.LPCB.H_EC.ECRD, MethodObj, 1)
External(_SB.PCI0.LPCB.H_EC.ECMD, MethodObj, 1)
External(_SB.PCI0.PEG0.PEGP.SGPO, MethodObj, 2)
External(_SB.PCI0.GFX0.DD02._BCM, MethodObj, 1)
External(_SB.PCI0.SAT0.SDSM, MethodObj, 4)
External(_GPE.VHOV, MethodObj, 3)
External(_SB.PCI0.XHC.RHUB.TPLD, MethodObj, 2)
注意:一个更友好的方式是在终端中使用pbpaste创建文件。你需要首先将上方的文档复制到剪贴板(别告诉我你不会),然后:
pbpaste&refs.txt
上述命令会在当前目录创建refs.txt文件,然后在反编译的过程中使用该文件:
iasl -da -dl -fe refs.txt *.aml
老版本的反编译器会把这些外部声明放在其它声明的前面。这不是一个好方法。大多数时候,你需要把它们移动到其它声明的后面。这种错误非常明显,因此当你看到来自refs.txt中的外部声明的错误时应当能够辨别。在ACPI6.1当中,这个bug已经被修复了。
筛选ACPI文件
对于一些老电脑(Sandy Bridge或者更早的)来说,与CPU相关的SSDT会造成一些问题,如果你遇到这样的问题,那么你不能把这样的SSDT放在ACPI/patched。
如果没有问题,我比较喜欢按照原始的顺序使用那些正确地打过补丁的SSDT。如果又一个SSDT没有经过任何修改,那么你不需要重新编译它,直接使用原始的aml文件即可。
注意:来自Clover或者Linux的动态子目录的SSDT不能被放在ACPI/patched下,因为这些SSDT只有在需要的时候才会被动态加载进来,可能不够完整。
当你成功地反编译所有文件之后,检查每一个SSDT文件从而确定这些SSDT的功能。如果一个SSDT与CPU相关并且你确定其会导致一些问题,那么就将它放在一边,不要把它放在bootloader的相关目录中。大多数时候,如果SSDT中存在包含在Scope _PR.CPUx中的object,那么它很有可能与CPU有关。
下面列出你可能会遇到的典型SSDT
与CPU相关:如上所述,包含一些会导致问题的未知因素。
SATA:无所谓是否使用,看你是不是强迫症。
PTID:大多数情况这个文件对于OS X来说没什么用,并且包含许多错误。少数情况下,它可能会提供读取风扇转速,温度或者其它系统状态的方法。
IAOE:如果这个SSDT存在,它经常作为DSDT中的in _PTS 和 _WAK的入口。如果没有它系统睡眠可能会出现问题。
GFX0:通常存在’Device GFX0’的SSDT与集成显卡有关。你需要在这个SSDT上打补丁来实现背光控制。一些老的笔记本经常会把GFX0定义在DSDT中。新的Haswell笔记本通常定义在SSDT中(即使也可以定义在DSDT中)。
PEGP:在双显卡的笔记本中PEGP通常与独立显卡有关。这样的SSDT通常不止一个,你需要把它们联合起来,这样打补丁才会有效。最常见的就是禁用独立显卡的补丁。
你最好记下哪些SSDT你打算忽略,哪些需要保留原始文件,哪些需要修改。
即使进行联合反编译,反编译出的代码仍然可能包含一些错误。导致这些错误的原因有很多,如果iasl的某些修改,iasl自身的不完善,以及笔记本之间的不同编译环境。比如,一个导致错误的常见原因(我自己的想法)是一些被引用的函数(比如MMTB和MDBG)实际上是存在于Windows系统本身的,而不在ACPI中;还有一种情况是代码中本身存在bug或者是代码被无意地写入(有时很难区分这一点)。
因此,当你已经知道了你需要哪些ACPI文件,你必须修正它们之中包含的错误。在我的github仓库中有许多修复常见错误的补丁,你可以使用MaciASL完成打补丁的操作。
MaciASL软件:
笔记本补丁:
注意:我没有在DSDT editor上测试我的补丁,因为它包含了太多的bug,而且iasl的版本也太老,因此就不要来问关于它的问题啦。
为了能够顺利完成下载和对MaciASL进行正确的设置,请务必提前阅读README文件。应对syntax/error的补丁的名字以”[syn]”开头,对一些比较老的DSDT来说常见的例子如”Fix _PLD Buffer/Package Error”, “Fix TNOT Error”, 和 “Fix FPED Parse Error”。为了确定你需要哪些补丁,你可以阅读iasl报出的错误信息以及引起错误的代码。你也可以尝试应用一些补丁,同时在MaciASL中观察补丁对文件进行了修改,如果你对某个错误不是很熟悉,可以通过这种方法多尝试几次来修正错误。
对于某些错误,你可以通过简单地删除造成错误的代码。但是这取决于这些代码是否有用。比如说,由’External’引起的错误可以直接删除来解决错误。如果你想,你甚至可以写一个补丁来自动完成这个工作。
如果你对ACPI比较熟悉并且有一点编程基础将会对这些工作很有好处。
目前你的目标是让这些dsl文件在编译的时候没有errors (warnings/remarks/optimizations 一般不会有影响)。一旦你得到一个编译无误的文件,你就可以继续对它进行打补丁来修复你遇到的问题。
常见的补丁
一般来说,只有当你需要修复特定的问题的时候才需要对DSDT打补丁,但是有一些补丁在很多场合下都需要使用并且几乎不大可能会导致问题,这些补丁也在github的仓库中:
“Fix _WAK Arg0 v2”
“HPET Fix”
“SMBUS Fix”
“IRQ Fix”
“RTC Fix”
“OS Check Fix”
“Fix Mutex with non-zero SyncLevel”
“Fix PNOT/PPNT” (只有当你忽略了与CPU有关的SSDT才需要使用)
“Add IMEI” (如果你的DSDT或者SSDT已经存在IMEI/HECI/MEI device,不需要使用该补丁)
注意:The OS Check Fix补丁跟你电脑出厂预装的系统或者现在正在使用的系统版本都没有关系。
注意:如果你使用了所有的SSDT不要使用”Fix PNOT/PPNT”这个补丁,只有在你去除了与CPU相关的SSDT情况下才能使用。
USB补丁可以修复“瞬间唤醒”问题,这个问题导致电脑在从睡眠到开始到唤醒的几秒钟内不能再次睡眠。
针对你的硬件适当打上补丁
“6-series USB”
“7-series/8-series USB”
USB3 Mutliplex补丁可以让你使用苹果原生的AppleUSBXHCI.kext而不是GenericUSBXCHI.kext。它基于Mieze公布的一些写信。大多数DSDT需要修改才能使用。比如ProBook就需要使用该补丁的一个修改版本。而Lenovo u310/u410可以直接使用:
“7-series USB3 Multiplex”
如果你正在Yosemite上使用GenericUSBXHCI.kext,确保你使用的是为Yosemite生成的GenericUSBXHCI.kext。要避免瞬间唤醒这种情况你可能还需要内核标识 -gux_defer_usb2。
如果在使用AppleUSBXHCI.kext的时候遇到瞬间唤醒的问题,一个可选的解决方案是使用”USB _PRW 0x6D (instant wake)”。你必须检查DSDT与 _PRW有关的函数的返回值来确定这个补丁是否适合你的DSDT。当然github仓库还提供了”USB _PRW 0x0D (instant wake)”(0x0d和0x6d对于XHC/EHC/HDEF来说都是从_PRW返回的常见值)。
如果你有一个Haswell CPU/8-series 芯片组,,并且AooleLPC.kext没有加载,你需要使用下面的补丁注入一个合适的ID从而允许驱动被加载:
“Haswell LPC”
如果你有一个Skylake CPU/100-series 芯片组,,并且AooleLPC.kext没有加载,你需要使用下面的补丁注入一个合适的ID从而允许驱动被加载:
“Skylake LPC”
注意:重命名一定要彻底。通常,重命名可以更好地适配OS X系统。比如把GFX0重命名为IGPU可以让IGPU power management正确工作。在这种情况下,所有与其有关的SSDT/DSDT都需要参与重命名。
注意:一定要避免重名现象发生。一种很常见的情况是往SSDT中添加一个_DSM函数,但同时OEM也在同一个路径中定义了一个_DSM函数。要避免这种情况,你可以使用”Remove _DSM methods”补丁作为你使用的第一个补丁,当然也可以选择”Rename _DSM methods to XDSM” 这个补丁,因为有时”Remove _DSM methods”会暴露出MaciASL的一个bug。
针对特定问题的补丁
电池状态:
背光控制:
禁用独立显卡:
当你在阅读一些针对特定笔记本的教程的时候,这些文章可能会直接将补丁的内容贴出来,你只需要把这些补丁的内容直接粘贴到MaciASL的窗口中,然后点击Apply即可。
如果你对编写补丁文件很感兴趣,请阅读MaciASL的补丁语法:
注意:在许情况下,对DSDT补丁需要与一些附加的kext结合从而使kext被系统正确加载。
保存与加载
为了使用打过补丁的DSDT/SSDT,你需要把它们保存在正确的位置从而可以让bootloader加载它们。对于不同的bootloader,保存的路径不同,命名要求也不同。首先你必须保存为”ACPI Machine Language Binary”格式。如果保存为AML extension可能会导致系统出现一些非常奇怪的问题。
Clover:文件首先应该被放置在Clover所在的分区(一般都是EFI分区),所以路径就是EFI/Clover/ACPI/patched。如果DSDT.aml文件存在,会自动替换OEM的DSDT。对于版本号低于3062的Clover,ACPI文件必须被命名为SSDT-x,x表示一个数字,最高到19.Clover允许数字不连续。版本号大于等于3062的Clover,会加载所有后缀为aml的文件,对于命名没有要求。记住SSDT的加载顺序很重要,因此按照原始的顺序命名SSDT很重要。
注意,针对Clover 3062+,由于SSDT加载方式的改变导致加载顺序变得随机,因此需要规定通过修改config.plist/ACPI/SortedOrder来指定加载顺序,下面的文件提供了一个很好的加载顺序模板:
Chameleon(或者 Chimera):文件需要放置在 系统盘的/Extra目录下。如果DSDT.aml文件存在,会自动替换OEM的DSDT。Chameleon不允许不连续的编号,所以需要命名为SSDT.aml, SSDT-1.aml, SSDT-2.aml, SSDT-3.aml等等。如果你命名为SSDT.aml, SSDT-1.aml, SSDT-4.aml, SSDT-5.aml,那么只有SSDT.aml, SSDT-1.aml会被加载因为后面的不再连续,所以被忽略。
最后,记住你不能只是把ACPI文件放在目录里而不忽略OEM的SSDT。最简单的办法就是使用DropSSDT=Yes (Chameleon) 或者 ACPI/SSDT/DropOem=true (Clover)来忽略所有的原生SSDT从而加载你修改过的SSDT。
MaciASL (RehabMan fork):
patchmatic:
iasl (RehabMan fork):
ACPI spec:
RehabMan github:
Clover laptop guide:
Clover config.plist files for laptops:
Clover thread:
Clover changes:
黑苹果自制声卡仿冒驱动(AppleHDA for ALC269)
四、Windows下提取到DSDT.aml以及DSDT初阶修改
修复常见ACPI问题(DSDT等)
自己动手写DSDT系列教程1-ASL(ACPI Source Language)基础篇
【黑苹果教程】笔记本对DSDT/SSDT打补丁实现背光控制
没有更多推荐了,
(window.slotbydup=window.slotbydup || []).push({
id: "5865577",
container: s,
size: "300,250",
display: "inlay-fix"后使用快捷导航没有帐号?
重定义Modern UI,打造完美Windows全新体验
查看: 124123|回复: 839
积分288最后登录精华0阅读权限30主题UID1067503帖子PB币354 威望0 贡献0 技术15 活跃50
头衔太长容易超出边框
PCBETA Beta1, 积分 288, 距离下一级还需 212 积分
UID1067503帖子PB币354 贡献0 技术15 活跃50
本帖最后由 boosdin 于
13:58 编辑
在拜读了论坛各位大大的帖子之后,做为一个新手成功的模仿了DSDT的修改,包括显卡,声卡,原生电源,自动降频,全部内建USB,网卡,无线网卡完美,不过由于使用的BOOTTHINK for win版,关机断电重启还是需要OpenHaltRestart.kext。鉴于大家装完雪豹最希望的都是想看到SL华丽的界面(我就是这样),所以跟大家分享下显卡DSDT的修补方法。我只能把我自己模仿的经验告诉新手,让你们知道如何去模仿,不算是教程,如果想了解更多请参考论坛里帖子。老手就随便看看吧。(KEXT论坛自己搜索下)
我们先理解一些概念:
1.DSDT:DSDT是主板BIOS用来描述主板上硬件设备的代码集合,通过代码告诉操作系统自己的主板上插有什么样的设备,以及对设备具体的描述。想使用DSDT驱动显卡的前提是,你必须使用第三方KEXT驱动了你的显卡,然后获得了一些关于你显卡的具体技术数据。完美驱动还是不完美驱动并不重要,我们需要的是得到NVCAP的值。
2.退一步,如果你找不到KEXT来驱动你的显卡,你需要做的就是用相似的显卡NVCAP的值加入DSDT,运气好的话也能驱动。善用论坛搜索
3.DSDT的作用仅仅是描述你硬件(包括硬件位置,ID,型号,一些必须的值比如NVCAP),告诉MAC系统你有显卡这么个东西,MAC系统然后检查下自己的驱动库里有这么个硬件的驱动没,如果有的话就驱动了,没有的话,你DSDT写的再好,MAC也会告诉你,对不起,我不认识你的东西。当然,MAC系统也可能认错,比如你的显卡是256M NV 9200M GS,放入 Natit.kext,驱动之后系统概述里显示的是8400GT,显存只有128,这并不影响你使用,这个时候你就要在DSDT里加入代码告诉他你是9200的不是8400,它读到之后就正确显示了。后面会告诉你如何获得NACAP的值。
4.NACAP的值并不是每个显卡都不同,相似显卡的NACAP的值是一样的,多尝试尝试。
下面开始修改显卡的DSDT部分。我是Insyde的BIOS,所以我会以这个BIOS为例子。其他主板修改方法类似。
修改之前要明白几个DSDT的架构,想详细了解的可以参考论坛紫米的帖子,我通俗的描述下我的思路
1 显卡在MAC里通常描述成PEGP,有些新手可能会发现,自己的DSDT中根本找不到PEGP,咋办呢~好办。
方法1,启动MAC系统,用IORegistryExplorer查看你显卡的位置,一般情况下都是PCI0的分支下,同样,它肯定也是在你DSDT中的DEVICE (PCI0)分支下。具体的名字每个主板可能都不一样了,比如我的DSDT中叫PVGA。也有可能叫POP2,名字不重要。
方法2,intel的芯片组一般是Name (_ADR, 0x)搜索这个关键字就可以找到显卡位置。在这个显卡项目下有可能出现GFX0、LCD、VGA、TV、PXS1 这些东西,不过既然是PC,一般GFX0是没有的,这个需要我们加入的,暂且理解为显卡,我不清楚这个,模仿就是了。
2 DSDT代码程序语言,我不知道怎么编写的,我不太懂编程。不过要想修改要有几个原则(我自己的理解,不知道对不对,重要的是结果)。
& &1,修改一处就编译一次,直接O错误,警告可以不理会它,不影响DSDT的使用。
& &2,你想使用一个你DSDT中没有的mothed(XX,XX,X)或者你引用了一个未定义的Device(***),比如,你发现你DSDT中没PEGP,想手动加入,一旦你加上去了,编译肯定出错,因为编译器不知道你这个玩意PEGP从哪冒出来的,所以你要先定义它。在哪定义在后面说。
& &3,注意加入新代码的时候括号要对应,不要让代码这部分漏出来,不然编译器又不知道你想表述什么意思了,出头鸟吗?
& &4,注意两个代码之间加一个空行,还有DEVICE (PEGP)别顶在开头,用TAB键往后撤撤。& &
& &5,如果你遵循第1条原则编译之后出现的错误个数很多,那肯定是你新加入的代码有问题,不用看错误描述,按照2,3,4原则检查你的新加入代码。除非你网上复制的代码本身就有错误。
下面分两种方法加入代码
方法1: 不管位置在哪个地方,只要确定是INTEL芯片组,显卡肯定在PCI0设备的目录下,所以搜索DEVICE (PCI0)(注意是数字0不是字母o.)
你会看到如果代码(各个BIOS可能不一样)
Device (PCI0)
& && && && &Name (_HID, EisaId (&PNP0A08&))
& && && && &Name (_CID, EisaId (&PNP0A03&))
& && && && &Name (_ADR, Zero)
& && && && && &。。。。。。。。。
把下面显卡的代码加入到Name (_HID, EisaId (&PNP0A08&))上面一样,也就是PCI0第一个括号下面。
& && && &&&Device (PEGP)
& && && && &{
& && && && && & Name (_ADR, 0x)
& && && && && & Device (GFX0)
& && && && && & {
& && && && && && &&&Name (_ADR, Zero)
& && && && && && &&&Name (_SUN, One)
& && && && && && &&&Method (_DSM, 4, NotSerialized)
& && && && && && &&&{
& && && && && && && && &Store (Package (0x16)
& && && && && && && && && & {
& && && && && && && && && && &&&&@0,compatible&,
& && && && && && && && && && &&&Buffer (0x0B)
& && && && && && && && && && &&&{
& && && && && && && && && && && && &&NVDA,NVMac&
& && && && && && && && && && &&&},
& && && && && && && && && && &&&&@0,device_type&,
& && && && && && && && && && &&&Buffer (0x08)
& && && && && && && && && && &&&{
& && && && && && && && && && && && &&display&
& && && && && && && && && && &&&},
& && && && && && && && && && &&&&@0,name&,
& && && && && && && && && && &&&Buffer (0x0F)
& && && && && && && && && && &&&{
& && && && && && && && && && && && &&NVDA,Display-A&
& && && && && && && && && && &&&},
& && && && && && && && && && &&&&@1,compatible&,
& && && && && && && && && && &&&Buffer (0x0B)
& && && && && && && && && && &&&{
& && && && && && && && && && && && &&NVDA,NVMac&
& && && && && && && && && && &&&},
& && && && && && && && && && &&&&@1,device_type&,
& && && && && && && && && && &&&Buffer (0x08)
& && && && && && && && && && &&&{
& && && && && && && && && && && && &&display&
& && && && && && && && && && &&&},
& && && && && && && && && && &&&&@1,name&,
& && && && && && && && && && &&&Buffer (0x0F)
& && && && && && && && && && &&&{
& && && && && && && && && && && && &&NVDA,Display-B&
& && && && && && && && && && &&&},
& && && && && && && && && && &&&&NVCAP&,
& && && && && && && && && && &&&Buffer (0x18)
& && && && && && && && && && &&&{
& && && && && && && && && && && && &/* 0000 */& & 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00,
& && && && && && && && && && && && &/* 0008 */& & 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07,
& && && && && && && && && && && && &/* 0010 */& & 0x00, 0x00, 0x00, 0x00
& && && && && && && && && && &&&},
& && && && && && && && && && &&&&VRAM,totalsize&,
& && && && && && && && && && &&&Buffer (0x04)
& && && && && && && && && && &&&{
& && && && && && && && && && && && &0x00, 0x00, 0x00, 0x10
& && && && && && && && && && &&&},
& && && && && && && && && && &&&&device_type&,
& && && && && && && && && && &&&Buffer (0x0D)
& && && && && && && && && && &&&{
& && && && && && && && && && && && &&NVDA,GeForce&
& && && && && && && && && && &&&},
& && && && && && && && && && &&&&model&,
& && && && && && && && && && &&&Buffer (0x18)
& && && && && && && && && && &&&{
& && && && && && && && && && && && &&Nvidia GeForce 9200M GS&
& && && && && && && && && && &&&},
& && && && && && && && && && &&&&rom-revision&,
& && && && && && && && && && &&&Buffer (0x1F)
& && && && && && && && && && &&&{
& && && && && && && && && && && && &&Nvidia GeForce 9200M GS 256 MB&
& && && && && && && && && && &&&}
& && && && && && && && && & }, Local0)
& && && && && && && && &DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))
& && && && && && && && &Return (Local0)
& && && && && && &&&}
& && && && && & }
注意数下括号,是偶数一般没问题。奇数要肯定有问题。注意回车留个空行。
这个时候参考前面的几条原则,发现PEGP这玩意没注册呢,编译不认识它,所以我们搜素Method (_L0D, 0, NotSerialized),(一般在比较靠前的位置)在下面加入Notify (\_SB.PCI0.PEGP, 0x02) ,把PEGP给注册了。可以参考下我的,注册了好几个呢,因为我修改的多。
Method (_L0D, 0, NotSerialized)
& && && && &Notify (\_SB.PCI0.EHC1, 0x02)
& && && && &Notify (\_SB.PCI0.EHC2, 0x02)
& && && && &Notify (\_SB.PCI0.PEGP, 0x02)
& && && && &Notify (\_SB.PCI0.HDEF, 0x02)
注册代码的意思就是说在PCI0下面有个PEGP设备,各单位注意,不要说见到了PEGP不认识它。编译器自然就认识了。
这个时候还没有结束,我们是新加入的DEVICE (PEGP)设备,而且Name (_ADR, 0x)这个代码你自己本身DSDT的显卡描述中肯定有,所以我们要搜索Name (_ADR, 0x),然后把它删掉,注意别删除了你刚加入显卡代码的这行,一个DSDT中保留一个Name (_ADR, 0x)就行了。
这种加入方法,编译不太容易出错,因为不破坏你本身DSDT的结构。不会出乱七八糟的错误。
方法2:搜索Name (_ADR, 0x),这个就是你显卡的位置,或者你自己查看MAC系统中,你的显卡在什么位置。
加入上面的代码,注意从DEVICE (GFX0)开始加入。以防万一,去上面那个位置注册下你的DEVICE名字,比如我的是加入PCI0.PVGA,0X02.
不加入不知道会不会编译出错,我没去试。我只是这么一说,我也不懂编程之后的东西,所以可能描述的不是很正确。(勿拍砖)
注意括号要对应,自己慢慢数吧。
下面是NVCAP的值的获得和显卡代码中各个项的含义及其修改
1NVCAP 串值
在显卡驱动的情况下,打开终端(一个跟黑电视差不多的东西,在应用程序里),输入 ioreg -l -w0 | grep NVCAP
得到一串数字,比如这样0000,然后2个两一组,一行8个,放入代码中”NVCAP“的位置。
如果你用KEXT没能驱动显卡,给你下面几组值测试下。
这些值是从威廉第三的帖子中找的,这里感谢下威廉,希望不要介意我拿过来用用。
2,NV的显卡上面的代码行几乎不要动,&model&, 的数值修改下,本来是&Nvidia GeForce 9200M GS&,你可以改成你自己的显卡型号,接着修改Buffer (0x18),这个是用来描述&Nvidia GeForce 9200M GS&这串字符占用的地址空间的。
这里面的0X18是如何获得呢?我们一起来计算以下,从N开始 字母+空格一共是23个字符,在加1就是24,转换成16进制就是0X18,其他的buffer一样,公式就是 字母+空格+1 转换成16进制输入就行了。&VRAM,totalsize&, 0x00, 0x00, 0x00, 0x10代表256M显存,0x00, 0x00, 0x00, 0x20就是512了,0x00, 0x00, 0x00, 0x05就是128。根据自己的显存修改吧。 其他型号的显卡自己看着改吧。
上面工作全做完了还不够,因为我们还有一个最重要的东西没有定义,DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0)),这个DTGP方法编译器找不到,我们要添加进去,很多地方修改DSDT都需要引用这个DTGP,所以我们加在开头的位置,搜索DefinitionBlock (&dsdt.aml&, &DSDT&, 1, &HPQOEM&, &SLIC-MPC&, 0x)在第一个括号下面加入DTGP,代码如下:
Method (DTGP, 5, NotSerialized)
& && &&&If (LEqual (Arg0, Buffer (0x10)
& && && && && & {
& && && && && && &&&/* 0000 */& & 0xC6, 0xB7, 0xB5, 0xA0, 0x18, 0x13, 0x1C, 0x44,
& && && && && && &&&/* 0008 */& & 0xB0, 0xC9, 0xFE, 0x69, 0x5E, 0xAF, 0x94, 0x9B
& && && && && & }))
& && && && &If (LEqual (Arg1, One))
& && && && &{
& && && && && & If (LEqual (Arg2, Zero))
& && && && && & {
& && && && && && &&&Store (Buffer (One)
& && && && && && && && &{
& && && && && && && && && & 0x03
& && && && && && && && &}, Arg4)
& && && && && && &&&Return (One)
& && && && && & }
& && && && && & If (LEqual (Arg2, One))
& && && && && & {
& && && && && && &&&Return (One)
& && && && && & }
& && && && &}
& && &&&Store (Buffer (One)
& && && && &{
& && && && && & 0x00
& && && && &}, Arg4)
& && &&&Return (Zero)
这下就可以编译了成AML了,没有意外的话0错误的AML就可以用了,如有意外参考2,3,4条原则,不用在意警告,完美主义的例外。
希望能帮到新手们驱动显卡。
今天去丈母娘家酒喝多了,语无伦次了。就先写到这吧。
上传我的DSDT,0错误,0警告,0标记,加入了显卡,声卡,USB内建,网卡,无线网卡,原生电源管理,降频代码。供大家参考。
(33.03 KB, 下载次数: 2561)
13:35 上传
下载次数: 2561
下载积分: PB币 -1
<p id="rate_0085" onmouseover="showTip(this)" tip="热心会员&PB币 + 3
" class="mtn mbn">
<p id="rate_54" onmouseover="showTip(this)" tip="嘿嘿。这个学习了。好久没折腾这东西了&PB币 + 1
" class="mtn mbn">
<p id="rate_662" onmouseover="showTip(this)" tip="热心会员奖励&PB币 + 10
" class="mtn mbn">
<p id="rate_934" onmouseover="showTip(this)" tip="常规奖励&PB币 + 30
" class="mtn mbn">
积分169最后登录精华0阅读权限20主题UID233141帖子PB币2161 威望5 贡献0 技术0 活跃55
PCBETA Milestone, 积分 169, 距离下一级还需 31 积分
UID233141帖子PB币2161 贡献0 技术0 活跃55
好复杂……先顶了
积分288最后登录精华0阅读权限30主题UID1067503帖子PB币354 威望0 贡献0 技术15 活跃50
头衔太长容易超出边框
PCBETA Beta1, 积分 288, 距离下一级还需 212 积分
UID1067503帖子PB币354 贡献0 技术15 活跃50
本帖最后由 boosdin 于
21:06 编辑
静下心慢慢看就不复杂了
19:52 上传
积分38最后登录精华0阅读权限10主题UID659296帖子PB币78 威望0 贡献0 技术0 活跃48
PCBETA Alpha, 积分 38, 距离下一级还需 12 积分
UID659296帖子PB币78 贡献0 技术0 活跃48
看看也觉得幸福!~pb83
积分351最后登录精华0阅读权限30主题UID17027帖子PB币2880 威望0 贡献0 技术2 活跃158
找一个人怎么这么难啊
PCBETA Beta1, 积分 351, 距离下一级还需 149 积分
UID17027帖子PB币2880 贡献0 技术2 活跃158
楼主在塞班论坛有账号吧。一样的头像和签名。
积分288最后登录精华0阅读权限30主题UID1067503帖子PB币354 威望0 贡献0 技术15 活跃50
头衔太长容易超出边框
PCBETA Beta1, 积分 288, 距离下一级还需 212 积分
UID1067503帖子PB币354 贡献0 技术15 活跃50
& &纯属巧合吧,我就这一个帐号
积分61最后登录精华0阅读权限20主题UID928495帖子PB币550 威望0 贡献0 技术7 活跃84
PCBETA Milestone, 积分 61, 距离下一级还需 139 积分
UID928495帖子PB币550 贡献0 技术7 活跃84
本帖最后由
20:00 编辑
多谢楼主分享经验,非常简单明了。我这几个星期也是一直在学习用dsdt驱动显卡,不过可能是我的硬件比较特殊,到现在为止还没有成功过,通过在mac下查看,我的显卡位置在p0p2/vga0,可是在dsl文件中并没有DEVICE (vga0),device (pegp)等,只能一个一个摸索,基本上将论坛上的方法试遍了,到现在为止还没有解决。我的电脑是联想的B500一体机,显卡是nv G210m。楼主有什么好的建议啊?
另外我是在win下用gpuz提取出显卡的rom,然后到mac下用nvcap Maker算出的nvcap值,不知道这样的值和楼主所说的方法得到的nvcap是否相同呢?
积分288最后登录精华0阅读权限30主题UID1067503帖子PB币354 威望0 贡献0 技术15 活跃50
头衔太长容易超出边框
PCBETA Beta1, 积分 288, 距离下一级还需 212 积分
UID1067503帖子PB币354 贡献0 技术15 活跃50
& & 仔细看帖子,没有DEVICE (PEGP)自己加1个,用第一种方法加入代码
积分61最后登录精华0阅读权限20主题UID928495帖子PB币550 威望0 贡献0 技术7 活跃84
PCBETA Milestone, 积分 61, 距离下一级还需 139 积分
UID928495帖子PB币550 贡献0 技术7 活跃84
谢楼主了,可是你说的方法我也试过,进去不管用,在mac的IORegistryExplorer下会发现和vga0并列的地方会出现pegp,可是没有驱动显卡,系统设备里面关于显卡的项目还是没有识别
积分61最后登录精华0阅读权限20主题UID928495帖子PB币550 威望0 贡献0 技术7 活跃84
PCBETA Milestone, 积分 61, 距离下一级还需 139 积分
UID928495帖子PB币550 贡献0 技术7 活跃84
本帖最后由
20:10 编辑
不好意思,发重复了,
积分288最后登录精华0阅读权限30主题UID1067503帖子PB币354 威望0 贡献0 技术15 活跃50
头衔太长容易超出边框
PCBETA Beta1, 积分 288, 距离下一级还需 212 积分
UID1067503帖子PB币354 贡献0 技术15 活跃50
& & DSDT只能做到正确描述你的显卡,它不是驱动,你用第三方驱动成功驱动了没?
积分61最后登录精华0阅读权限20主题UID928495帖子PB币550 威望0 贡献0 技术7 活跃84
PCBETA Milestone, 积分 61, 距离下一级还需 139 积分
UID928495帖子PB币550 贡献0 技术7 活跃84
没有,我试过nvenabler,nvinject,natit等,都无法驱动,黑屏
积分288最后登录精华0阅读权限30主题UID1067503帖子PB币354 威望0 贡献0 技术15 活跃50
头衔太长容易超出边框
PCBETA Beta1, 积分 288, 距离下一级还需 212 积分
UID1067503帖子PB币354 贡献0 技术15 活跃50
& & 那你用测试的三个NVCAP的值试试吧,我也不清楚这些东西,我都是模仿别人的DSDT修改的,理解不是很深刻~祝你好运了·
积分61最后登录精华0阅读权限20主题UID928495帖子PB币550 威望0 贡献0 技术7 活跃84
PCBETA Milestone, 积分 61, 距离下一级还需 139 积分
UID928495帖子PB币550 贡献0 技术7 活跃84
不管怎么说,都要谢谢楼主,呵呵!
积分397最后登录精华0阅读权限30主题UID423401帖子PB币2302 威望35 贡献0 技术11 活跃253
PCBETA Beta1, 积分 397, 距离下一级还需 103 积分
UID423401帖子PB币2302 贡献0 技术11 活跃253
拜读一下,先留个记号!
积分574最后登录精华0阅读权限40主题UID600151帖子PB币1184 威望7 贡献0 技术9 活跃320
PCBETA Beta2, 积分 574, 距离下一级还需 926 积分
UID600151帖子PB币1184 贡献0 技术9 活跃320
留个记号...谢谢分享
积分47最后登录精华0阅读权限10主题UID139135帖子PB币1675 威望0 贡献0 技术0 活跃16
PCBETA Alpha, 积分 47, 距离下一级还需 3 积分
UID139135帖子PB币1675 贡献0 技术0 活跃16
很详细的教程
积分288最后登录精华0阅读权限30主题UID1067503帖子PB币354 威望0 贡献0 技术15 活跃50
头衔太长容易超出边框
PCBETA Beta1, 积分 288, 距离下一级还需 212 积分
UID1067503帖子PB币354 贡献0 技术15 活跃50
很详细的教程
yaoyisuker 发表于
& & 很理解新手搞DSDT的心情,我也是过来人,所以随便写点东西还是希望能帮到更多的人~
积分44最后登录精华0阅读权限10主题UID836973帖子PB币605 威望0 贡献0 技术0 活跃44
PCBETA Alpha, 积分 44, 距离下一级还需 6 积分
UID836973帖子PB币605 贡献0 技术0 活跃44
积分985最后登录精华0阅读权限205主题UID168679帖子PB币13654 威望0 贡献0 技术77 活跃29
UID168679帖子PB币13654 贡献0 技术77 活跃29
P0P2的话,就不需要增加PEGP了.
直接把Device (PEGP) 花括号里面的东西复制到你的Device (P0P2),替换调其中的东西就好了
不需要再注册PEGP
多谢楼主分享经验,非常简单明了。我这几个星期也是一直在学习用dsdt驱动显卡,不过可能是我的硬件比较特殊 ...
<font color="# 发表于
这里可以进行实名操作:
Copyright (C)
pcbeta.com, All rights reserved
Powered by Discuz!&&
请勿发布违反中华人民共和国法律法规的言论,会员观点不代表远景论坛官方立场。

我要回帖

更多关于 显卡设备有问题代码43 的文章

 

随机推荐