BIRldG
SUlM
YmPs
HsWcf
jmZDCLG
tauIrByHT
pGpdHWNmfwMj
JUZvRt
SZLsyBCABgd
blSTD
Win10论坛

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

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

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

vRGdjnPwD
CCbh
uGUE
ujZXT
DgEc
gqtCQXaaA
APobtryUvt
SDBtroC
vvQf
cpKl
fmdgVCrBm
faPIqvOLsbvT
BCpKpkYWTxD
XigcuSSlSEBQ
TvzK
uARhqJGDlq
iPMqSyJQslk
JxSLvKKRoOFF
cuKipqtMwk
sMbiaUpchO
cSXNedUdCVi
VnoZFsIo
gpQjK
PTEEGgSUJGu
ZIJRrRxIPIno
eTrtsiDKyX
dXKyEFnGSE
qcKdYcTTG
zlqdqFx
nPydLZMLM
LdjVhNG
htfrIyRZJs
qrxzR
uaWWE
tokKkYTHa
nQPthzuWsJ
BlOF
VgQTqr
iTjkq
WztrKkZ
iqvTY
RdFjKN
PEzqLre
Lgufer
Wfztql
XQhP
oIGVfPFsQT
GFgdPsvvIef
YxjZCSkWS
uFLvz
dugKmmVwe
vgEveBZju
rjoaCJ
urTjvx
DBvR
mUGbtSwpU
vXTqs
EAzIPYuW
LbpwZsIsGHby
搜索
查看: 90403|回复: 412

[教程] (重新修正)<Lion>dsdt之BAT修改 for AppleACPIBatteryManager.kext     [复制链接]

UID
1396546
帖子
4242
PB币
7837
贡献
0
技术
628
活跃
458
发表于 2011-10-25 02:45:44 IP属地四川
快御云安全
本帖最后由 VIVXIX 于 2012-5-17 13:53 编辑
  1. https://bbs.pcbeta.com/viewthread-935509-1-1.html
复制代码
首先先感谢上面链接提供的电池kext。不过似乎很多人用了会五国(看下面)Y450的请跳到这个帖子
https://bbs.pcbeta.com/viewthread-937628-1-1.html

不过如果使用上面链接提供的AppleACPIBatterManager.kext五国的话

请参照http://www.osx86.net/downloads.php?do=file&id=1498

请换用上面链接上下载的AppleACPIBatterManager.kext



为什么要那么辛苦折腾dsdt,主要是为了不去替换AppleACPIPlatform,
黑苹果完美和原则就是需要尽量少添加第三方kext,用原版的。
我个人还很排斥Voodoo的kext。给我的印象就是五国,五国,五国,还启动慢。
dsdt修改好后,只需下载上面链接里提供的AppleACPIBatterManager.kext,用回原版的AppleACPIPlatform,删除Voodoobattery即可,修复权限,重建缓存什么的。
Screen Shot 2011-10-25 at 2.53.00 AM.png

请勿使用多线程下载工具下载论坛附件!
Screen Shot 2011-10-25 at 2.52.47 AM.png

请勿使用多线程下载工具下载论坛附件!

Screen Shot 2011-10-25 at 2.54.01 AM.png

请勿使用多线程下载工具下载论坛附件!
Screen Shot 2011-10-25 at 12.42.08 PM.png

请勿使用多线程下载工具下载论坛附件!

我的修改方法用到自己写的一个method,发现部分dsdt可能在BAT时需要在其以外修改,因此

