DSDT提取与编译教程-面向小白

14,685次阅读
没有评论

共计 2158 个字符,预计需要花费 6 分钟才能阅读完成。

扩展阅读:
http://bbs.pcbeta.com/viewthread-1571455-1-1.html


概述

为了能让 OS X 的特性能够在普通 PC 上正常工作,就需要修改(可以利用补丁)DSDT 和 SSDT。本 教程的目的,就是介绍如何利用现有补丁,修改你电脑的原始 OEM DSDT/SSDT。

虽然你可以用其它型号的电脑的 DSDT,但这样的后果是会造成更多问题。你不能保证用别的型号电脑 的 DSDT 是没问题的。如果你用了别的电脑的 ACPI 文件,即便是硬件配置非常相似,也可能会造成 系统 不稳定 和 一些奇葩的问题。

使用补丁修改 DSDT/SSDT 包含了以下步骤: - 提取原始 ACPI 文件 - 反编译原始文件 - 分析并筛选这 些原始文件 - 使用补丁修改 - 编译并保存,再放到引导特定的目录


在 Clover 启动界面按 F4 提取

在 Clover 启动界面,你可以按“F4”键,Clover 会把原始 ACPI 文件提取到 EFI/Clover/ACPI/origin 目录。再进入系统,就可以在那个目录看到提取到的原始文件了。之后,就可以 开始反编译、修改了。注意,有的 BIOS 可能按 F4 键没用,而需要 Fn+F4,所以,如果不确定的话,F4 和 Fn+F4 都按一次。提取的时候,你不会看到任何是否完成的提示,只是会因为正在写文件而出现一 点延迟现象。如果是用 Clover 的 USB 设备 (U 盘、硬盘) 启动的,文件会被提取到 USB 设备,这样会感 到比较明显的延迟。

有时候,Clover 提取的 SSDT 可能会重复。重复的文件,会影响到反编译。如果你反编译的时候看到了 这样的提示信息(duplicate definitions),就需要仔细检查重复的是哪个了(例如,看大小)。由于存 在这样的问题,所以在 Linux 提取比较好。因为我还没有⻅过在 Linux 提取的出现重复的情况。

当然 CLOVER 提取是普遍的简单方法,如果有条件可以使用 Linux 系统提取

【在 Linux 提取(推荐,还可以顺便提取声卡 codec) 在 Linux 系统里,可以直接在系统分区里找到原始 ACPI 文件。你可以在 /sys/firmware/acpi/tables 和 /sys/firmware/acpi/tables/dynamic 看到。可以简单 地用命令进行拷⻉。

Linux 系统不需要安装,做一个启动 U 盘就可以了:

http://www.ubuntu.com/download/desktop/create- a-usb-stick-on-windows

打开 Linux 的终端输入: sudo cp -R /sys/firmware/acpi/tables DEST 注意: 用 FAT32 格式的 USB 设备 (U 盘、硬盘)的挂载点的路径,替换命令里的 DEST


反编译 ACPI 文件

这里是 Rehabman 的修改版编译器:
https://bitbucket.org/RehabMan/acpica/downloads

。把 iasl 编译器拷⻉到 /usr/bin 目录,会让调用 iasl 更方便。

终端的反编译命令: cd“你存放 DSDT 和 SSDT 的文件夹名”iasl -da -dl *.aml

反编译介绍:
http://bbs.pcbeta.com/viewthread-1475332-1-1.html

当然这边我用图片,提供我自己习惯的编译方法。

1. 我先把 origin 文件夹,拷⻉到了桌面

DSDT 提取与编译教程 - 面向小白

2. 确保此文件夹里只有 DSDT.aml 和其它 SSDT 开头的 aml 文件,像这样

DSDT 提取与编译教程 - 面向小白

注意: 不要管那个 dsl 文件夹,你们没有的,我自己加的

3. 打开终端,先输入 cd,空一格,将桌面上的 oringin 文件夹拖到终端,就会像这样

DSDT 提取与编译教程 - 面向小白

4. 回⻋,输入如图所示命令

DSDT 提取与编译教程 - 面向小白

注意: 确保已把 iasl 编译器拷⻉到 /usr/bin 目录

回⻋编译就行了

我们会得到,这么一堆 dsl 文件,这里我们 只需要 DSDT.aml 文件,其它 SSDT 就删掉好了。

修复错误

即使同时反编译所有文件(使用 iasl 的 -da 参数),还是难免存在错误。反编译后的文件之所以 还会有错误,是因为一直以来 iasl 编译器的版本都在更新、iasl 的实现细节变化了、不同的电脑与系统环 境。存在这些错误的原因可能是(Rehabman 认为),里面调用到的一些方法,实际上是 Windows 内部 实现的(例如 MMTB 方法和 MDBG 方法)。实际也有这样的情况,ACPI 文件的代码原本就存在缺陷或 者某些代码本来就是无效的(很难说得清楚)。

打开编译出来的 DSDT.dsl 文件(用 MaciASL 软件:
https://github.com/RehabMan/OS-X-MaciASL-patc hmatic
,这是 Rehabman 的修改版)

打开就是这个样子

DSDT 提取与编译教程 - 面向小白

点击上方的
Compile(编译)

这边我这里是有错误的

DSDT 提取与编译教程 - 面向小白

我这个错误只要打 syn 补丁就行了,首先,点击上方 Patch 在众多补丁里找到 syn 的那一堆,然后找到,PARSEOP_ZERO 的补丁,点击,等它加载一下,然后 Apply 就行了

DSDT 提取与编译教程 - 面向小白

现在没有错误,就大功告成了,警告 是没有关系的。

接着,在左上⻆,导出你的 DSDT 文件

DSDT 提取与编译教程 - 面向小白

格式为 ACPI Machine Language Binary,名称为 DSDT.aml

最后步骤

将你的 DSDT.aml 文件拷⻉到,EFI/CLOVER/ACPI/Patch 下,重启,看看能不能正常进系统,如果可 以,那就代表这个 DSDT 以后你可以直接用了。

正文完
 0
zyx
版权声明:本站原创文章,由 zyx 于2020-02-10发表,共计2158字。
转载说明:所有文章未经授权禁止转载、摘编、复制或建立镜像
评论(没有评论)