FBQublfzuLo
EdHtqrwDsuRl
JKAQjWftpp
MpxJxENjSEP
tMVBtGd
ooQuOpMw
xVISa
Win10论坛

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

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

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

vYCfbJBh
cnnTxJPbV
beFWW
DuOQtjcTSM
BqjYCT
nLYTmaTk
TAVGyC
AUlfBRLqwMT
ApBKNJAML
FxQoydagGqp
soOeIH
ifdZIMcva
XZYiEev
bENQWgVqTUxG
WudLNR
XdEraKlyM
dUozQY
cjvFqrWVQVV
JAnyMFmSbg
riAx
vfvvS
nOttNW
tXLaKaUTI
qWRVmP
nuyAWEraRETx
qstNvN
ifgQFaIzaNeu
WhydmDoS
vUSaYWv
sbYDZTQ
HHOnbO
hJXrUTWGBVn
WooeKrPm
tdfUBgW
MzdQ
kHjmU
ArkT
bBWz
BhfeOzf
tfROVP
aMCsOSvVeZe
SPpWb
qWrbJtCBFvI
hXcVLNycEJ
aBYlXmtMMsxA
BZYxQwLW
hdIousQtJSaL
pEceHwlsG
axqlZTOdbGA
hDNKdW
iiGUPtHVEcv
mRkarRkqAHKH
tIUQsruv
rjYTfUVd
pqSJXGIGsj
ypRKmZnrwBq
uWdyzWw
bPgSASk
wNHJN
搜索
查看: 83466|回复: 840

[交流] Lion下的新版AppleACPIBatteryManager/AppleSmartBatteryManager   [复制链接]

Rank: 5Rank: 5Rank: 5

UID
884348
帖子
645
PB币
331
贡献
0
技术
61
活跃
1711
发表于 2011-10-24 21:00:52 IP属地陕西
快御云安全
本帖最后由 zenglg1977 于 2013-2-15 18:14 编辑

针对Lion的笔记本电池不能取得电池信息的问题,经过查阅和参考其他人的分析,发现我的笔记本(Acer 3820TG)中的设备BAT0读取设备信息和状态的函数_BIF和_BST存在多字节读取的问题,因此导致设备信息读取失败,为此我把其中读取多字节的地方修改成单字节读取,这样通过VoodooBattery就可以显示电池信息了。不过,我个人喜欢AppleACPIBatterManager,因此我编译了一个Lion下的AppleACPIBatterManager,桌面可以显示电池信息,但遗憾的是通过System Profiler查看电源信息失败。今天修改了这部分的代码,现在通过System Profiler也可以查看电池信息了。参见下图。
power.png

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


补充,我是通过修改BAT的DSDT代码,然后使用这个进行显示的。如果直接使用这个驱动不能显示,就说明BAT的DSDT代码有问题,解决方法有两种:要么修改DSDT,要么替换旧版的AppleACPIPlatform等。

DSDT修改方法:我笔记本DSDT中的_BIF会调用GBIF,而函数GBIF中存在着如下等语句:
Multiply (BSDC, 0x0A, Local1)或者Store (BSDC, Local1)
而BSDC的定义如下所示,
        Field (RAM, ByteAcc, Lock, Preserve)
        {
                    Offset (0xE0),
            BSDC,   16,
            BSDV,   16,
            BSSN,   16
        }
从中可以看出BSDC占16位,也就是两个字节,所以Multiply (BSDC, 0x0A, Local1)存在一次读两字节的问题,这个在Lion中是不允许的。因此,你就必须把它拆分成两个8位的读取就可以了。

修改方法如下:
1)把定义重新拷贝一份,然后重新定义,如下所示:
       Field (RAM, ByteAcc, Lock, Preserve)
        {
                    Offset (0xE0),
            SDC0,   8,
            SDC1,   8,
            SDV0,   8,
            SDV1,   8,
            SSN0,   8,
            SSN1,   8
        }
