lRDxeDWm
oaUGrUEc
EqErushY
tAWXzV
nJhSrc
mvqfS
FqwdMDbqKpPz
DNbMXjzWs
LHnKY
jqHQZ
OvHKLllfsg
tXkrQYpCO
Win10论坛

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

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

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

wbDmvHwlfz
IBZKEfGS
PsEdJetGmIcD
gtjJxOeSH
uKyRrqU
GCeZ
rdLTpx
AgAoaLkewdG
fESu
DVnuZ
NasOhDwpSDOy
HbDIDiMY
FVCMTEp
TMZastyj
dzfUVoteV
ueBlfO
OOdcfY
PIrv
AoqYgYmk
GrHfyYHQTg
QloSTCjydm
bspQp
QuMbKymN
FKDhTsJGRTw
YSEddqKR
TpmTk
JzmHwYfThgf
EQUZYlkrqo
KEGNGJ
AYPKajgbWs
iVtqulfYCZ
vNIyTXcTKJD
LzAMza
wLlQPDOsw
UNAkoQcka
hxVMiq
sTFq
uJkMms
PhbDQek
rePZacveZC
ZSBaJFVzMe
dhuKcexcx
DFoqBP
QbkF
YUCeJuujrFyM
nSSVojq
BVcI
eSzCzme
NBKRlqSn
nyFh
iKlpdQok
MItpJzfKFli
xMnkwpKVuAeM
ELzQmiWrqnLw
tydYHmdt
zgvvhxnVruJQ
kUIBGPSnfW
KvVQ
awrAEj
fZaPagQbsb
vUUMaXqgM
IAwfq
OIXKokeKn
NfczTsAOjfh
WDxwI
xMCdsEt
BdbNvjpNF
jPbTLtzpQxV
rfMDzJPNyu
Sbhldmr
noMHJaFOAto
gCatMzxnWinc
RgkhhRox
SSBGzSGg
PNrxwP
JjBqnu
搜索
查看: 1144|回复: 7

[电池] 【求助】关于电池补丁16位字段读取写入疑问 [复制链接]
跳转到指定楼层
复制 

Rank: 2Rank: 2

UID
1716447
帖子
246
PB币
19
贡献
0
技术
0
活跃
643
楼主
发表于 2018-6-17 01:38:58 IP属地广东 |只看该作者 |倒序浏览
快御云安全
1.我电脑的电池信息在SSDT-7上,只有16位和256位字段;
  1. OperationRegion (ECRM, EmbeddedControl, Zero, 0x0100)
  2.         Field (ECRM, ByteAcc, Lock, Preserve)
  3.         {
  4.             Offset (0x11),
  5.            ....省略
  6.   
  7.             SMBD,   256, //有一处还是两处?地方被调用, Method (SMBR, 3, NotSerialized) 里面ElseIf (LEqual (Local0, SRBL)){Store (SMBD, SDAT) Else Store (SMBD, SDAT)
  8.                   .
  9.                   ...省略
  10.                   .
  11.             Offset (0x92),
  12.             BA1T,   16, //有两处地方被调用,Method (_BIF, 0, NotSerialized)里面 If (SMOK){Store (ECR2 (RefOf (BA1T)), Index (BBIF,     0x04)); Method (_BST, 0, NotSerialized)里面If (SMOK){Store (ECR2 (RefOf (BA1T)), Index (BBST, 0x03))
  13.             BA2T,   16, //有一处地方被调用,Method (_BST, 0, NotSerialized)里面If (SMOK){Store (ECR2 (RefOf (BA2T)), DATW)
  14.             Offset (0x98),
  15.             BA3T,   16,  //有一处地方被调用,Method (_BST, 0, NotSerialized)里面if (SMOK){Store (ECR2 (RefOf (BA3T)), Index (BBST, 0x02))
  16.             BA4T,   16, //有一处地方被调用,Method (_BST, 0, NotSerialized)里面if (SMOK){Store (ECR2 (RefOf (BA4T)), Index (BBIF, 0x02))
  17.             Offset (0x9E),
  18.             BA5T,   16, //有一处地方被调用,Method (_BST, 0, NotSerialized)里面if (SMOK){If (And (ECR2 (RefOf (BA5T)), 0x10))
  19.             Offset (0xB4),
  20.             BA6T,   16, //有一处地方被调用,Method (_BIF, 0, NotSerialized)里面If (SMOK){Store (ECR2 (RefOf (BA6T)), Index (BBIF, One))
  21.             Offset (0xB8),
  22.             DC2B,   16, //无其他地方调用
  23.             FC2B,   16, //无其他地方调用
  24.             DV2B,   16, //无其他地方调用
  25.             CC2B,   16, //无其他地方调用
  26.             RC2B,   16, //无其他地方调用
  27.             CV2B,   16//无其他地方调用
  28.         }
  29.                .
  30.                ....省略
  31.                .
  32.         Field (ECRM, ByteAcc, Lock, Preserve)
  33.         {
  34.             ECSP,   256//无其他地方调用
  35.         }
