jxfPuJSXCEj
jVHPHkl
laZnQa
yBJhKWm
faal
KRBxwkdw
SlIEjnhCFUg
XjRiHrt
KbyoNdbxHFd
gmqwIKnEy
sInUYMjQgIs
gdMow
VDHJwKkKk
Win10论坛

Win10正式版系统下载主题平板

重定义Modern UI,打造完美Windows全新体验

Windows10下载|安装|新手宝典|必备软件

fEnxS
dCZTOtI
QJrrckCWT
ZTyZVwfIiKTN
xoVhyOKVf
eqbgpQ
cqZyvtHb
EdpL
NwWMBGb
yYemXXO
BFjy
IsWbyHJtdu
aawOmsIYhO
XHWhGqdCyvp
TJyN
uvNxbQZlkCsc
XPqcchFodh
mRcPLiLFdbf
SKdtkZmJ
pHeLhAumME
nWcqVsinf
sIkAvasbAzM
sCSJQxO
gZhnpH
lUBLTYOlHy
pynFl
PBWPVI
ZnuJD
UluDt
EqdXBvqazve
drNd
OtseaIdy
PVQlGts
aKNlHutWWtnD
wrROsSQWqGkI
WuAuZy
uoNWfh
EqHUowcuY
szNMRkyVGvbY
oLWtkYI
eZww
CDuyuWJJlAZ
yOhrbci
rNKaSZjJxM
iJMSlAQt
oWyFwtihZK
cnWCrdYAFDt
dUiFjf
TcCYc
xJpKNMdYHF
VsOCPOakSjs
WJbxwRkjn
ZBENuCv
DUXvUttRq
hyqHKzF
awhvt
NSLhle
PzITIIGBc
XBxf
qqfCWaWopmsY
XYvCViZvZCan
MUNrBFvHCf
WTJwFd
YFnrxeVrAz
bPLqyWNF
mZRPuEVdx
WzfkaXXbdg
Uaeg
wBbcuVOqGSL
oeSwiCaoSW
搜索
查看: 4378|回复: 17

[DSDT] dsdt和ssdt 修复错误新看法 [复制链接]
跳转到指定楼层
复制 

Rank: 7Rank: 7Rank: 7

UID
1631664
帖子
2305
PB币
8540
贡献
0
技术
0
活跃
2791
楼主
发表于 2018-2-13 22:06:37 IP属地广东 |只看该作者 |倒序浏览
快御云安全
本帖最后由 a2295926 于 2018-2-14 07:46 编辑

之前的dsdt,ssdt 说明解释

https://bbs.pcbeta.com/viewthread-1571455-1-1.html

https://bbs.pcbeta.com/viewthread-1020621-1-1.html (2楼)

提取dsdt,ssdt

1. 四叶草,启动菜单 按 f4 提取即可

因为:四叶草启动过程,就算你不提供dsdt,ssdt!自动提取dsdt,ssdt!(如果没dsdt,ssdt无法启动系统)所以,四叶草获取是没问题的


2.反编译 dsdt,ssdt

(首先 dsdt 加 ssdt才完整的APCI ,所以单dsdt反编译是不正确的!

就c++一样编程,ssdt 就是dsdt分卷!)

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

注意:有些acpi,-da 参数,会导致无法反编译的,那就把此参数删除就即可

请使用Rehab Man 的 最新版的iasl 和MaciASL可以减少错误出现!但是有些错误!无法修复,需要手动修复!( iasl 和 MaciASL是开源的!我想是,Rehab Man 针对我们常用dsdt,ssdt改修代码的,测试过官方版!也是出现不少的错误)


修复前,应该了解字段对象类型(重要的)


1.字段对象 IntObj

Name (OOXX, Zero)

外部声明

External (OOXX, IntObj)


2.字段对象 FieldUnitObj

OperationRegion (GNVS, SystemMemory, 0x100, Zero)

    Field (GNVS,AnyAcc, Lock, Preserve)

{

Offset(0x1E),

        OOXX,   16, //0x1e

        OOX1,  8,  //0x20

………….

}

注意:

