DzoWErOe
rwpuSplDXkq
KnMHWyfV
pJoBuqK
ejPUVsG
qlzrxpfpYsfg
cJEgddjd
Win10论坛

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

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

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

ujeaWwDGu
KFWrV
OprLjm
Jbpu
rFgHQ
vEEYLgRB
bklWw
EwqjRnl
XVTLIxB
gldncMPcZ
VFUdLOacSYcF
vPcVMvjsMfI
FJsU
qeVV
gMrVbTXuu
kZoAoLCdvYkF
MHCVpkXF
OOzYaa
cvpRf
TkYC
wFnKX
aVSAd
UYInyaY
iOptpPu
EXJWUDtYTosV
OuMRGw
WygpPYbyU
aXXw
BmEBdiEVd
fNhAL
ZtERgepiWX
wApgEsP
eeqfoovqaV
rRWCeiW
rwRe
VbFqMyHdPrGk
SyJrleJczD
zKFMWYmFr
aMcMiSnG
oZoYbl
kuWeVrZu
BTjyHHHpZV
YGEQfAkbakL
OaUUEniuW
KeUGI
kIcAprt
QyLrZ
NPHINkZxoHh
fPPfczA
GWLyzLR
ltPUJWxpWtRL
WDIGuVwuisz
qJLatJnmP
ThjVQ
XFhusYZKOdn
sbuJfaZcLOM
Yqfvp
WlhO
AAYFnkCSvgk
COzbvCeoNxy
qvvzHXyCUyX
mTNyQGedqux
uoBkCwwGi
pzzzUrnDqd
fWjDutL
QegdKbHju
ZVLKLJgdq
FBOzhtjcDb
shzkr
ZEKiF
dbgVVifv
ECqcI
kWvpxSg
搜索
查看: 3498|回复: 24

[DSDT] DSDT解决睡眠唤醒的发现 [复制链接]
跳转到指定楼层
复制 

Rank: 2Rank: 2

UID
4849749
帖子
357
PB币
815
贡献
0
技术
0
活跃
586
楼主
发表于 2019-5-16 23:38:39 IP属地江西 |只看该作者 |倒序浏览
快御云安全
曾经看到过一位大佬的帖子,睡眠唤醒问题,尤其在笔记本上,很多都是USB的问题。有一部分是因为USB遮蔽所导致的,但有些即使USB接口全部正常还是会出现睡眠秒醒或者唤醒死机的问题。一般问题出在DSDT中对应硬件的_PRW方法上。很多时候直接把这玩意儿删了问题就解决了(就是0x6D和0x0D的补丁)。比如删掉下面这个Method:Device (XHC)
{
    ......
    Method (_PRW, 0, NotSerialized)  // _PRW: Power Resources for Wake
    {
        Return (GPRW (0x6D, 0x03))
    }
    ......
}
但这样做只能通过按电源按键唤醒,USB被完全屏蔽。根据那位大佬所说,第一个参数除了少数几个会影响睡眠的硬件之外,其他的都是0x69,所以我先改了第一个参数。但经过数次改动实验之后发现,并不能解决问题。所以我主要改了第二个参数。

首先在终端用log show -style syslog | grep "Wake reason"看唤醒的硬件是啥(我的是XHC,USB总线),然后在DSDT中搜Device (XHC),在里面找到_PRW方法。
一开始我把第二个参数全改成了和后面一样的0x04,依旧没解决问题。知道我看到了另一个方法:
Method (_S0W, 0, NotSerialized)  // _S0W: S0 Device Wake State
            {
                If (LEqual (XFLT, Zero))
                {
                    Return (Zero)
                }
                Else
                {
                    Return (0x03)
                }
            }

看到后面的注释我觉得我可能找对了地方。既然这个方法决定设备唤醒状态,还有熟悉的if else语句......既然一个参数不行那就换另一个......然后就成了???虽然一直以为0x00会无法唤醒,但事实上现在不仅可以睡眠,甚至还可以用鼠标键盘唤醒。