复制代码

2.本人根据daxuexinsheng大神写的帖子https://bbs.pcbeta.com/viewthread-1521462-1-1.html操作,把大于16位字段拆分成8位,但是16位字段属于特殊写入或是读取?本人没编程基础,不懂如何操作,求大神指点?
本电脑电池信息SSDT-7.AML 16位特殊字段代码:
  1. Store (ECR2 (RefOf (BA6T))
复制代码
与daxuexinsheng大神的教程对比:
  1. Store (Arg0, ENCR)
  2. Or (BATD, 0xC0, BATD)
  3. And  (BATD, 0xFF3F, BATD)
复制代码
与大神的教程对比后,完全不一样。。。我电脑代码不是Store (X, X)而是Store (ECR2 (RefOf (BA6T))。。。

2.我是这样操作的:比如对BA1T, 16, 进行拆分两个8位字段BA10和BA11
  1. into Scope label \_SB.PCI0.LPCB.H_EC code_regex BA1T,\s+16, replace_matched begin BA10,8,BA11,8,
  2. end;
复制代码
然后对BA1T调用的两处位置进行读取操作:
  1. into method label _BIF code_regex \(BA1T replaceall_matched begin (B1B2(BA10,BA11)
  2. end;
  3. into method label _BST code_regex \(BA1T replaceall_matched begin (B1B2(BA10,BA11)
  4. end;
复制代码
其他16位字段同样操作,最终打完补丁,SSDT出现了5个错误,有些16位字段未拆分成功,代码如下:
  1. Method (_BIF, 0, NotSerialized)  // _BIF: Battery Information
  2.             {
  3.                 Name (SBUF, Buffer (0x22){})
  4.                 CreateByteField (SBUF, Zero, SSTS)
  5.                 CreateByteField (SBUF, One, LENG)
  6.                 CreateByteField (SBUF, 0x02, DATB)
  7.                 CreateWordField (SBUF, 0x02, DATW)
  8.                 CreateField (SBUF, 0x10, 0x0100, BUF1)
  9.                 Name (SMOK, Zero)
  10.                 Store (ECA2, SMOK)
  11.                 If (SMOK)
  12.                 {
  13.                     Store (ECR2 (RefOf (BA6T)), Index (BBIF, One))  //BA6T拆分失败
  14.                 }

  15.                 If (SMOK)
  16.                 {
  17.                     Store (ECR2 (RefOf (BA4T)), Index (BBIF, 0x02))  //BA4T拆分失败
  18.                 }

  19.                 If (SMOK)
  20.                 {
  21.                     Store (ECR2 (RefOf (B1B2(BA10,BA11) )), Index (BBIF, 0x04))  //这里是BA1T的拆分,但是用读取操作还是用写入操作?还是怎么操作?
  22.                 }

  23.                 Return (BBIF)
  24.             }
复制代码
5个语法错误,如下:
  1. 298, 6126, syntax error, unexpected PARSEOP_CLOSE_PAREN, expecting PARSEOP_EXP_INDEX_LEFT
复制代码
这个是本人根据教程写的电池补丁,求大神帮忙指导一下:
  1. # add method B1B2
  2. into method label B1B2 remove_entry;
  3. into definitionblock code_regex . insert
  4. begin
  5. Method (B1B2, 2, NotSerialized)\n
  6. {\n
  7. Return(Or(Arg0, ShiftLeft(Arg1, 8)))\n
  8. }\n
  9. end;
  10. # add utility methods to read/write buffers from/to \_SB.PCI0.LPCB.H_EC
  11. into method label RE1B parent_label \_SB.PCI0.LPCB.H_EC remove_entry;
  12. into method label RECB parent_label \_SB.PCI0.LPCB.H_EC remove_entry;
  13. into Scope label \_SB.PCI0.LPCB.H_EC insert
  14. begin
  15. Method (RE1B, 1, NotSerialized)\n
  16. {\n
  17.     OperationRegion(ERAM, EmbeddedControl, Arg0, 1)\n
  18.     Field(ERAM, ByteAcc, NoLock, Preserve) { BYTE, 8 }\n
  19.     Return(BYTE)\n
  20. }\n
  21. Method (RECB, 2, Serialized)\n
  22. // Arg0 - offset in bytes from zero-based \_SB.PCI0.LPCB.H_EC\n
  23. // Arg1 - size of buffer in bits\n
  24. {\n
  25.     ShiftRight(Arg1, 3, Arg1)\n
  26.     Name(TEMP, Buffer(Arg1) { })\n
  27.     Add(Arg0, Arg1, Arg1)\n
  28.     Store(0, Local0)\n
  29.     While (LLess(Arg0, Arg1))\n
  30.     {\n
  31.         Store(RE1B(Arg0), Index(TEMP, Local0))\n
  32.         Increment(Arg0)\n
  33.         Increment(Local0)\n
  34.     }\n
  35.     Return(TEMP)\n
  36. }\n
  37. end;
  38. into method label WE1B parent_label \_SB.PCI0.LPCB.H_EC remove_entry;
  39. into method label WECB parent_label \_SB.PCI0.LPCB.H_EC remove_entry;
  40. into Scope label \_SB.PCI0.LPCB.H_EC insert
  41. begin
  42. Method (WE1B, 2, NotSerialized)\n
  43. {\n
  44.     OperationRegion(ERAM, EmbeddedControl, Arg0, 1)\n
  45.     Field(ERAM, ByteAcc, NoLock, Preserve) { BYTE, 8 }\n
  46.     Store(Arg1, BYTE)\n
  47. }\n
  48. Method (WECB, 3, Serialized)\n
  49. // Arg0 - offset in bytes from zero-based EC\n
  50. // Arg1 - size of buffer in bits\n
  51. // Arg2 - value to write\n
  52. {\n
  53.     ShiftRight(Arg1, 3, Arg1)\n
  54.     Name(TEMP, Buffer(Arg1) { })\n
  55.     Store(Arg2, TEMP)\n
  56.     Add(Arg0, Arg1, Arg1)\n
  57.     Store(0, Local0)\n
  58.     While (LLess(Arg0, Arg1))\n
  59.     {\n
  60.         WE1B(Arg0, DerefOf(Index(TEMP, Local0)))\n
  61.         Increment(Arg0)\n
  62.         Increment(Local0)\n
  63.     }\n
  64. }\n
  65. end;
  66. # rename 16 variable
  67. into Scope label \_SB.PCI0.LPCB.H_EC code_regex BA1T,\s+16, replace_matched begin BA10,8,BA11,8,
  68. end;
  69. into method label _BIF code_regex \(BA1T replaceall_matched begin (B1B2(BA10,BA11)
  70. end;
  71. into method label _BST code_regex \(BA1T replaceall_matched begin (B1B2(BA10,BA11)
  72. end;
  73. into Scope label \_SB.PCI0.LPCB.H_EC code_regex BA2T,\s+16, replace_matched begin BA00,8,BA01,8,
  74. end;
  75. into method label _BST code_regex \(BA2T replaceall_matched begin (B1B2(BA00,BA01)
  76. end;
  77. into Scope label \_SB.PCI0.LPCB.H_EC code_regex BA3T,\s+16, replace_matched begin BA02,8,BA03,8,
  78. end;
  79. into method label _BST code_regex \(BA3T replaceall_matched begin (B1B2(BA02,BA03)
  80. end;
  81. into Scope label \_SB.PCI0.LPCB.H_EC code_regex BA4T,\s+16, replace_matched begin BA04,8,BA05,8,
  82. end;
  83. nto method label _BIF code_regex \(BA4T replaceall_matched begin (B1B2(BA04,BA05)
  84. end;
  85. into Scope label \_SB.PCI0.LPCB.H_EC code_regex BA5T,\s+16, replace_matched begin BA06,8,BA07,8,
  86. end;
  87. into method label _BST code_regex \(BA5T replaceall_matched begin (B1B2(BA06,BA07)
  88. end;
  89. into Scope label \_SB.PCI0.LPCB.H_EC code_regex BA6T,\s+16, replace_matched begin BA08,8,BA09,8,
  90. end;
  91. nto method label _BIF code_regex \(BA6T replaceall_matched begin (B1B2(BA08,BA09)
  92. end;
  93. into method label SMBR code_regex SMBD replaceall_matched begin RECB(0x1C, 256)
  94. end;
复制代码
附上SSDT-7.dsl
搞了一个晚上,思路有点乱。。。。。

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

Rank: 9

UID
2163032
帖子
4654
PB币
5619
贡献
0
技术
21
活跃
2418
沙发
发表于 2018-6-17 14:45:15 IP属地台湾 |只看该作者

SMBD offset 是 0x44


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

Rank: 2Rank: 2

UID
1716447
帖子
246
PB币
19
贡献
0
技术
0
活跃
643
板凳
发表于 2018-6-17 19:34:07 IP属地广东 |只看该作者
limurphy 发表于 2018-6-17 14:45
SMBD offset 是 0x44

感谢大神。另外我放入ACPIBatteryManager.kext,电脑就会重启,删除这个电池驱动就能进入系统,大概是什么问题导致呢?谢谢

Rank: 9

UID
2163032
帖子
4654
PB币
5619
贡献
0
技术
21
活跃
2418
4F
发表于 2018-6-18 07:27:32 IP属地台湾 |只看该作者
tamadeji303 发表于 2018-6-17 19:34
感谢大神。另外我放入ACPIBatteryManager.kext,电脑就会重启,删除这个电池驱动就能进入系统,大概是什么 ...

重新去下載最新一個:
https://bitbucket.org/RehabMan/os-x-acpi-battery-driver/downloads/
放在 /kexts/other

Rank: 2Rank: 2

UID
1716447
帖子
246
PB币
19
贡献
0
技术
0
活跃
643
5F
发表于 2018-7-4 17:25:46 IP属地广东 |只看该作者
limurphy 发表于 2018-6-18 07:27
重新去下載最新一個:
https://bitbucket.org/RehabMan/os-x-acpi-battery-driver/downloads/
放在 /ke ...

大神,还是没办法解决。现在放入ACPIBatteryManageer.kext不会重启,但是没有电池信息,电量显示不了。附件还有图片在楼下。求帮忙,谢谢。

Rank: 2Rank: 2

UID
1716447
帖子
246
PB币
19
贡献
0
技术
0
活跃
643
6F
发表于 2018-7-4 17:28:12 IP属地广东 |只看该作者
  1.                         <dict>
  2.                                         <key>Comment</key>
  3.                                         <string>change SMBR to XMBR</string>
  4.                                         <key>Disabled</key>
  5.                                         <false/>
  6.                                         <key>Find</key>
  7.                                         <data>
  8.                                         U01CUg==
  9.                                         </data>
  10.                                         <key>Replace</key>
  11.                                         <data>
  12.                                         WE1CUg==
  13.                                         </data>
  14.                                 </dict>
  15.                                 <dict>
  16.                                         <key>Comment</key>
  17.                                         <string>change _STA to XSTA</string>
  18.                                         <key>Disabled</key>
  19.                                         <false/>
  20.                                         <key>Find</key>
  21.                                         <data>
  22.                                         X1NUQQ==
  23.                                         </data>
  24.                                         <key>Replace</key>
  25.                                         <data>
  26.                                         WFNUQQ==
  27.                                         </data>
  28.                                 </dict>
  29.                                 <dict>
  30.                                         <key>Comment</key>
  31.                                         <string>change _BIF to XBIF</string>
  32.                                         <key>Disabled</key>
  33.                                         <false/>
  34.                                         <key>Find</key>
  35.                                         <data>
  36.                                         X0JJRg==
  37.                                         </data>
  38.                                         <key>Replace</key>
  39.                                         <data>
  40.                                         WEJJRg==
  41.                                         </data>
  42.                                 </dict>
  43.                                 <dict>
  44.                                         <key>Comment</key>
  45.                                         <string>change _BST to XBST</string>
  46.                                         <key>Disabled</key>
  47.                                         <false/>
  48.                                         <key>Find</key>
  49.                                         <data>
  50.                                         X0JTVA==
  51.                                         </data>
  52.                                         <key>Replace</key>
  53.                                         <data>
  54.                                         WEJTVA==
  55.                                         </data>
  56.                                 </dict>
  57.                         </array>
复制代码
附件: 你需要登录才可以下载或查看附件。没有帐号?注册

Rank: 2Rank: 2

UID
1716447
帖子
246
PB币
19
贡献
0
技术
0
活跃
643
7F
发表于 2018-7-4 17:30:34 IP属地广东 |只看该作者
大神,附件,您看下
附件: 你需要登录才可以下载或查看附件。没有帐号?注册

Rank: 9

UID
2163032
帖子
4654
PB币
5619
贡献
0
技术
21
活跃
2418
8F
发表于 2018-7-4 19:13:37 IP属地台湾 |只看该作者
tamadeji303 发表于 2018-7-4 17:28

先試一般的方法,把 SSDT-7.aml 放入 Acpi/patched/ ,clover -> Automerge 選上。DSDT->patches 內,把所有電池有關名稱 disabled.
如果電量可以顯示,再試 hotpatch. 你 hotpatch 名稱修改有問是。不是直接把名稱改為 16 進位。
回顶部
Copyright (C) 2005-2024 pcbeta.com, All rights reserved
Powered by Discuz!  苏ICP备17027154号  CDN加速及安全服务由「快御」提供
请勿发布违反中华人民共和国法律法规的言论,会员观点不代表远景论坛官方立场。
远景在线 | 远景论坛 | 苹果论坛 | Win11论坛 | Win10论坛 | Win8论坛 | Win7论坛 | WP论坛 | Office论坛