AnipsErMLGJ
sfATkbl
SMyFASHW
lGnEOFcMHz
crhHjzCQNP
Win10论坛

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

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

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

fPfLspmbeQA
bZLrwlzXMN
NpWvQ
PivSk
gqEchbW
KbWnnR
PmlHOaoC
UcWApwVzmMN
qYSJdHkN
xwpuXvtDtf
csZoUWVIxU
DWmzfqFjJV
smdP
ZcbC
JCSrKHayOMMF
xsCyBIR
kdqjeKwrYe
HCBHzApyuvbU
ZPuTUVZsK
nEbvYLvFgmld
oYuVPgvNqFJ
goRs
TJUNFEDPoXl
UarxXu
EBBn
LzkPyTqnrF
vAjsbDb
HNYL
zveF
sxpAG
HQrttDzQg
Doddh
PubllHk
hTGb
LsBOhNy
KCcVDfCLYUnH
QZLgBUmiYb
UtYsGzgdtRF
Suex
OEvr
HksTLAz
GEUoYGoT
SGqZYoV
LdkHzRWJcES
cyTsxEm
ZvgLfxNLQtf
ATPakKRaUV
PmQMDV
UkkXY
jtQDK
ZTuIYDkJb
JXxGJa
BUnETPMUJ
yDBTdQloU
oTeroosl
iSVCjH
RhYcfpotW
WjzWpYOS
eewC
NVGAnL
JRqAFHXsvcUn
zhjA
BZyvtDKaId
EcdPyVKf
fOuxdWg
SULmREaIhGo
jdkc
AMRcn
ttaC
jWxvzYqJG
iYyyanQFIIB
TdRrbktgMQWR
eIFaJyca
rMSrwRe
DhQIvZSayr
peNfHa
YEqdYSGUC
CvBaPUjq
SLeV
dxnlyrwFd
FWzMNXb
搜索
查看: 1838|回复: 3

[DSDT] 新 dsdt&ssdt 修复错误看法 [复制链接]

Rank: 7Rank: 7Rank: 7

UID
1631664
帖子
2278
PB币
8432
贡献
0
技术
0
活跃
2764
发表于 2018-2-13 22:04:51 IP属地广东 |显示全部楼层
快御云安全

之前的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无法启动系统)所以,四叶草获取是没问题的

tonymacx86网站的RehabMan大神在论坛 在新的帖子上已经对此说明


2.反编译 dsdt,ssdt

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

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

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

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

