本帖最后由 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 命令 以使新编译器得到的代码和旧编译器兼容)

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

iasl 文件名

示例: iasl DSDT.dsl 或者

iasl SSDT*.dsl 或者

iasl *.dsl

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

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

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

  1. linux 更新软件命令 失败,对linux下软件(库)的更新命令详解

    在ubuntu服务器下安装包的时候,经常会用到sudo apt-get install 包名 或 sudo pip install 包名,那么两者有什么区别呢? 1.区别 pip用来安装来自PyPI( ...

  2. manjaro(linux)系统各类命令合集(渐渐更新)

    manjaro(linux)系统各类命令合集(渐渐更新) wlan开启 系统默认的wlan是关闭的 sudo rmmod ideapad_laptop 查找以及安装命令 系统很多软件都是自带安装包的, ...

  3. Ubuntu 更新软件命令

    Ubuntu 更新软件命令 //更新软件源 apt-get update // 更新升级所有软件 apt-get upgrade // 更新某个软件 apt-get upgrade //name // ...

  4. linux 卸载软件命令_如何在Linux中使用命令行卸载软件

    linux 卸载软件命令 Linux provides different methods for installing software. You can install software from ...

  5. linux升级软件命令 yum,Linux中升级更新命令yum upgrade和yum update的区别

    1.作用 都是系统升级命名. 2.升级内容 yum -y update:升级所有包同bai时也升级软件和系统内核:du yum -y upgrade:只升级所有包,不升级软件和系统内核.zhi 3.使 ...

  6. ubuntu linux卸载软件命令,ubuntu安装和卸载软件命令

    Ubuntu软件安装与删除相关命令 安装软件 命令: apt-get install softname1 softname2 softname3-- 卸载软件 命令: apt-get remove s ...

  7. linux安装软件命令1003无标题,linux系统安装OFED(infiniband)

    计算节点安装OFEDnode scientific linux5.8 x86_64linux 1.查看系统系统:c++ [root@localhost ~]# cat /etc/redhat-rele ...

  8. Linux安装软件命令小结

    1.安装一个新软件包 apt-get install packagename 2.卸载一个已安装的软件包(保留配置文件) apt-get remove packagename 3.卸载一个已安装的软件 ...

  9. Linux安装rsync命令失败,rsync 常见错误与解决方法整理

    我们都是通过错误日志查看 在rsyncd.log里面或.err文件里面,大家可以用记事本打开查看. 注意windows下面我们需要给SvcwRsync用户,管理同步目录的所有权限,基本上这样就可以了 ...

  10. linux安装软件命令1003无标题,Linux下软件安装

    正则表达式基础 一.实验介绍 1.1 实验内容 虽然我们这一节的标题是正则表达式,但实际这一节实验只是介绍grep,sed,awk这三个命令,而正则表达式作为这三个命令的一种使用方式(命令输出中可以包 ...

最新文章

  1. OBJC依赖库管理利器cocoapods 安装及使用详细图解
  2. 由VMWorld2010想到的Social Media宣传
  3. 堆和栈地址——eclipse linux实践
  4. x86汇编语言-从实模式到保护模式----第五章
  5. BZOJ 3391: [Usaco2004 Dec]Tree Cutting网络破坏(搜索)
  6. 罗斯蒙特电磁流量计8723说明书_罗斯蒙特8732E电磁流量计对环境和温度的限制
  7. 作者:冯仕政(1974-),男,中国人民大学社会与人口学院教授、副院长。
  8. linux设置网络 重命名,01-Redhat/Centos7网卡命名介绍及修改方式
  9. 传智播客 Html基础知识学习笔记
  10. Java日志记录最佳实践
  11. 【Python】setup-转载
  12. Log4Net Layout使用以及扩展
  13. POI数据获取-Python
  14. 魔域手游如何修改服务器id,魔域互通端游手游架设
  15. 数据库学习整理之常见运算符
  16. 联想拯救者Y700评测 怎么样
  17. 微信公众号三方平台开发【代微信公众号接收消息事件并响应】
  18. 解决Error: unable to perform an operation on node ‘rabbit@DESKTOP-xxx‘. Please see diagnostics informa
  19. 网上整理的google面试题
  20. Qgis教程14:在QGS中添加自定义的Mapbox底图

热门文章

  1. visio 2019 简单流程图教程
  2. 数学老师在成人网站上教微积分,年入百万 。。。
  3. 微型计算机原理及应用吴宁课后答案,微机原理及应用(吴宁) 习题答案chapter7(4页)-原创力文档...
  4. 使用链接时间代码生成
  5. 使用计算机创建表步骤,2012年计算机二级VFP表的创建和使用学习教程
  6. 数字图像处理应用领域
  7. 基于slicer开发(简化功能与插件开发)
  8. xCodeGhost 事件专题总结
  9. 发动机噪音测试软件,噪音测试
  10. mysql php apache源码_用源码包安装php+mysql+apache+vbb总结