Win10论坛

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

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

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

搜索
查看: 11848|回复: 134

[教程] 暗影精灵2笔记本 黑苹果导致电池问题 [复制链接]

Rank: 5Rank: 5Rank: 5

UID
1619547
帖子
437
PB币
116
贡献
0
技术
1
活跃
655
发表于 2016-7-20 08:32:49 |显示全部楼层
本帖最后由 794767404 于 2017-8-30 17:42 编辑

问题:暗影精灵2笔记本,安装OSX/MacOS后电池电量不变动,接通电源不充电。


配置:
cpu:i5-6300hq
集显:Intel(R) HD Graphics 530
独显GTX960M
主板:惠普8257
补充:因为DSDT未打补丁进MacOS会导致电池异常,所以下面第二步打补丁可以在重置电池前做;或者在Windows下装虚拟机,在虚拟机里打补丁.



解决方案:
第一步:重置电池状态(没有出现电量异常的可以跳过这骤)有三种方法:
方法1、拔掉充电线,长按电源键超过15秒钟
方法2、通过拆机断开电池的电线

方法3、完全耗尽电池的电(耗至电脑完全开不了机)


完成之后不要进osx/macOS,而是进Win10。如果成功的话电池是恢复正常状态的(电量会变动,接通电源正常充电)

第二步:修改ACPI文件,有两种方法:
方法1.用HotPatch文件“SSDT-BATT.aml”并配置config.plist,配合ACPIBatteryManager.kext正常显示电量
(同机型推荐,方便)
将SSDT-BATT.aml放入EFI/ACPI/patched里,并修改config.plist
SortedOrder加入条目"SSDT-BATT.aml";
DSDT Patches里添加如下patch(具体见附件):
change ADJT to XDJT for Battery Hotpatch
change CLRI to XLRI for Battery Hotpatch
change UPBS to XPBS for Battery Hotpatch
change UPBI to XPBI for Battery Hotpatch
change _BST to XBST for Battery Hotpatch
change SMWR to XMWR for Battery Hotpatch
change SMRD to XMRD for Battery Hotpatch

方法2.修改DSDT文件,配合ACPIBatteryManager.kext正常显示电量:
下面的MacIASL补丁是我自己写的,我可以正常使用,如果有错还请大神纠正...
补丁1:经测试,导致电池电量不变的罪魁祸首就是这个ADJT Method.

  1. #Repalce ADJT method
  2. into method label ADJT remove_entry;
  3. into Device label ACEL insert
  4. begin
  5. Method (ADJT, 0, Serialized)\n
  6.                 {\n
  7.                     If (_STA ())\n
  8.                     {\n
  9.                         If (LEqual (^^LPCB.EC0.ECOK, One))\n
  10.                         {\n
  11.                             Store (^^LPCB.EC0.SW2S, Local0)\n
  12.                         }\n
  13.                         Else\n
  14.                         {\n
  15.                             Store (PWRS, Local0)\n
  16.                         }\n
  17.                         If (LAnd (LEqual (^^^LID0._LID (), Zero), LEqual (Local0, Zero)))\n
  18.                         {\n
  19.                             If (LNotEqual (CNST, One))\n
  20.                             {\n
  21.                                 Store (One, CNST)\n
  22.                                 Sleep (0x0BB8)\n
  23.                                 ^^LPCB.EC0.SMWR (0xC6, 0x50, 0x36, 0x14)\n
  24.                                 ^^LPCB.EC0.SMWR (0xC6, 0x50, 0x37, 0x10)\n
  25.                                 ^^LPCB.EC0.SMWR (0xC6, 0x50, 0x34, 0x2A)\n
  26.                                 ^^LPCB.EC0.SMWR (0xC6, 0x50, 0x24, Zero)\n
  27.                                 Store (Zero, ^^LPCB.EC0.PLGS)\n
  28.                                 ^^LPCB.EC0.SMWR (0xC6, 0x50, 0x22, 0x20)\n
  29.                             }\n
  30.                         }\n
  31.                         ElseIf (LNotEqual (CNST, Zero))\n
  32.                         {\n
  33.                             Store (Zero, CNST)\n
  34.                             ^^LPCB.EC0.SMWR (0xC6, 0x50, 0x36, One)\n
  35.                             ^^LPCB.EC0.SMWR (0xC6, 0x50, 0x37, 0x50)\n
  36.                             ^^LPCB.EC0.SMWR (0xC6, 0x50, 0x34, 0x7F)\n
  37.                             ^^LPCB.EC0.SMWR (0xC6, 0x50, 0x24, 0x02)\n
  38.                             Store (One, ^^LPCB.EC0.PLGS)\n
  39.                             ^^LPCB.EC0.SMWR (0xC6, 0x50, 0x22, 0x40)\n
  40.                         }\n
  41.                     }\n
  42.                 }\n
  43. end;
