神楽小白 发表于 2020-8-9 15:43

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

本帖最后由 神楽小白 于 2020-8-9 16:01 编辑

前言
有些刚入门的小白,可能对这一块还不熟悉,那么我就来写一下先,用以前的教程为基础再编辑了这一篇教程

原教程地址
http://www.ubuntu.com/download/desktop/create- a-usb-stick-on-windows (3楼有楼主翻译的制作步骤)

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

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

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

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

提取
在CLOVER中提取:
在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中提取:
在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 (3楼有楼主翻译的制作步骤)

打开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


反编译介绍:https://github.com/RehabMan/OS-X-MaciASL-patc hmatic,这是Rehabman的修改版)

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

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

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

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

3.打开终端,先输入cd,空一格,将桌面上的oringin文件夹拖到终端,就会像这样
4.回⻋,输入如图所示命令


注意:确保已把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的修改版)


打开就是这个样子


点击上方的Compile(编译)

这边我这里是有错误的


我这个错误只要打syn补丁就行了,首先,点击上方Patch

在众多补丁里找到syn的那一堆,然后找到,PARSEOP_ZERO的补丁,点击,等它加载一下,然后Apply就行了



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

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


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

最后步骤
将你的DSDT.aml文件拷⻉到,EFI/CLOVER/ACPI/Patch下(OC就是放到EFI/OC/ACPI下,config中添加),重启,看看能不能正常进系统,如果可 以,那就代表这个DSDT以后你可以直接用了。


神楽小白 发表于 2020-8-10 07:41

远景的排版我也是醉了,改了几次,竟然还有文字缺失

lesonzjl 发表于 2020-8-10 08:15

好帖,支持楼猪

wjwdddb 发表于 2020-8-10 08:27

谢谢楼主的辛苦分享,了解一下。

jianzhao123 发表于 2020-8-10 08:35

谢谢楼主的分享,了解一下。

wine毛毛 发表于 2020-8-10 08:38

神楽小白 发表于 2020-8-10 07:41 https://www.pcbeta.com/static/image/common/back.gif
远景的排版我也是醉了,改了几次,竟然还有文字缺失

这位同学,在我们的OC里,DSDT已经被高度弱化,SSDT占优势了,所以你看目前这个区里的EFI,基本上的是自带SSDT,而不是DSDT,
而且,SSDT还是别人帮你做好的,你只需要改一改就好的,
DSDT现在已成为过去式

新丰电脑 发表于 2020-8-10 09:31


谢谢楼主的分享

jianzhao123 发表于 2020-8-10 09:41

wine毛毛 发表于 2020-8-10 08:38
这位同学,在我们的OC里,DSDT已经被高度弱化,SSDT占优势了,所以你看目前这个区里的EFI,基本上的是自带 ...

U1s1确实,早就不用dsdt了,全是ssdt

寒雨轩 发表于 2020-8-10 09:41

本帖最后由 寒雨轩 于 2020-8-10 09:48 编辑

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

598204514 发表于 2020-8-10 10:54

jianzhao123 发表于 2020-8-10 09:41 https://www.pcbeta.com/static/image/common/back.gif
U1s1确实,早就不用dsdt了,全是ssdt

对啊,修什么就打什么ssdt补丁就好了

painbiao 发表于 2020-8-10 12:36

现在clover和oc都只推荐用热补丁了。

神楽小白 发表于 2020-8-10 18:01

不是,你们理解我的意思吗,我的意思是搞一份完整DSDT,没让你真的用

mendax1234 发表于 2020-8-10 18:01

神楽小白 发表于 2020-8-10 18:02

有了一份完整的DSDT,还能方便你做热补丁,这里也只是提供一种可行的方法

神楽小白 发表于 2020-8-10 18:03

这边只是提供一种可行的方法,热补丁的教程我会写的,放心放心

神楽小白 发表于 2020-8-10 18:13

wine毛毛 发表于 2020-8-10 08:38 https://www.pcbeta.com/static/image/common/back.gif
这位同学,在我们的OC里,DSDT已经被高度弱化,SSDT占优势了,所以你看目前这个区里的EFI,基本上的是自带 ...

这位同学,我这里只是提供一条道路,最终目的还是服务于Hotpatch,这个教程一是教你如何提取ACPI表,而是教你如何联合反编译,得到一份完整的DSDT,当然这也不是必要的,因为你大可直接看DSDT与SSDT,所以我在文中有提,这是我自己的习惯,小标题也有写,反编译ACPI文件(制作热补丁从这一步开始就不需要做了,做到提取就行)

神楽小白 发表于 2020-8-10 18:14

jianzhao123 发表于 2020-8-10 09:41 https://www.pcbeta.com/static/image/common/back.gif
U1s1确实,早就不用dsdt了,全是ssdt

确实没错,但我这只是提供一条道路,为了得到一份完整的DSDT,这方便你做热补丁,当然你也可以直接看原始的DSDT和SSDT,没有关系,这只是我的个人习惯!

神楽小白 发表于 2020-8-10 18:15

598204514 发表于 2020-8-10 10:54 https://www.pcbeta.com/static/image/common/back.gif
对啊,修什么就打什么ssdt补丁就好了

没逼你修啊,不修也行,可以见我对前两个人的回复

神楽小白 发表于 2020-8-10 18:16

598204514 发表于 2020-8-10 10:54 https://www.pcbeta.com/static/image/common/back.gif
对啊,修什么就打什么ssdt补丁就好了

做热补丁确实不需要修这玩意,但我这教程完全就是入门教程

神楽小白 发表于 2020-8-10 18:16

598204514 发表于 2020-8-10 10:54 https://www.pcbeta.com/static/image/common/back.gif
对啊,修什么就打什么ssdt补丁就好了

热补丁相关教程,后续会写的
页: [1] 2 3
查看完整版本: DSDT提取与编译教程-面向小白