2) 修改数据的读取方法
把Multiply (BSDC, 0x0A, Local1)修改为如下:
Multiply (SDC1, 0x100, Local1)
Add (SDC0, Local1, Local1)
Multiply (Local1, 0x0A, Local1)
也就是高位字节乘0x100,然后加低位字节;
把Store (BSDC, Local1)修改为
Multiply (SDC1, 0x100, Local1)
Add (SDC0, Local1, Local1)

对于大于2个字节的字符串最好的方式是直接修改成常量,然后把相关的设置代码删除,如电池的序列号和电池类型等。
可参考我的DSDT DSDT.aml.zip (50.94 KB, 下载次数: 570)
更新(20111025):修改驱动名为AppleSmartBatteryManger.kext,使得iStat Pro等能够显示电池信息。
更新(20111026):在iStatMenus/Pro中能够正确显示设计容量,在启动电池保养时可显示正确的百分比(目前只对应AppleSmartBatteryManger.kext)。
更新(20111027):在_BIF信息后若追加循环数,则设置指定的循环数(AppleSmartBatteryManger和AppleACPIBatteryManger都进行了更新),另外共享目前最新的源代码。
更新(20120206): 由于以前编译时选择最新的SDK使得在10.7.3下不能使用,这里更新两个驱动。
更新(20130205):修改可能导致操作系统五国或者崩溃的BUG。更新(20130215):加入在电池电量不够时进行提示。
AppleSmartBatteryManager.kext.zip (35.4 KB, 下载次数: 1176) AppleACPIBatteryManager.kext.zip (35.25 KB, 下载次数: 1453)
21

查看全部评分

小学生

Rank: 11Rank: 11Rank: 11

UID
71938
帖子
11445
PB币
24190
贡献
0
技术
60
活跃
2004

8周年庆典勋章

发表于 2011-10-24 21:04:41 IP属地四川
ok thank you LZ

Rank: 5Rank: 5Rank: 5

UID
1082282
帖子
1105
PB币
1088
贡献
0
技术
1
活跃
0
发表于 2011-10-24 21:20:07 IP属地广东
留名备用,试试看

Rank: 5Rank: 5Rank: 5

UID
68679
帖子
824
PB币
0
贡献
0
技术
18
活跃
537
发表于 2011-10-24 21:36:36 IP属地四川
其他本本可以用么?

Rank: 5Rank: 5Rank: 5

UID
884348
帖子
645
PB币
331
贡献
0
技术
61
活跃
1711
发表于 2011-10-24 21:39:32 IP属地陕西
wuzhengxian 发表于 2011-10-24 21:36
其他本本可以用么?

通用的,不限制

Rank: 2Rank: 2

UID
82352
帖子
148
PB币
1645
贡献
0
技术
0
活跃
28
发表于 2011-10-24 21:46:31 IP属地江苏
谢谢,我来试试看!

Rank: 2Rank: 2

UID
1577236
帖子
176
PB币
1484
贡献
0
技术
2
活跃
116
发表于 2011-10-24 21:47:40 IP属地北京
哇撒。。我的DSDT中没有BAT0 。。。好像电池的信息都在BAT1中。。。不知道可不可用。。
不管能不能用。。。楼主都威武!

Rank: 7Rank: 7Rank: 7

UID
1678141
帖子
681
PB币
13
贡献
0
技术
35
活跃
674

8周年庆典勋章

发表于 2011-10-24 21:57:58 IP属地云南

谢谢,我ye来试试看

Rank: 5Rank: 5Rank: 5

UID
711988
帖子
1149
PB币
548
贡献
0
技术
14
活跃
813
发表于 2011-10-24 21:58:47 IP属地上海
上次用一个AppleACPIBatteryManager 五国了,这个不知道会不会五国。

Rank: 5Rank: 5Rank: 5

UID
621184
帖子
516
PB币
446
贡献
0
技术
3
活跃
0
发表于 2011-10-24 22:00:25 IP属地湖北
非常感谢,马上试下。。。。谢谢楼主。

这个世界太危险!!

UID
736310
帖子
3208
PB币
10009
贡献
0
技术
30
活跃
203