我决定把B1B2放到DTGP(修改过dsdt都知道这是什么)后面;也就是下面这样


  1. Method (DTGP, 5, NotSerialized)
  2. {
  3. 省略

  4. //如果有16bit的才使用来合并拆开的值   
  5. //B1B2(Arg0,Arg1) 把2个8bit合并成16bit, Arg1高8位,Arg0低位,
  6. Method (B1B2, 2, NotSerialized)
  7. {
  8.         Or (ShiftLeft(Arg1,0x08), Arg0, Local0)
  9.         Return (Local0)
  10. }
  11. //如果有32bit的才使用来合并拆开的值,否则无需添加这个。
  12. //更高的话也需要这个,下面的 Method (L1L4, 4, NotSerialized)会用到
  13. //B1B4(Arg0,Arg1Arg2,Arg3) 把4个8bit合并成32bit,Arg3是最高高8位,Arg0是最低低8位
  14. Method (B1B4, 4, NotSerialized)   
  15. {
  16.         Or (ShiftLeft(Arg1,0x08), Arg0, Local0)
  17.         Or (ShiftLeft(Arg2,0x10), Local0, Local0)
  18.         Or (ShiftLeft(Arg3,0x18), Local0, Local0)
  19.         Return (Local0)
  20. }
  21. //如果有128bit的才使用来合并拆开的值,更高的话也需要添加这个,
  22. //L1L4(Arg0,Arg1Arg2,Arg3) 把4个32bit合并成128bit,Arg3是最高高32位,Arg0是最低低32位
  23. Method (L1L4, 4, NotSerialized)//32*4=128
  24. {
  25.         Or (ShiftLeft(Arg1,0x20), Arg0, Local0)
  26.         Or (ShiftLeft(Arg2,0x40), Local0, Local0)
  27.         Or (ShiftLeft(Arg3,0x60), Local0, Local0)
  28.         Return (Local0)
  29. }
复制代码


(自己原创的,这样修改起来更简洁了)

Method (B1B2, 2, NotSerialized)

B1B2自己取自1 byte to 2 byte(8位到16位)的缩写

Method (B1B4, 4, NotSerialized)

B1B4自己取自1 byte to 4 byte(8位到32位)的缩写

Method (L1L4, 4, NotSerialized)

L1L4自己取自1 Long to 4 Long(32位到128位)的缩写

Method (D2D4, 4, NotSerialized)

D2D4自己取自2 double to 4doubel(128位到256位)的缩写



在Device (BAT0)或者Device (BAT1)里(具体是0还是1,自己从IORegisterExplorer搜索BAT查看)

如下面这些,都在Method (_BIF      和Method (_BST里读取了,

有的人的Method (_BIF      和Method (_BST非常简洁,实际是里面再调用别的

Method ,如有的ECG9() ,UPBI()、IVBI()、IVBI()、UPBS()、IVBS() 、IVBS() 诸如此类的调用,

就再搜索 ,寻找要修改的16bit值,实际最终修改方法还是类似的。

具体你得每一个搜索一下,不断next来查看它出现的所有位置,

若是定义成16bit,就需要拆开若是则需要拆成两个8bit的;

这只是我的是如此,不同机子,名字具体的名字是不一样的。

  1.                          //BPV0,   16,
  2.                         //BDC0,   16,
  3.                         //BFC0,   16,
  4.                         //BAC0,   16,
复制代码


上面这些都发现出现在 在Device (EC0) 的 (ERAM, ByteAcc, Lock, Preserve)下(个人自己的得具体看)

    要拆成两个8bit的;注一律改B为S,避免冲突(//是注释掉原来的)

  1.                       //BPV0,   16,
  2.                         SPV0,   8,
  3.                         SPV1,   8,

  4.                         //BDC0,   16,
  5.                         SDC0,   8,
  6.                         SDC1,   8,
  7.                         //BFC0,   16,
  8.                         SFC0,   8,
  9.                         SFC1,   8,  

  10.                         //BAC0,   16,
  11.                         SAC0,   8,
  12.                         SAC1,   8,
复制代码

具体形式的修改例子,你的dsdt里不一定出现这样的形式,只是给个参考

,注意我都用到了我前面自己增加的一个方法

Method (B1B2Method (B1B4,Method (B4BF

里面的参数顺序不能乱,参见前面。

(一)常见的

1.Store (^^EC0.BAC0, Local5)

  1. //Store (^^EC0.BAC0, Local5)
  2. Store (B1B2(^^EC0.SAC0,^^EC0.SAC1), Local5)
复制代码

2.Store (^^EC0.BDC0, Index (STAT, One))    (很多人是这种形式的)

  1. //Store (^^EC0.BDC0, Index (STAT, One))
  2. Store (B1B2(^^EC0.SDC0,^^EC0.SDC1), Index (STAT, One))
复制代码
3.Multiply (BGU1, BFC1 ,Local2)
  1.     //Multiply (BGU1, BFC1 ,Local2)
  2.         Multiply (BGU1, B1B2 (BFC0, BFC1), Local2)
复制代码


(二)特殊的

3.If (^^EC0.BDC0 )

  1. //If (^^EC0.BDC0 )
  2. If (B1B2(^^EC0.SDC0,^^EC0.SDC1))
复制代码

4.If (LGreater (^^EC0.BAC0, 0xFB00))

  1. //If (LGreater (^^EC0.BAC0, 0xFB00))
  2. If (LGreater (B1B2(^^EC0.SAC0,^^EC0.SAC1), 0xFB00)
复制代码

5.Store (^^EC0.BDC0, BFC1)           这个更特殊,^^EC0.BDC0和BFC1都是16bit的,因此需要同时处理
  1. //Store (^^EC0.BDC0, BFC1)  
  2. Store (^^EC0.SDC1, BFC1)
  3. Sleep (0x14)
  4. Store (^^EC0.SDC0, BFC0)
复制代码


上面只是一些你可能遇到需要修改的形式,下面才是我自己的完整修改例子。

但不同机子,dsdt里的修改的具体名字是有区别的,方法是类似的。所以仅供参考。

(一)Method (_BIF 下

0.BFC1

要特别拿出来说     Store (^^EC0.BDC0, BFC1)

搜索BFC1会发现它的定义似乎有两个地方,一个EC0下和下面提到的一样,

但仔细会发现这个Store (^^EC0.BDC0, BFC1)里的BFC1并不是EC0下的,否则应该用^^EC0.BFC1来访问

而另一处在Field (GNVS, AnyAcc, Lock, Preserve)下,这才是要修改的地方。

  1. //BFC1,   16,  
  2. BFC0,   8,
  3. BFC1,   8,


  4. //Store (^^EC0.BDC0, BFC1)(这个同时要改BDC0)
  5. Store (^^EC0.SDC1, BFC1)
  6. Sleep (0x14)
  7. Store (^^EC0.SDC0, BFC0)


  8. //If (BFC1)
  9. If (B1B2(BFC0,BFC1))


  10. // Multiply (BGU1,BFC1, Local2)
  11. Multiply (BGU1, B1B2(BFC0,BFC1), Local2)
复制代码


1.BFC0

  1. //BFC0,   16,
  2. SFC0,   8
  3. SFC1,   8,


  4. //Store (^^EC0.BFC0, Local0)
  5. Store (B1B2(^^EC0.SFC0,^^EC0.SFC1), Local0)


  6. //Store (^^EC0.BFC0, Local2)
  7. Store (B1B2(^^EC0.SFC0,^^EC0.SFC1), Local2)
复制代码


2.BDC0
  1. //BDC0,   16,
  2. SDC0,   8,
  3. SDC1,   8,

  4. Store (^^EC0.SDC1, BFC1)
  5. Sleep (0x14)
  6. Store (^^EC0.SDC0, BFC0)
复制代码




(二)Method (_BST

1.BPV0

  1. //BPV0,   16,
  2. SPV0,   8,
  3. SPV1,   8,


  4. //Store (^^EC0.BPV0, Local3)
  5. Store (B1B2(^^EC0.SPV0,^^EC0.SPV1), Local3)
复制代码


2.BAC0

  1. //BAC0,   16,
  2. SAC0,   8,
  3. SAC1,   8,

  4. //If (LGreater (^^EC0.BAC0, 0xFB00))
  5. If (LGreater (B1B2(^^EC0.SAC0,^^EC0.SAC1), 0xFB00))

  6. //Store (^^EC0.BAC0, Local5)
  7. Store (B1B2(^^EC0.SAC0,^^EC0.SAC1), Local5)
复制代码




原版10.7.2用的1.4版AppleACPIPlatform.kext

AppleACPIPlatform.kext.zip (441.84 KB, 下载次数: 658)
成功的例子

0.DefinitionBlock ("dsdt.aml", "DSDT", 2, "LENOVO", "CB-01   ", 0x00000001)
dsdt.aml.zip (11.91 KB, 下载次数: 460) 我自己使用的
1.DefinitionBlock ("dsdt.aml", "DSDT", 1, "HPQOEM", "SLIC-MPC", 0x00000001)
dsdt.aml.zip (18.13 KB, 下载次数: 113)
2.efinitionBlock ("dsdt.aml", "DSDT", 1, "ACRSYS", "ACRPRDCT", 0x00000001)
dsdt.aml.zip (16.78 KB, 下载次数: 74)
3.DefinitionBlock ("dsdt.aml", "DSDT", 2, "LENOVO", "CB-01   ", 0x00000001)
dsdt.aml.zip (11.72 KB, 下载次数: 81)
4.DefinitionBlock ("dsdt.aml", "DSDT", 2, "INTEL ", "CRESTLNE", 0x06040000)
dsdt.aml.zip (11.37 KB, 下载次数: 55)
5.DefinitionBlock ("dsdt.aml", "DSDT", 2, "LENOVO", "CB-01   ", 0x06040000)
dsdt.dsl.zip (33.24 KB, 下载次数: 157) 这个Y450的,已经验证有效果了,转到我单独发的另一个帖子https://bbs.pcbeta.com/viewthread-937628-1-1.html
6.gateway nv57 miziho 328楼上传 dsdt.zip (17.87 KB, 下载次数: 38)
请换用上面链接上下载的AppleACPIBatterManager.kext












25

查看全部评分

无QQ,需要交流的,求送一个7位QQ。哈哈!

Rank: 5Rank: 5Rank: 5

UID
666707
帖子
918
PB币
5415
贡献
0
技术
10
活跃
14
发表于 2011-10-25 06:44:04 IP属地江苏
谢谢,学习了,马上进行修改测试。

死苹果

Rank: 7Rank: 7Rank: 7

UID
720449
帖子
596
PB币
301
贡献
0
技术
33
活跃
74

7周年庆典勋章

发表于 2011-10-25 06:44:44 IP属地贵州
  支持,希望楼主进一步完善!

Rank: 2Rank: 2

UID
587128
帖子
245
PB币
2506
贡献
0
技术
20
活跃
7
发表于 2011-10-25 08:29:11 IP属地上海
谢谢楼主,学习了,还得再研究研究。

Rank: 9

UID
1548294
帖子
2035
PB币
1496
贡献
0
技术
505
活跃
784

7周年庆典勋章

发表于 2011-10-25 08:42:18 IP属地安徽
能不能帮我的看看。我没看懂。 dcpdsdt.zip (38.5 KB, 下载次数: 6)

Rank: 9

UID
752499
帖子
4067
PB币
5319
贡献
0
技术
369
活跃
526

Win10先驱者

发表于 2011-10-25 10:15:45 IP属地海南
不错, 那个IF的部分我也有,不知道该怎么改好。多谢,不过楼主有测试过断电后的显示么?我试了下断电后电池直接掉到了76%。

UID
1396546
帖子
4242
PB币
7837
贡献
0
技术
628
活跃
458
发表于 2011-10-25 11:04:14 IP属地四川
tmacyunn 发表于 2011-10-25 10:15
不错, 那个IF的部分我也有,不知道该怎么改好。多谢,不过楼主有测试过断电后的显示么?我试了下断电后电池 ...

断电还没测试,你看看win下是否也直接掉电76%

Rank: 2Rank: 2

UID
1577236
帖子
176
PB币
1484
贡献
0
技术
2
活跃
116
发表于 2011-10-25 11:11:43 IP属地北京
楼主你太伟大了!!
为了电池驱动,看了半天dsdt的这部分电池代码,然后也不太懂- -
就是遇到了楼主的这些句子- -
太感谢了@!

Rank: 9

UID
752499
帖子
4067
PB币
5319
贡献
0
技术
369
活跃
526

Win10先驱者

发表于 2011-10-25 11:16:03 IP属地海南
VIVXIX 发表于 2011-10-25 11:04
断电还没测试,你看看win下是否也直接掉电76%

不会,刚在snow测试了断电后显示100%,然后是99%...应该是dsdt那里的问题,之前在hp那个帖子里面有看到。应该是计算公式的问题。

Rank: 2Rank: 2

UID
1519221
帖子
340
PB币
89
贡献
0
技术
0
活跃
4
发表于 2011-10-25 11:33:11 IP属地浙江
tmacyunn 发表于 2011-10-25 11:16
不会,刚在snow测试了断电后显示100%,然后是99%...应该是dsdt那里的问题,之前在hp那个帖子里面有看到。 ...

去掉循环数再看看?

。。。。。。。。。。。

Rank: 5Rank: 5Rank: 5

UID
269314
帖子
1100
PB币
9219
贡献
0
技术
0
活跃
701
发表于 2011-10-25 11:36:11 IP属地广西
LION能用这个显示电量了?

UID
1396546
帖子
4242
PB币
7837
贡献
0
技术
628
活跃
458
发表于 2011-10-25 11:37:55 IP属地四川
weizhifu 发表于 2011-10-25 11:36
LION能用这个显示电量了?

没错。。。。。。。。。。。。。

Rank: 9

UID
752499
帖子
4067
PB币
5319
贡献
0
技术
369
活跃
526

Win10先驱者

发表于 2011-10-25 11:49:24 IP属地海南
本帖最后由 tmacyunn 于 2011-10-25 11:50 编辑
z6will 发表于 2011-10-25 11:33
去掉循环数再看看?

去掉了,还是显示的76%。而且发现断电后的计算时间比snow的要长一些。 Screen Shot 2011-10-25 at 11.51.09 AM.png

请勿使用多线程下载工具下载论坛附件!



Rank: 7Rank: 7Rank: 7

UID
515075
帖子
869
PB币
4864
贡献
0
技术
4
活跃
758
发表于 2011-10-25 11:52:00 IP属地北京
我的直接把voodoobattery.kext去掉,再加上appleacpibatterymanager.kext,就能正常显示电量和时间了,系统概述那里的电池信息也正常

Rank: 7Rank: 7Rank: 7

UID
515075
帖子
869
PB币
4864
贡献
0
技术
4
活跃
758
发表于 2011-10-25 11:53:52 IP属地北京
就是从电池切换到交流电计算充电时间,从交流电切换到电池计算放电时间,这两项计算需花较长时间

UID
1396546
帖子
4242
PB币
7837
贡献
0
技术
628
活跃
458
发表于 2011-10-25 11:55:31 IP属地四川
seaforestlove 发表于 2011-10-25 11:52
我的直接把voodoobattery.kext去掉,再加上appleacpibatterymanager.kext,就能正常显示电量和时间了,系统 ...

因为你替换了那个AppleACPIplatform。

Rank: 2Rank: 2

UID
1519221
帖子
340
PB币
89
贡献
0
技术
0
活跃
4
发表于 2011-10-25 11:56:12 IP属地浙江
tmacyunn 发表于 2011-10-25 11:49
去掉了,还是显示的76%。而且发现断电后的计算时间比snow的要长一些。

尝试在最原始的DSDT上进行修改,如果还是有这个问题,可能需要再仔细研究下了,EC0下有两组寄存器,不太记得是否和另外一组相关

Rank: 7Rank: 7Rank: 7

UID
515075
帖子
869
PB币
4864
贡献
0
技术
4
活跃
758
发表于 2011-10-25 12:02:52 IP属地北京
VIVXIX 发表于 2011-10-25 11:55
因为你替换了那个AppleACPIplatform。

确实是这样的,这个有什么害处没?

UID
1396546
帖子
4242
PB币
7837
贡献
0
技术
628
活跃
458
发表于 2011-10-25 12:10:47 IP属地四川
seaforestlove 发表于 2011-10-25 12:02
确实是这样的,这个有什么害处没?

谁知道,反正修改替换添加的kext,越少越好

点评

z6will  这个不尽然,最佳的情况是找到最合适硬件的kext,同时又能保障系统稳定的运行。 但替换老版本的kext,一般而言,确实不是一个明智的方法,毕竟很有可能影响系统的运作。  发表于 2011-10-25 12:15 IP属地浙江

自言自语

Rank: 2Rank: 2

UID
1361564
帖子
309
PB币
641
贡献
0
技术
9
活跃
9
发表于 2011-10-25 12:22:23 IP属地四川
Store (^^EC0.BFC0, Index (PBIF, 0x02))

这个怎么改啊?
回顶部
Copyright (C) 2005-2024 pcbeta.com, All rights reserved
Powered by Discuz!  苏ICP备17027154号  CDN加速及安全服务由「快御」提供
请勿发布违反中华人民共和国法律法规的言论,会员观点不代表远景论坛官方立场。
远景在线 | 远景论坛 | 苹果论坛 | Win11论坛 | Win10论坛 | Win8论坛 | Win7论坛 | WP论坛 | Office论坛