Win10论坛

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

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

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

搜索
查看: 89164|回复: 412

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

UID
1396546
帖子
4242
PB币
7838
贡献
0
技术
627
活跃
450
发表于 2011-10-25 02:45:44
本帖最后由 VIVXIX 于 2012-5-17 13:53 编辑
  1. http://bbs.pcbeta.com/viewthread-935509-1-1.html
复制代码
首先先感谢上面链接提供的电池kext。不过似乎很多人用了会五国(看下面)Y450的请跳到这个帖子
http://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的,已经验证有效果了,转到我单独发的另一个帖子http://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
谢谢,学习了,马上进行修改测试。

死苹果

Rank: 7Rank: 7Rank: 7

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

7周年庆典勋章

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

Rank: 2Rank: 2

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

Rank: 9

UID
1548294
帖子
2035
PB币
2487
贡献
0
技术
505
活跃
753

7周年庆典勋章

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

Rank: 9

UID
752499
帖子
4067
PB币
5329
贡献
0
技术
369
活跃
506

Win10先驱者

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

UID
1396546
帖子
4242
PB币
7838
贡献
0
技术
627
活跃
450
发表于 2011-10-25 11:04:14
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
楼主你太伟大了!!
为了电池驱动,看了半天dsdt的这部分电池代码,然后也不太懂- -
就是遇到了楼主的这些句子- -
太感谢了@!

Rank: 9

UID
752499
帖子
4067
PB币
5329
贡献
0
技术
369
活跃
506

Win10先驱者

发表于 2011-10-25 11:16:03
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
tmacyunn 发表于 2011-10-25 11:16
不会,刚在snow测试了断电后显示100%,然后是99%...应该是dsdt那里的问题,之前在hp那个帖子里面有看到。 ...

去掉循环数再看看?

。。。。。。。。。。。

Rank: 5Rank: 5Rank: 5

UID
269314
帖子
1100
PB币
9137
贡献
0
技术
0
活跃
418
发表于 2011-10-25 11:36:11
LION能用这个显示电量了?

UID
1396546
帖子
4242
PB币
7838
贡献
0
技术
627
活跃
450
发表于 2011-10-25 11:37:55
weizhifu 发表于 2011-10-25 11:36
LION能用这个显示电量了?

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

Rank: 9

UID
752499
帖子
4067
PB币
5329
贡献
0
技术
369
活跃
506

Win10先驱者

发表于 2011-10-25 11:49:24
本帖最后由 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
帖子
868
PB币
4890
贡献
0
技术
4
活跃
613
发表于 2011-10-25 11:52:00
我的直接把voodoobattery.kext去掉,再加上appleacpibatterymanager.kext,就能正常显示电量和时间了,系统概述那里的电池信息也正常

Rank: 7Rank: 7Rank: 7

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

UID
1396546
帖子
4242
PB币
7838
贡献
0
技术
627
活跃
450
发表于 2011-10-25 11:55:31
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
tmacyunn 发表于 2011-10-25 11:49
去掉了,还是显示的76%。而且发现断电后的计算时间比snow的要长一些。

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

Rank: 7Rank: 7Rank: 7

UID
515075
帖子
868
PB币
4890
贡献
0
技术
4
活跃
613
发表于 2011-10-25 12:02:52
VIVXIX 发表于 2011-10-25 11:55
因为你替换了那个AppleACPIplatform。

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

UID
1396546
帖子
4242
PB币
7838
贡献
0
技术
627
活跃
450
发表于 2011-10-25 12:10:47
seaforestlove 发表于 2011-10-25 12:02
确实是这样的,这个有什么害处没?

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

点评

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

自言自语

Rank: 2Rank: 2

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

这个怎么改啊?
回顶部
Copyright (C) 2005-2019 pcbeta.com, All rights reserved
Powered by Discuz!  苏ICP备17027154号
请勿发布违反中华人民共和国法律法规的言论,会员观点不代表远景论坛官方立场。
远景在线 | 远景论坛 | 苹果论坛 | Win10论坛 | Win8论坛 | Win7论坛 | WP论坛 | Office论坛 | 电脑硬件 | 安卓软件