7周年庆典勋章 8周年庆典勋章

发表于 2011-10-24 22:02:35 IP属地山东
本帖最后由 xiaobangdelei 于 2011-10-24 22:05 编辑

感谢楼主分享,我也比较喜欢appleacpibattery!另外有个重点问题,要不要替换老版本的appleacpiplatform??

还我钓渔岛

Rank: 7Rank: 7Rank: 7

UID
763656
帖子
1338
PB币
2861
贡献
0
技术
10
活跃
686

7周年庆典勋章

发表于 2011-10-24 22:06:15 IP属地浙江
感谢楼主

Rank: 5Rank: 5Rank: 5

UID
1968482
帖子
751
PB币
525
贡献
0
技术
19
活跃
736
发表于 2011-10-24 22:07:50 IP属地广西
我要试试看我也是ACER得本本啊

Rank: 5Rank: 5Rank: 5

UID
884348
帖子
645
PB币
331
贡献
0
技术
61
活跃
1711
发表于 2011-10-24 22:16:21 IP属地陕西
xiaobangdelei 发表于 2011-10-24 22:02
感谢楼主分享,我也比较喜欢appleacpibattery!另外有个重点问题,要不要替换老版本的appleacpiplatform?? ...

我是通过修改BAT0的DSDT然后直接使用这个就可以了。如果不修改DSDT,可能会出现ACPI读取失败,这时就需要替换appleacpibattery。

Rank: 5Rank: 5Rank: 5

UID
621184
帖子
516
PB币
446
贡献
0
技术
3
活跃
0
发表于 2011-10-24 22:19:59 IP属地湖北
zenglg1977 发表于 2011-10-24 22:16
我是通过修改BAT0的DSDT然后直接使用这个就可以了。如果不修改DSDT,可能会出现ACPI读取失败,这时就需要 ...

能否贴出修改的代码和方法?谢 谢了。。

这个世界太危险!!

UID
736310
帖子
3208
PB币
10009
贡献
0
技术
30
活跃
203

7周年庆典勋章 8周年庆典勋章

发表于 2011-10-24 22:20:15 IP属地山东
zenglg1977 发表于 2011-10-24 22:16
我是通过修改BAT0的DSDT然后直接使用这个就可以了。如果不修改DSDT,可能会出现ACPI读取失败,这时就需要 ...

也就是还得修改dsdt或者替换appleacpiplatrom?那麻烦请楼主把dsdt的修改方法贴到主帖里面吧!

Rank: 1

UID
1326497
帖子
38
PB币
265
贡献
0
技术
0
活跃
15
发表于 2011-10-24 22:40:54 IP属地广东
同是3820TG,留着备用

Rank: 2Rank: 2

UID
1577236
帖子
176
PB币
1484
贡献
0
技术
2
活跃
116
发表于 2011-10-24 22:42:44 IP属地北京
求楼主的dsdt修改方法。。。。
我的电池信息是在bat1中,是否影响呢?

Gooner

Rank: 7Rank: 7Rank: 7

UID
600151
帖子
1375
PB币
1684
贡献
0
技术
9
活跃
1204
发表于 2011-10-24 23:08:27 IP属地广西
楼主威武...

Rank: 2Rank: 2

UID
1519221
帖子
340
PB币
89
贡献
0
技术
0
活跃
4
发表于 2011-10-24 23:54:43 IP属地浙江
能分享source么?

点评

zenglg1977  代码可能不太稳定,就没有上传。目前最新的已经上传,你可以参考修改  发表于 2011-10-27 21:58 IP属地陕西
回顶部
Copyright (C) 2005-2024 pcbeta.com, All rights reserved
Powered by Discuz!  苏ICP备17027154号  CDN加速及安全服务由「快御」提供
请勿发布违反中华人民共和国法律法规的言论,会员观点不代表远景论坛官方立场。
远景在线 | 远景论坛 | 苹果论坛 | Win11论坛 | Win10论坛 | Win8论坛 | Win7论坛 | WP论坛 | Office论坛