复制代码


补丁2:更新了F.25版本的bios后提取DSDT,发现多了一个if语句,会导致osx/macOS里无法识别电池。直接把它删了
  1. #Delete If statement
  2. into method label _BST code_regex If\s+\(LEqual\s+\(BRTE,\s+Zero\)\)\s+\{\s+Store\s+\(0xFFFFFFFF,\s+Index\s+\(PBST,\s+One\)\)\s+\} replaceall_matched begin \n end;
复制代码


补丁3:字段拆分,这个大家应该都熟悉
  1. #Add B1B2 method for 16-Bit fields
  2. into method label B1B2 remove_entry;
  3. into definitionblock code_regex . insert
  4. begin
  5. Method (B1B2, 2, NotSerialized) { Return(Or(Arg0, ShiftLeft(Arg1, 8))) }\n
  6. end;

  7. #Add RE1B RECB method for fields more than 32bit
  8. into method label RE1B parent_label EC0 remove_entry;
  9. into method label RECB parent_label EC0 remove_entry;
  10. into device label EC0 insert
  11. begin
  12. Method (RE1B, 1, NotSerialized)\n
  13. {\n
  14.     OperationRegion(ERAM, EmbeddedControl, Arg0, 1)\n
  15.     Field(ERAM, ByteAcc, NoLock, Preserve) { BYTE, 8 }\n
  16.     Return(BYTE)\n
  17. }\n
  18. Method (RECB, 2, Serialized)\n
  19. // Arg0 - offset in bytes from zero-based EC\n
  20. // Arg1 - size of buffer in bits\n
  21. {\n
  22.     ShiftRight(Add(Arg1,7), 3, Arg1)\n
  23.     Name(TEMP, Buffer(Arg1) { })\n
  24.     Add(Arg0, Arg1, Arg1)\n
  25.     Store(0, Local0)\n
  26.     While (LLess(Arg0, Arg1))\n
  27.     {\n
  28.         Store(RE1B(Arg0), Index(TEMP, Local0))\n
  29.         Increment(Arg0)\n
  30.         Increment(Local0)\n
  31.     }\n
  32.     Return(TEMP)\n
  33. }\n
  34. end;

  35. # utility methods to read/write buffers from/to EC
  36. into method label WE1B parent_label EC0 remove_entry;
  37. into method label WECB parent_label EC0 remove_entry;
  38. into device label EC0 insert
  39. begin
  40. Method (WE1B, 2, NotSerialized)\n
  41. {\n
  42.     OperationRegion(ERAM, EmbeddedControl, Arg0, 1)\n
  43.     Field(ERAM, ByteAcc, NoLock, Preserve) { BYTE, 8 }\n
  44.     Store(Arg1, BYTE)\n
  45. }\n
  46. Method (WECB, 3, Serialized)\n
  47. // Arg0 - offset in bytes from zero-based EC\n
  48. // Arg1 - size of buffer in bits\n
  49. // Arg2 - value to write\n
  50. {\n
  51.     ShiftRight(Add(Arg1,7), 3, Arg1)\n
  52.     Name(TEMP, Buffer(Arg1) { })\n
  53.     Store(Arg2, TEMP)\n
  54.     Add(Arg0, Arg1, Arg1)\n
  55.     Store(0, Local0)\n
  56.     While (LLess(Arg0, Arg1))\n
  57.     {\n
  58.         WE1B(Arg0, DerefOf(Index(TEMP, Local0)))\n
  59.         Increment(Arg0)\n
  60.         Increment(Local0)\n
  61.     }\n
  62. }\n
  63. end;

  64. #Deal with the 16-bit EC fields
  65. into device label EC0 code_regex BADC,\s+16, replace_matched begin ADC0,8,ADC1,8, end;
  66. into device label EC0 code_regex BFCC,\s+16 replace_matched begin FCC0,8,FCC1,8 end;
  67. into device label EC0 code_regex MCUR,\s+16 replace_matched begin CUR0,8,CUR1,8 end;
  68. into device label EC0 code_regex MBRM,\s+16 replace_matched begin BRM0,8,BRM1,8 end;
  69. into device label EC0 code_regex MBCV,\s+16 replace_matched begin BCV0,8,BCV1,8 end;
  70. into device label EC0 code_regex SMW0,\s+16 replace_matched begin MW00,8,MW01,8 end;

  71. into method label UPBI code_regex \(\^\^PCI0\.LPCB\.EC0\.BADC, replaceall_matched begin (B1B2(\^\^PCI0\.LPCB\.EC0\.ADC0,\^\^PCI0\.LPCB\.EC0\.ADC1), end;
  72. into method label UPBI code_regex \(\^\^PCI0\.LPCB\.EC0\.BFCC, replaceall_matched begin (B1B2(\^\^PCI0\.LPCB\.EC0\.FCC0,\^\^PCI0\.LPCB\.EC0\.FCC1), end;
  73. into method label UPBS code_regex \(\^\^PCI0\.LPCB\.EC0\.MCUR, replaceall_matched begin (B1B2(\^\^PCI0\.LPCB\.EC0\.CUR0,\^\^PCI0\.LPCB\.EC0\.CUR1), end;
  74. into method label UPBS code_regex \(\^\^PCI0\.LPCB\.EC0\.MBRM, replaceall_matched begin (B1B2(\^\^PCI0\.LPCB\.EC0\.BRM0,\^\^PCI0\.LPCB\.EC0\.BRM1), end;
  75. into method label CLRI code_regex \(\^\^LPCB\.EC0\.MBRM, replaceall_matched begin (B1B2(\^\^LPCB\.EC0\.BRM0,\^\^LPCB\.EC0\.BRM1), end;
  76. into method label UPBS code_regex \(\^\^PCI0\.LPCB\.EC0\.MBCV, replaceall_matched begin (B1B2(\^\^PCI0\.LPCB\.EC0\.BCV0,\^\^PCI0\.LPCB\.EC0\.BCV1), end;
  77. into method label SMRD code_regex \(SMW0, replaceall_matched begin (B1B2(MW00,MW00), end;
  78. into method label SMWR code_regex Store\s\(Arg3,\sSMW0\) replaceall_matched begin Store(Arg3, MW00)\nStore(ShiftRight(Arg3,8),MW01) end;

  79. #Deal with the fields more than 32-Bit
  80. into device label EC0 code_regex (SMD0,)\s+(256) replace_matched begin SMDY,%2,//%1%2 0x04 end;
  81. into device label EC0 code_regex (FLD0,)\s+(64) replace_matched begin FLD4,%2,//%1%2 0x04 end;
  82. into device label EC0 code_regex (FLD1,)\s+(128) replace_matched begin FLD5,%2,//%1%2 0x04 end;
  83. into device label EC0 code_regex (FLD2,)\s+(192) replace_matched begin FLD6,%2,//%1%2 0x04 end;
  84. into device label EC0 code_regex (FLD3,)\s+(256) replace_matched begin FLD7,%2,//%1%2 0x04 end;

  85. into method label SMRD code_regex \(FLD0, replaceall_matched begin (RECB(0x04,64), end;
  86. into method label SMRD code_regex \(FLD1, replaceall_matched begin (RECB(0x04,128), end;
  87. into method label SMRD code_regex \(FLD2, replaceall_matched begin (RECB(0x04,192), end;
  88. into method label SMRD code_regex \(FLD3, replaceall_matched begin (RECB(0x04,256), end;
  89. into method label SMWR code_regex Store\s+\((.*),\s+SMD0\) replaceall_matched begin WECB(0x04,256,%1) end;
复制代码




2017.6.1更新电池HotPatch文件:




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

Rank: 5Rank: 5Rank: 5

UID
1619547
帖子
437
PB币
116
贡献
0
技术
1
活跃
655
发表于 2016-7-20 08:34:30 |显示全部楼层
本帖最后由 794767404 于 2017-2-7 19:10 编辑

补充:
因为DSDT未打补丁进MacOS会导致电池异常,所以第二步打补丁可以在重置电池前做;或者在Windows下装虚拟机,在虚拟机里打补丁.

win10下电池异常图片



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

Rank: 5Rank: 5Rank: 5

UID
4702532
帖子
1015
PB币
438
贡献
0
技术
0
活跃
701
发表于 2016-7-20 08:49:44 来自手机 |显示全部楼层
把电池拆了就恢复了

Rank: 5Rank: 5Rank: 5

UID
1619547
帖子
437
PB币
116
贡献
0
技术
1
活跃
655
发表于 2016-7-20 08:58:19 来自手机 |显示全部楼层
Aimisoy糊涂 发表于 2016-7-20 08:49
把电池拆了就恢复了

哦,这是为什么?会损坏电池吗,挺担心的。

Rank: 2Rank: 2

UID
232043
帖子
50
PB币
1209
贡献
0
技术
0
活跃
755
发表于 2016-7-20 10:53:31 |显示全部楼层
我的光影精灵也和楼主一样的情况。现在也没找到解决的方法。

Rank: 5Rank: 5Rank: 5

UID
49970
帖子
1198
PB币
3220
贡献
0
技术
181
活跃
1033
发表于 2016-7-20 11:00:00 |显示全部楼层
会损伤电池的,我的索尼笔记本因为黑苹果坏了一块电池。
建议你用黑苹果时插电用。

Rank: 5Rank: 5Rank: 5

UID
1619547
帖子
437
PB币
116
贡献
0
技术
1
活跃
655
发表于 2016-7-20 11:17:27 来自手机 |显示全部楼层
absktv 发表于 2016-7-20 10:53
我的光影精灵也和楼主一样的情况。现在也没找到解决的方法。

好吧,找到方法请告诉我哦,谢谢啦

Rank: 5Rank: 5Rank: 5

UID
1619547
帖子
437
PB币
116
贡献
0
技术
1
活跃
655
发表于 2016-7-20 11:18:43 来自手机 |显示全部楼层
andyandy 发表于 2016-7-20 11:00
会损伤电池的,我的索尼笔记本因为黑苹果坏了一块电池。
建议你用黑苹果时插电用。

不是吧...只能谨慎点了,毕竟新机心疼啊

Rank: 5Rank: 5Rank: 5

UID
1619547
帖子
437
PB币
116
贡献
0
技术
1
活跃
655
发表于 2016-7-20 15:39:44 |显示全部楼层
没办法,再次求助。

Rank: 5Rank: 5Rank: 5

UID
1619547
帖子
437
PB币
116
贡献
0
技术
1
活跃
655
发表于 2016-7-20 16:11:05 来自手机 |显示全部楼层

补充

本帖最后由 794767404 于 2016-7-21 09:18 编辑

17F网友补充:DSDT+Kext,电池驱动后也没用。进WIN10电池还是没响应不掉电。

Rank: 5Rank: 5Rank: 5

UID
1619547
帖子
437
PB币
116
贡献
0
技术
1
活跃
655
发表于 2016-7-20 18:27:23 来自手机 |显示全部楼层
只能先拆机放电了,唉
头像被屏蔽

UID
4805871
帖子
3474
PB币
3838
贡献
0
技术
8
活跃
529
发表于 2016-7-20 18:31:54 来自手机 |显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽

Rank: 5Rank: 5Rank: 5

UID
1619547
帖子
437
PB币
116
贡献
0
技术
1
活跃
655
发表于 2016-7-20 19:18:29 来自手机 |显示全部楼层
WLS.pkg 发表于 2016-7-20 18:31
最好把电池驱动了
dsdt+kext

大神又是你哈,看了很多教程还是不会改dsdt,能不能帮我改改dsdt驱动电池呢?
头像被屏蔽

UID
4805871
帖子
3474
PB币
3838
贡献
0
技术
8
活跃
529
发表于 2016-7-20 20:17:16 来自手机 |显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽

Rank: 5Rank: 5Rank: 5

UID
1619547
帖子
437
PB币
116
贡献
0
技术
1
活跃
655
发表于 2016-7-20 20:32:01 来自手机 |显示全部楼层
没事,至少提供了思路。就是觉得奇怪,没驱动为什么会影响到win10的电量显示...

Rank: 2Rank: 2

UID
232043
帖子
50
PB币
1209
贡献
0
技术
0
活跃
755
发表于 2016-7-20 20:50:16 |显示全部楼层
显示电量,只能DSDT+Kext,这个我已经实现了。只是进了黑苹果后,整个机器的电池会出现丢失状态的情况,退出黑果再进Win,会显示”未充电“,只到电池自己耗完,才可以在Win中找回。但一回黑果,又会丢失。

Rank: 2Rank: 2

UID
232043
帖子
50
PB币
1209
贡献
0
技术
0
活跃
755
发表于 2016-7-20 20:54:13 |显示全部楼层
DSDT+Kext,电池驱动后也没用。还是会进WIN电池没响应。

Rank: 5Rank: 5Rank: 5

UID
1619547
帖子
437
PB币
116
贡献
0
技术
1
活跃
655
发表于 2016-7-20 21:13:25 来自手机 |显示全部楼层
absktv 发表于 2016-7-20 20:54
DSDT+Kext,电池驱动后也没用。还是会进WIN电池没响应。

~(>_<)~,还有什么思路吗?看来你折腾这个问题挺久了..

Rank: 2Rank: 2

UID
1962106
帖子
347
PB币
53
贡献
0
技术
3
活跃
447
发表于 2016-7-20 21:29:33 |显示全部楼层
论坛里面好像有电池的解决方案

Rank: 5Rank: 5Rank: 5

UID
1619547
帖子
437
PB币
116
贡献
0
技术
1
活跃
655
发表于 2016-7-20 22:09:04 来自手机 |显示全部楼层
liujie1024 发表于 2016-7-20 21:29
论坛里面好像有电池的解决方案

在哪?感觉这不是普通的电池问题,因为他影响到了win10的电量显示
关闭

站长推荐

推荐好友加入远景可拿奖励
推荐好友进远景,可以拿3重奖励,PBB,威望,勋章,通通有~ 本帖只限回复推荐用
回顶部
Copyright (C) 2005-2018 pcbeta.com, All rights reserved
Powered by Discuz!  苏ICP备17027154号
请勿发布违反中华人民共和国法律法规的言论,会员观点不代表远景论坛官方立场。
远景在线 | 远景论坛 | 苹果论坛 | Win10论坛 | Win8论坛 | Win7论坛 | WP论坛 | Office论坛 | 电脑硬件 | 安卓软件