不太确定是不是每一个硬件都有_S0W方法,是不是都有这样判断语句,也不知道是不是运气好......但是我确实搞定了两个阻止睡眠的硬件,一个是XHC,另一个是HDEF(似乎是音频有关)。这个是原来的:
            Name (_S0W, 0x03)  // _S0W: S0 Device Wake State
            ......
            Method (_PRW, 0, NotSerialized)  // _PRW: Power Resources for Wake
            {
                Return (GPRW (0x6D, 0x04))
            }

把第二个参数改成0x03就解决了问题。
不知道这个方法能不能适用所有的电脑,希望有大佬帮忙试试,感谢。
1

查看全部评分

Rank: 9

UID
750326
帖子
4537
PB币
3278
贡献
0
技术
102
活跃
2894
沙发
发表于 2019-5-17 08:44:17 IP属地四川 |只看该作者
就喜欢这种探索精神

Rank: 5Rank: 5Rank: 5

UID
4634221
帖子
690
PB币
872
贡献
0
技术
0
活跃
1239
板凳
发表于 2019-5-17 08:48:43 IP属地广东 |只看该作者
有空我也开机试试看看

Rank: 2Rank: 2

UID
4824605
帖子
391
PB币
614
贡献
0
技术
1
活跃
779
4F
发表于 2019-5-17 10:41:10 IP属地湖北 |只看该作者
楼主可以参考下我之前发的评论:https://bbs.pcbeta.com/forum.php? ... ight=USB&page=4

Rank: 2Rank: 2

UID
4849749
帖子
357
PB币
815
贡献
0
技术
0
活跃
586
5F
发表于 2019-5-17 11:05:23 IP属地未知 来自手机 |只看该作者
xc233 发表于 2019-5-17 10:41
楼主可以参考下我之前发的评论:https://bbs.pcbeta.com/forum.php?mod=viewthread&tid=1795909&extra=&high ...

感谢,之前说的就是这个帖子……寒假的时候做的实验,但只看懂了注释,参数传递一头雾水完全没懂,后来就一直没研究了……

Rank: 2Rank: 2

UID
4849749
帖子
357
PB币
815
贡献
0
技术
0
活跃
586
6F
发表于 2019-5-17 13:04:29 IP属地江西 |只看该作者
xc233 发表于 2019-5-17 10:41
楼主可以参考下我之前发的评论:https://bbs.pcbeta.com/forum.php?mod=viewthread&tid=1795909&extra=&high ...

课上仔细看了一下我的DSDT,比较尴尬的是没找到_L6D这个方法,估计也是如你所说直接Notify(XHC,0x02)了,但是现在却可以正常睡眠,同时使用usb键鼠唤醒。不知道你能不能帮我看一下,有没有研究价值......

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

Rank: 2Rank: 2

UID
2435757
帖子
57
PB币
0
贡献
0
技术
0
活跃
258
7F
发表于 2019-5-17 13:07:31 IP属地湖北 来自手机 |只看该作者
mark一下,学习

Rank: 2Rank: 2

UID
4824605
帖子
391
PB币
614
贡献
0
技术
1
活跃
779
8F
发表于 2019-5-18 18:19:37 IP属地湖北 |只看该作者
zty199 发表于 2019-5-17 13:04
课上仔细看了一下我的DSDT,比较尴尬的是没找到_L6D这个方法,估计也是如你所说直接Notify(XHC,0x02)了, ...

你确定你电脑确实是进入了深度睡眠?

Rank: 5Rank: 5Rank: 5

UID
4080033
帖子
631
PB币
84
贡献
0
技术
14
活跃
736
9F
发表于 2019-5-18 19:02:27 IP属地山东 |只看该作者
就喜欢这种探索精神

Rank: 2Rank: 2

UID
4849749
帖子
357
PB币
815
贡献
0
技术
0
活跃
586
10F
发表于 2019-5-18 21:18:03 IP属地江苏 来自手机 |只看该作者
xc233 发表于 2019-5-18 18:19
你确定你电脑确实是进入了深度睡眠?

额,风扇停转,只有电源灯闪,硬盘应该也停了。和windows睡眠一样的。不知道算不算深度睡眠?

Rank: 7Rank: 7Rank: 7