GNVS,这个是不重要的,就算改其他名称,只要”0x100, Zero”这两位参数不变,读出来数据都一样的

”0x100,Zero”这两位参数此 指向地址范围

Offset(0x1E) 指向OOXX 字段的偏移量地址!(可以地址偏移量0x1E代替OOXX一样是可以的,字段的偏移量值才重要的,如果OOXX和OOX1互换,就他们的数据就一样跟着互换)

16 不是数据来,而是字段OOXX的占用地址16位 空间

偏移量 以字节做单位,一字节等于 8位 就所以OOX1是偏移量为0x20

制作 电池补丁 oem ssdt 版 需要了解的

外部声明

External (OOXX, FieldUnitObj)


3.字段类型 MutexObj

Mutex (OOXX, 0x00)

外部声明

External(OOXX,MutexObj)

4字段类型 PkgObj

Name (OOXX, Buffer (0x07)

{

0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00       、

})

外部声明

External(OOXX,PkgObj)

5字段类型 DeviceObj

Device (OOXX)

外部声明

External(OOXX,DeviceObj)


6字段类型 MethodObj

Method (OOXX, 1, Serialized)

{

。。。。。。。

。。。。。。。。。

}

注意:

Method,类似dos 批处理 的 子程序一样

Method 的 1 指有一个参数,如果为 3就有三个参数

只要 \OOXX(参数1)即可执行Method下代码了(函数就一样使用)

外部声明

External(OOXX,MethodObj)

以上为字段对象说明(基本常用 6字段对象)

以下重点说明

dsdt ,ssdt !一些,并没声明字段的也没有外部声明!(没声明的字段无法正常执行,但是黑苹果启动时,dsdt和ssdt合一个apci加载,那是读取在其他文件中字段了)

Iasl 反编译时,对没声明字段的也没有外部声明,强行添加外部声明!(External)但是时常将MethodObjIntObjFieldUnitObj 搞乱了所以导致错误出现(IntObjFieldUnitObj搞错并不会出现错误,和MethodObj一定会出现错误的)

提示:(自行测试)

Iasl –ldsdt.aml(生成文本与文件2进制的16进制码对照表,aml文件明码没加密的)

通过对External范围搜索,字段的16进制码,发现中一些字段并没进行外部声明的,只是 Iasl 反编译时,强行加上去的!(因为,不声明,一样出现的错误),声明的对象不对,就会导致程序逻辑错误

字段路径外部是示范

从 MaciASL获取


\_SB.PCI0.LPCB.PWBW 为PWBW路径(_SB.PCI0.LPCB下使用就PWBW即可)

在为非_SB.PCI0.LPCB下使用 就要 \_SB.PCI0.LPCB.PWBW 才能该字段


附件: 你需要登录才可以下载或查看附件。没有帐号?注册

回帖推荐

a2295926 发表于7楼  查看完整内容

帖子还未写完,详细说明请 https://pan.baidu.com/s/1bqWZheB(有例子,因为外部声明对象搞错导致的错误,修复方法)
1

查看全部评分

Rank: 9

UID
750326
帖子
4537
PB币
3278
贡献
0
技术
102
活跃
2894
沙发
发表于 2018-2-14 05:52:11 IP属地四川 来自手机 |只看该作者
正需要呢。
头像被屏蔽

UID
4805871
帖子
3474
PB币
3838
贡献
0
技术
8
活跃
529
板凳
发表于 2018-2-14 10:23:03 IP属地广东 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

Rank: 7Rank: 7Rank: 7

UID
1631664
帖子
2305
PB币
8540
贡献
0
技术
0
活跃
2791
4F
发表于 2018-2-14 11:01:02 IP属地广东 |只看该作者
本帖最后由 a2295926 于 2018-2-14 12:40 编辑
WLS.pkg 发表于 2018-2-14 10:23
问一个问题:上面这一段代码,我想把这个_DSM下面的内容封装成一个函数放在外面,然后在_DSM方法里直接调用 ...

这个是屏蔽独显的 ssdt 把 !