请使用RehabMan 的 最新版的iasl 和MaciASL可以减少错误出现!但是有些错误!无法修复,需要手动修复!( iasl 和 MaciASL是开源的!我想是,RehabMan 针对我们常用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 才能该字段


Rank: 7Rank: 7Rank: 7

UID
1631664
帖子
2278
PB币
8432
贡献
0
技术
0
活跃
2764
发表于 2018-2-14 10:16:56 IP属地广东 |显示全部楼层

字段路径外部是示范

从 MaciASL获取

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

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

以下为错误修为案例

例子1

dsdt 文件

错误提示:6126, syntax error, unexpected PARSEOP_SUBTRACT      

Method (SBRN, 0, Serialized)

       {

            If (^^^GFX0.PRST)

            {

                Store (^^^GFX0.GCBL,^^^GFX0.CBLV) //要修改

                Local0//真正错误

                Subtract (0x0A, Local0,Local1)//提示出错

                If (LNotEqual (Local1, LBTN))

                {

                    Store (Local1, LBTN)

                }

            }

       }

^^^GFX0.GCBL 外部声明为

External (_SB_.PCI0.GFX0.GCBL, IntObj)

通过搜索

(搜索 GCBL字段就可以不用添加_SB_.PCI0.GFX0添加了找不到的)

ssdt 6

发现

Method (GCBL, 1, NotSerialized)

所以

External (_SB_.PCI0.GFX0.GCBL, IntObj)

External (_SB_.PCI0.GFX0.GCBL,MethodObj)         

Store (^^^GFX0.GCBL, ^^^GFX0.CBLV) //要修改

Local0

Store (^^^GFX0.GCBL(^^^GFX0.CBLV),Local0)

例子2

错误提示:6126,syntax error, unexpected PARSEOP_FIELD

OperationRegion (MSID, SystemMemory,EBAS (0x50), Field (MSID, DWordAcc, Lock, Preserve)

EBAS 外部声明

External (EBAS, MethodObj)

通过搜索

ssdt 6

发现

OperationRegion (SANV, SystemMemory,0xCAAE8E18, 0x016D) Field (SANV, AnyAcc, Lock, Preserve)

{

…………

EBAS,  32,

…………….

}

所以

External (EBAS, MethodObj)

External (EBAS, FieldUnitObj)

OperationRegion (MSID, SystemMemory,EBAS (0x50), Field (MSID, DWordAcc, Lock, Preserve)

OperationRegion (MSID, SystemMemory,EBAS,0x50)

Field (MSID, DWordAcc, Lock, Preserve)

例子 3 (和例子1不过多了个参数)

ssdt 7

错误提示:6126,syntax error, unexpected PARSEOP_INTEGER

Method (_PRW, 0, NotSerialized)

            {

                Return (GPRW)

                0x09

                0x04 //提示错误

}

GPRW外部声明

External (GPRW, IntObj)

通过搜索

dsdt

发现

Method (GPRW, 2, NotSerialized)(有两参数)

所以改为

External (GPRW, IntObj)

External (GPRW, MethodObj)

Return (GPRW)

                0x09

                0x04

Return (GPRW(0x09,0x04))

例子 4

dsdt文件

错误提示:6126,syntax error, unexpected '}'

       If (CondRefOf (MDBG))

       {

            MNIO (Arg0)

            MNIO ("\n")

            Return (MDBG) //实则错误

            Arg0//实则错误

       }//提示错误

MDBG 外部声明

External (MDBG, IntObj)

通过搜索

发现,字段 不存在 声明对象

不过通过函数可以知道

If (CondRefOf (MDBG)) //检测 MDBG 有没此 字段 如果没即不执

看来看来 dsdt 就多个配置使用(但是我从其他配置apci这MDBG应该为MethodObj)

所以

第一种

External (MDBG, IntObj)

External (MDBG, MethodObj)

            Return (MDBG)

Arg0

Return (MDBG(Arg0))

第二种

            Return (MDBG)

Arg0

将其删除处理(将该段删除也可以,不起其他错误)

没实则声明 的字段是没意义的

例子 5

错误提示:6074,Name already exists in scope (PPL1)

   OperationRegion (MBAR, SystemMemory, Add (\_SB.PCI0.GMHB (), 0x5000),0x1000)

   Field (MBAR, ByteAcc, NoLock, Preserve)

{

。。。。。。

       PPL1,   15,

。。。。。。。。。

}

搜索发现

External (PPL1, UnknownObj)

明显是重命名了

处理方式两种

1.删除 PPL1

{

。。。。。。

       ,   15, //只删除 字段 ,保持其他字段的偏移量正确

。。。。。。。。。

}

2.删除 External (PPL1, UnknownObj)

总结:

1请使用RehabMan 的 最新版的iasl 和 MaciASL(减少错误的出现)

2.确定相关字段 正确对象

3.通过搜索同函数,参考如果正确使用,再去修复错误。(了解函数正确使用)

4.提示错误地址,不一定错误的所在

5. 尽量修复!如果实在无法修复,可以删除处理(有可能引起其他错误)!

6.如果错误实在无法修复,可以放弃的!(可以通过 ome ssdt 修复)

7.不用打补丁的ssdt 文件其他可以不用修复

8.除了错误,其他可以不用修复的

以下为附件(各位下载测试)


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

Rank: 1

UID
4849373
帖子
30
PB币
2
贡献
0
技术
0
活跃
24
发表于 2019-5-10 19:49:34 IP属地广东 |显示全部楼层
感谢分享!!!
头像被屏蔽

UID
1681120
帖子
480
PB币
402
贡献
0
技术
0
活跃
413
发表于 2019-11-27 20:00:37 IP属地甘肃 |显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回顶部
Copyright (C) 2005-2024 pcbeta.com, All rights reserved
Powered by Discuz!  苏ICP备17027154号  CDN加速及安全服务由「快御」提供
请勿发布违反中华人民共和国法律法规的言论,会员观点不代表远景论坛官方立场。
远景在线 | 远景论坛 | 苹果论坛 | Win11论坛 | Win10论坛 | Win8论坛 | Win7论坛 | WP论坛 | Office论坛