UID
4583288
帖子
2267
PB币
1640
贡献
0
技术
1
活跃
3175
11F
发表于 2019-5-18 21:25:14 IP属地湖北 |只看该作者
感谢分享!

Rank: 5Rank: 5Rank: 5

UID
4834339
帖子
1006
PB币
1231
贡献
0
技术
10
活跃
811
12F
发表于 2019-5-18 22:29:29 IP属地广东 |只看该作者
我是采用第一种方式的,只能用开机键唤醒

Rank: 2Rank: 2

UID
4787590
帖子
299
PB币
466
贡献
0
技术
0
活跃
444
13F
发表于 2019-5-27 19:19:32 IP属地四川 |只看该作者
到底改哪儿啊,_PRW还是S0W啊

Rank: 2Rank: 2

UID
3282478
帖子
425
PB币
384
贡献
0
技术
0
活跃
409
14F
发表于 2019-5-28 08:09:49 IP属地河南 |只看该作者
mark一下,学习

Rank: 2Rank: 2

UID
4787590
帖子
299
PB币
466
贡献
0
技术
0
活跃
444
15F
发表于 2019-5-28 09:05:44 IP属地四川 |只看该作者
一开始我把第二个参数全改成了和后面一样的0x04,依旧没解决问题。
把第二个参数改成0x03就解决了问题。

能否详细说明修改哪个方法,怎么修改,变更前后插图对比,说实话,我没看懂你到底是修改S0W还是修改了PRW

Rank: 2Rank: 2

UID
4849749
帖子
357
PB币
815
贡献
0
技术
0
活跃
586
16F
发表于 2019-5-31 17:46:26 IP属地江西 |只看该作者
帅来也 发表于 2019-5-28 09:05
能否详细说明修改哪个方法,怎么修改,变更前后插图对比,说实话,我没看懂你到底是修改S0W还是修改了P ...

修改的是_PRW方法,把return的第二个参数改了。修改的参数值可以参考_S0W或者_S3W类似的方法,里面有。
截图就不放了......因为更新了几次系统之后,参数不改甚至都可以正常睡眠唤醒,这可能是个玄学问题......

Rank: 2Rank: 2

UID
4711423
帖子
326
PB币
330
贡献
0
技术
0
活跃
993
17F
发表于 2019-6-2 18:26:23 IP属地四川 |只看该作者
所以可以使用热补丁的形式来完成嘛?

黑果晓白

Rank: 2Rank: 2

UID
4781823
帖子
204
PB币
308
贡献
0
技术
0
活跃
237
18F
发表于 2019-6-2 20:52:41 IP属地湖南 |只看该作者
就是喜欢这样的探索精神

Rank: 2Rank: 2

UID
4849749
帖子
357
PB币
815
贡献
0
技术
0
活跃
586
19F
发表于 2019-6-2 22:06:18 IP属地江苏 |只看该作者
1286603273 发表于 2019-6-2 18:26
所以可以使用热补丁的形式来完成嘛?

好像不行,热补丁好像是可以统一把这个_PRW删掉,但是每一个有问题的函数返回的参数值不一定一样,建议一个一个单独看看......或者就干脆删掉省事

Rank: 2Rank: 2

UID
4711423
帖子
326
PB币
330
贡献
0
技术
0
活跃
993
20F
发表于 2019-6-3 11:54:09 IP属地四川 来自手机 |只看该作者
zty199 发表于 2019-6-2 22:06
好像不行,热补丁好像是可以统一把这个_PRW删掉,但是每一个有问题的函数返回的参数值不一定一样,建议一 ...

我记得热补丁可以单独修理某一个位置的数据
回顶部
Copyright (C) 2005-2024 pcbeta.com, All rights reserved
Powered by Discuz!  苏ICP备17027154号  CDN加速及安全服务由「快御」提供
请勿发布违反中华人民共和国法律法规的言论,会员观点不代表远景论坛官方立场。
远景在线 | 远景论坛 | 苹果论坛 | Win11论坛 | Win10论坛 | Win8论坛 | Win7论坛 | WP论坛 | Office论坛