本帖最后由 daxuexinsheng 于 2015-1-13 14:23 编辑 2015.1.13 更新 把命令换成了最精简的形式。 很多同学看到标题可能会感到困惑,什么是关于减少DSDT和SSDT错误的尝试呢? 是这样的,一般,我们在Window下或者在Mac下提取到的DSDT都是从BIOS里直接读取的、已经编译好的字节码文件,可以理解为,我们只能提取到aml文件,这样,问题就随之产生了,即aml是编译好的文件,我们不能直接查看其中的内容,我们使用软件打开aml文件,其实是在做一个反编译的操作,把字节码文件反编译回到源代码,展现在软件里。而反编译的操作常常会很难避免地产生许多错误。就像是中文和英文之间不能进行无缝转换一样。 我最近有一些机会,帮助景友修复DSDT,就在这个过程中,我找到了一种能使反编译产生的错误尽可能减少的方法,这是从国外的黑苹果高手Rehabman那里学到的。(当然我肯定不是论坛里第一个知道这个方法的,只是好像还没有帖子介绍这个方法,这才发贴。如果已经有了相关的帖子,还请版主删贴。) 本方法需要使用原始的DSDT.aml和SSDT.aml(一般会有很多个)。 (建议用Linux提取,方法见这个贴子的3楼:http://bbs./viewthread-1571455-1-1.html) 下面就是这个方法: 其实就是使用命令,联合DSDT、SSDT进行反编译(即aml->dsl),使用命令,就有一些可选的操作了。 一、首先,就是下载编译器(可以看成是把中文翻译成英文的翻译机,只是它的工作是把编程语言翻译成机器可以听懂的语言。) DSDT的编程语言的名字叫ASL(ACPI Source Language)。可以到这里下载:https://www. 。这里提供了Unix、Windows、Linux版本的编译器,其中Windows提供了可直接运行的编译器,Unix还需要下载下来自己构建,但我的机器上构建不成功,就搜索了网友构建好的了,帖子会提供下载。 二、下载好编译器后,我们需要把它放到系统盘下的usr/local/bin目录,这样才能使用。 这个目录是隐藏的,你可以在顶部Finder的菜单栏选择“前往”菜单下最下面的“前往文件夹”,在弹出的对话框中输入 /usr/local/bin 或者 /usr/bin,就可以打开这个目录了,把编译器程序放到里面就行了。 三、接下来,介绍要用到的命令。 1、cd :这是很多操作系统都支持的命令,其含义是“change directory”,就是改变路径。 使用方法: cd 路径名比如 cd Desktop/ACPI ,就是定位到桌面上的ACPI文件夹。 2、iasl :这是编译命令 使用: iasl 文件名 比如 iasl DSDT.dsl,就是编译DSDT.dsl文件。 2.1 参数1: -e ,这里的e是external的首字母,意思是在操作时要包括外部的一些信息,比如把SSDT的信息,加入到DSDT的反编译过程里,对于DSDT,SSDT就是外部信息。 2.2 参数2: -d ,这里的d是disassemble的首字母,字面意思是拆卸,可以说是反编译。 四、最后是正题,我们要用到的命令的例子: 1、 打开Launchpad,找到“其它”->“终端”,输入以下命令。 2、cd Desktop/ACPI 指定到存放DSDT.aml、SSDT.aml文件的目录。(你的文件路径不一定一定要是这个。) 3、iasl –e SSDT*.aml –d DSDT.aml (已经有比这个命令,效果更好的命令了。具体请看贴子的最后。) 这句命令的操作:使用SSDT.aml里的相关信息,协助反编译DSDT.aml。SSDT后面的星号表示的是任意字符,比如,你的文件夹里有SSDT1.aml、SSDT2.aml、SSDT3.aml、SSDT4.aml ……。很多的SSDT,这样写,程序就会自动找这个文件夹下的所有SSDT,而不需要把所有SSDT的文件名写到命令里。 执行这句命令后,一般,就会在这个文件夹下生成一个dsl文件,它的错误大大减少了,甚至已经没有错误了。以后要修改DSDT,就可以用这个文件修改了,修改好就可以编译成aml使用了。(不建议用软件打开aml文件,编译好后,可以直接测试有没有效果了。) 3.1 这句命令还可以反过来用,即 iasl -e DSDT.aml -d SSDT*.aml (已经有比这个命令,效果更好的命令了。具体请看贴子的最后。) 与前一句命令相比,操作反了过来,这句命令是使用DSDT.aml里的相关信息,协助反编译SSDT.aml,这样生成的SSDT.dsl,也能减少很多错误,甚至已经都没有错误了。 以下是我使用这个方法的情况。 以上是在OS X的终端进行的操作,Windows下需要把编译器和DSDT.aml、SSDT.aml放在同一个文件夹,再用cd命令到文件夹,就可以执行命令了。 另外,在OS X下,楼主推荐使用MaciASL编辑、修改DSDT。楼主使用的是MaciASL的Rehabman的修改版。会提供下载。 结束语:本贴介绍的方法是一种尝试,并不适合所有的电脑的DSDT。如果你发现这种方法对你的DSDT没有减少错误的效果,那就还是按照一般的方法修改DSDT吧。 声明:在尝试此方法的过程中,发生的一切后果,由读者自行承担,读者有选择是否使用此方法的自由。 毕竟楼主不是什么高手,不能保证会不会有什么问题。 文件下载地址:(iasl是编译器,是ACPI 5.0的编译器,DSDT Editor等软件用的是ACPI 4.0的编译器。MaciASL是编辑DSDT的软件,在软件的设置里,可以选择编译器的版本。)(楼主在下载地址也更新了Windows版的编译器。ACPI 5.0 编译器 版本 更新到 20141107 版本。) 特别注意: 新版本编译器,反编译后,用MaciASL打开,左边的树状目录会显示不全(实际的代码没有少,但树状目录不能显示完整)。 已经更新为 国外大神 Rehabman 的修改版。 http://pan.baidu.com/s/1pJ7DKGb 在帖子的第三页的43F、44F、59F有精彩回复,大家可以看一下。 1、贴子发出后的 第一个进展:iasl -e *.aml -d *.aml (感谢 chenkj918 ,这是本贴的第一个进展。) 2、第二个进展: iasl -da *.aml (感谢 zmman 告诉楼主他的新发现。这是目前减少错误最有效的命令之一。) 3、20140926版本及以前版本: iasl -da *.aml 4、20141107 版开始: iasl -da -dl *.aml (从这个版本开始,iasl编译器开始支持 算数运算符 和 逻辑运算符,同时,增加了 -dl 命令 以使新编译器得到的代码和旧编译器兼容) 重要补充,在之前的贴子,楼主忘了介绍 使用命令 编译DSDT/SSDT文件的方法了(即 dsl -> aml ),特此补充: |
|
来自: Photoshop321 > 《黑苹果》