linux 更新软件命令 失败,(2015.1.13 更新)联合DSDT和SSDT进行反编译——减少DSDT和SSDT错误的尝试...

本帖最后由 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.pcbeta.com/viewthread-1571455-1-1.html)

下面就是这个方法:

其实就是使用命令,联合DSDT、SSDT进行反编译(即aml->dsl),使用命令,就有一些可选的操作了。

一、首先,就是下载编译器(可以看成是把中文翻译成英文的翻译机,只是它的工作是把编程语言翻译成机器可以听懂的语言。)

DSDT的编程语言的名字叫ASL(ACPI Source Language)。可以到这里下载:https://www.acpica.org 。这里提供了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、cdDesktop/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 命令 以使新编译器得到的代码和旧编译器兼容)

75257184_1.png

重要补充,在之前的贴子,楼主忘了介绍 使用命令 编译DSDT/SSDT文件的方法了(即 dsl -> aml ),特此补充:

iasl 文件名

示例: iasl DSDT.dsl 或者

iasl SSDT*.dsl 或者

iasl *.dsl

即可由 dsl源文件,生成 aml目标文件。(不建议用软件打开aml文件)

或者,在用 MaciASL 保存的时候,这样选择:(保存类型选择:“ACPI Machine Language Binary”(简称aml),这样就可以把 dsl 编译保存为 aml 了)

75257184_2.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值