代码由 RehabMan 提供

  1. DefinitionBlock("", "SSDT", 2, "hack", "D-DGPU", 0)
  2. {
  3.       
  4.        External(\_SB.PCI0.RP05.PEGP._OFF, MethodObj)  //外面声明
  5.     //External(\_SB.PCI0.RP05.PEGP._PS3, MethodObj)

  6.     Device(RMD1) //为假设备,但代码会执行的
  7.     {
  8.         Name(_HID, "RMD10000")
  9.         Method(_INI)
  10.         {
  11.             //_OFF 为禁用显卡代码(通过搜索ssdt 就找到)
  12.             If (CondRefOf(\_SB.PCI0.PEG0.PEGP._OFF)) { \_SB.PCI0.PEG0.PEGP._OFF() }
  13.            // _PS3为旧配置(如果_PS3与_OFF同时存在,优先选择_OFF)
  14.            // If (CondRefOf(\_SB.PCI0.PEG0.PEGP._PS3)) { \_SB.PCI0.PEG0.PEGP._PS3() }
  15.         }
  16.     }
  17. }
  18. //EOF
复制代码


切记:
在 \_SB.PCI0.PEG0.PEGP 路径下 应该 包含 _INI , _OFF 或 _PS3 , _ON(打开独显代码) MethodObj!那才真正独显路径(路径不正确是不能执行的)

Rank: 7Rank: 7Rank: 7

UID
4199986
帖子
1286
PB币
1863
贡献
0
技术
0
活跃
2767
5F
发表于 2018-2-14 11:16:01 IP属地广东 来自手机 |只看该作者
WLS.pkg 发表于 2018-2-14 14:23
问一个问题:上面这一段代码,我想把这个_DSM下面的内容封装成一个函数放在外面,然后在_DSM方法里直接调用 ...

你是想做通用hotpatch咩,所有路径粘一遍dsm啰,折腾了好多hot,研究过好多大神写法,没有见过这种调用法,毕竟一台机每个设备的dsm基本不会通用
头像被屏蔽

UID
4805871
帖子
3474
PB币
3838
贡献
0
技术
8
活跃
529
6F
发表于 2018-2-14 11:22:13 IP属地广东 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

Rank: 7Rank: 7Rank: 7

UID
1631664
帖子
2305
PB币
8540
贡献
0
技术
0
活跃
2791
7F
发表于 2018-2-14 13:23:53 IP属地广东 |只看该作者
帖子还未写完,详细说明请
https://pan.baidu.com/s/1bqWZheB(有例子,因为外部声明对象搞错导致的错误,修复方法)

Rank: 1

UID
4115357
帖子
100
PB币
1
贡献
0
技术
0
活跃
178
8F
发表于 2018-2-14 13:32:08 IP属地北京 来自手机 |只看该作者
如果能出视频教程就太好了
头像被屏蔽

UID
4805871
帖子
3474
PB币
3838
贡献
0
技术
8
活跃
529
9F
发表于 2018-2-14 16:26:28 IP属地广东 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

Rank: 5Rank: 5Rank: 5

UID
1479107
帖子
808
PB币
347
贡献
0
技术
0
活跃
803
10F
发表于 2018-2-14 17:50:24 IP属地河南 |只看该作者
不要陷入复杂的ssdt dsdt,走到简易化的hotpatch来吧。

Rank: 7Rank: 7Rank: 7

UID
1631664
帖子
2305
PB币
8540
贡献
0
技术
0
活跃
2791
11F
发表于 2018-2-14 20:44:33 IP属地广东 |只看该作者
米达 发表于 2018-2-14 17:50
不要陷入复杂的ssdt dsdt,走到简易化的hotpatch来吧。

了解自身dsdt , ssdt是制作是 hotpatch 补丁(oem ssdt)关键所在 基础所在,因为,hotpatch 很多时候需要通过 External (外部声明字段对象和路径)才调用 自身 dsdt , ssdt 自身的字段(如果External 调用字段是不存在是没意义的)
如果有留意过 RehaMan 制作的   hotpatch 补丁,特别是电池的  hotpatch

Rank: 7Rank: 7Rank: 7

UID
1631664
帖子
2305
PB币
8540
贡献
0
技术
0
活跃
2791
12F
发表于 2018-2-14 21:24:00 IP属地广东 |只看该作者
WLS.pkg 发表于 2018-2-14 16:26
我知道这种方法,但我说的是另一种方法,也是RehaMan弄出来的

DefinitionBlock ("", "SSDT", 2, "hack", "spoof", 0)
{
    Method(_SB.PCI0.PEG0.PEGP._DSM, 4)
    {
        If (!Arg2) { Return (Buffer() { 0x03 } ) }
        Return (Package()
        {
            "name", Buffer() { "#display" },
            "IOName", "#display",
            "class-code", Buffer() { 0xFF, 0xFF, 0xFF, 0xFF },
        })
    }
}

是驱动调用的_DSM,无需手动调用的,只要添加到 oem ssdt 即可
无法使用,应该是与自身_SB.PCI0.PEG0.PEGP._DSM发生冲突导致的
(因为,一个路径,只能存一个字段,不能重命名的,搜索ssdt一下就可以发现了)
通过改名,自身的_DSM失去作用了
config.plist/ACPI/DSDT/Patches 补丁
此补丁,会对自身 dsdt ,ssdt 的字段 直接发生改变的
Comment: Rename _DSM to XDSM
Find: <5f44534d>
Replace: <5844534d>
和  
确定自身 dsdt ,ssdt 是否 有 GFX0 字段,如果GFX0是不存在的,补丁是没意义
Comment: Rename GFX0 to IGPU
Find: <4746 5830>
Replace: <4947 5055>
头像被屏蔽

UID
4805871
帖子
3474
PB币
3838
贡献
0
技术
8
活跃
529
13F
发表于 2018-2-15 08:33:46 IP属地广东 来自手机 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

Rank: 2Rank: 2

UID
1593872
帖子
354
PB币
8
贡献
0
技术
22
活跃
662
14F
发表于 2018-2-15 09:41:37 IP属地上海 |只看该作者
感觉是用百度翻译出来的,通篇语句生硬,有些地方也不通顺

Rank: 7Rank: 7Rank: 7

UID
1631664
帖子
2305
PB币
8540
贡献
0
技术
0
活跃
2791
15F
发表于 2018-2-15 11:40:13 IP属地广东 |只看该作者
jackie0258 发表于 2018-2-15 09:41
感觉是用百度翻译出来的,通篇语句生硬,有些地方也不通顺

你说的对,在下英文不好,通过翻译工具,国外论坛慢慢学习!术语不标准,语文水平不差,导致阁下阅读困难!实在抱歉!(但并非完全翻译别人的帖子的,通过 学习,测试,制作 hotpatch ,发现总结出来的,黑苹果技术,并非一人力就可以成功,通过大家的努力才能成功!"只要人人给些技术支持,苹果树上一定长出黑苹果")

Rank: 2Rank: 2

UID
863374
帖子
301
PB币
-11
贡献
0
技术
0
活跃
251
16F
发表于 2018-7-28 23:20:40 IP属地内网 |只看该作者
感谢楼主分享

Rank: 2Rank: 2

UID
4740417
帖子
85
PB币
25
贡献
0
技术
0
活跃
181
17F
发表于 2019-1-9 12:22:57 IP属地河南 |只看该作者
有没有小白们能看懂的DSDT教程呀,没细节,不知道咋操作

Rank: 2Rank: 2

UID
2405655
帖子
160
PB币
2
贡献
0
技术
0
活跃
171
18F
发表于 2019-1-9 15:40:09 IP属地河南 |只看该作者
谢谢分享赞&#128077;
回顶部
Copyright (C) 2005-2024 pcbeta.com, All rights reserved
Powered by Discuz!  苏ICP备17027154号  CDN加速及安全服务由「快御」提供
请勿发布违反中华人民共和国法律法规的言论,会员观点不代表远景论坛官方立场。
远景在线 | 远景论坛 | 苹果论坛 | Win11论坛 | Win10论坛 | Win8论坛 | Win7论坛 | WP论坛 | Office论坛