Win10论坛

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

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

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

搜索
查看: 1840|回复: 38

[电池] 关于电池修复使用的补丁方法的讨论 [复制链接]

Rank: 2Rank: 2

UID
4824605
帖子
391
PB币
612
贡献
0
技术
1
活跃
754
发表于 2018-3-26 11:15:18 |显示全部楼层
平时我们在修改电池的时候,在处理32位以下的字段时候,都是采用B1B2和B1B4的方法,我个人觉得这样比较麻烦,因为要涉及到字段的重命名,特别是32位的时候,所以我就在想能不能抛弃B1B2和B1B4,全部采用RECB/WECB来处理,这样做有二个好处:1.我不需要再修改字段的名称了,减少了操作的复杂度。2.我只需要修改那些需要修改的代码,其他没有被调用的我不需要改它了,仅仅通过逻辑地址来访问(因为原EC域中字段名字已经被改了,就算你没有Store等操作你还是要做相应的修改),这样提高了修复效率。    而这些无非就是要算出字段的逻辑地址出来,可能有人觉得这样每个计算比较麻烦,其实不然,只要记住字段的逻辑地址=它所在字段的首地址+它的偏移量,意思就是把 从有效字段的前一个字段开始的 BIT 值都加起来除以 8,其结果再加上本字段的首地址即可, 打个比方,看图:
                                               
如果大家有更好的方法的话欢迎一起讨论下哈,第一次发帖😄
                                                                                                                                                [size=14.000000pt]

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

查看全部评分

Rank: 5Rank: 5Rank: 5

UID
4806575
帖子
562
PB币
241
贡献
0
技术
1
活跃
1090
发表于 2018-3-26 11:23:28 |显示全部楼层
有没有实践过,或者说你自己修改的能否使用呢.

Rank: 2Rank: 2

UID
4657714
帖子
164
PB币
54
贡献
0
技术
20
活跃
279
发表于 2018-3-26 11:24:35 |显示全部楼层
看到电池都觉得麻烦,幸好找了别人的能用。。

Rank: 2Rank: 2

UID
4824605
帖子
391
PB币
612
贡献
0
技术
1
活跃
754
发表于 2018-3-26 11:40:36 |显示全部楼层
LuvU 发表于 2018-3-26 11:23
有没有实践过,或者说你自己修改的能否使用呢.

我的DSDT目前采用的就是这种方法,而且我帮其他几个人都弄了,也没有问题

Rank: 2Rank: 2

UID
4824605
帖子
391
PB币
612
贡献
0
技术
1
活跃
754
发表于 2018-3-26 11:41:01 |显示全部楼层
zhao6810 发表于 2018-3-26 11:24
看到电池都觉得麻烦,幸好找了别人的能用。。

其实不难的,多看看教程哈哈

Rank: 5Rank: 5Rank: 5

UID
4806575
帖子
562
PB币
241
贡献
0
技术
1
活跃
1090
发表于 2018-3-26 11:45:34 |显示全部楼层
xc233 发表于 2018-3-26 11:40
我的DSDT目前采用的就是这种方法,而且我帮其他几个人都弄了,也没有问题

能否赐教具体方法呢.如果说我有一个参数名为BAT1,16,在offset0x92下.为第一个参数.那它的逻辑地址如何算呢,是0x93还是0x92.如果我直接把BAT1改成BAT1,8,在改动这个偏移量使它的逻辑值=以前的逻辑值是否也能工作呢.

Rank: 5Rank: 5Rank: 5

UID
4806575
帖子
562
PB币
241
贡献
0
技术
1
活跃
1090
发表于 2018-3-26 11:48:23 |显示全部楼层
这个审核太麻烦了.打一堆字然后来个审核,很头疼.我有个比较困惑的地方,方不方便+个企鹅.

Rank: 2Rank: 2

UID
4838296
帖子
150
PB币
165
贡献
0
技术
0
活跃
326
发表于 2018-3-26 11:50:18 |显示全部楼层
楼主能不能帮我弄弄,试过几种方法都没有成功

Rank: 2Rank: 2

UID
4824605
帖子
391
PB币
612
贡献
0
技术
1
活跃
754
发表于 2018-3-26 11:54:00 |显示全部楼层
LuvU 发表于 2018-3-26 11:48
这个审核太麻烦了.打一堆字然后来个审核,很头疼.我有个比较困惑的地方,方不方便+个企鹅.

就在帖子里说吧,这样还能给其他朋友提供思路。虽然麻烦点,我打字也是这样要输验证吗的,所以开这个帖子的目的就是为了升升级,原谅我的无耻哈哈

Rank: 2Rank: 2

UID
4824605
帖子
391
PB币
612
贡献
0
技术
1
活跃
754
发表于 2018-3-26 11:55:15 |显示全部楼层
RMTTT 发表于 2018-3-26 11:50
楼主能不能帮我弄弄,试过几种方法都没有成功

我觉得你最好贴出你有疑问的地方,我尽量解答,这样你才能进步,单纯地让别人弄这样不容易掌握知识呀,你说对吧

Rank: 5Rank: 5Rank: 5

UID
4199986
帖子
958
PB币
528
贡献
0
技术
0
活跃
1568
发表于 2018-3-26 16:05:14 |显示全部楼层
没有用过这种方式,也不清楚可行性,不过要计算偏移我觉得这样子不错,不容易出错,直接使用acpi编译器。
比如,
  1. DefinitionBlock ("", "SSDT", 2, "hack", "batt", 0x00000000)
  2. {
  3.     External (_SB_.PCI0.LPCB.EC__, DeviceObj)    // (from opcode)

  4.     Scope (\_SB.PCI0.LPCB.EC)
  5.     {
  6.         OperationRegion (XCF3, EmbeddedControl, Zero, 0xFF)
  7.         Field (XCF3, ByteAcc, Lock, Preserve)
  8.         {
  9.             Offset (0x50),
  10.             DR0T,   8,
  11.             DR1T,   8,
  12.             TPTP,   8,
  13.             VGAT,   8,
  14.             PCHT,   8,
  15.             SYST,   8,
  16.             SCPT,   8,
  17.             CTMP,   8,
  18.             FTMP,   7,
  19.             Offset (0x5E),
  20.             TMPC,   8,
  21.             Offset (0x60),
  22.             B1CH,   32,
  23.             B2CH,   32,
  24.             B1MO,   16,
  25.             B2MO,   16,
  26.             B1SN,   16
  27.         }
  28.     }
  29. }
复制代码
只保留不需要修改的
  1. External (_SB_.PCI0.LPCB.EC__, DeviceObj)    // (from opcode)

  2.     Scope (\_SB.PCI0.LPCB.EC)
  3.     {
  4.         OperationRegion (XCF3, EmbeddedControl, Zero, 0xFF)
  5.         Field (XCF3, ByteAcc, Lock, Preserve)
  6.         {
  7.             Offset (0x50),
  8.             ,   8,
  9.             ,   8,
  10.             ,   8,
  11.             ,   8,
  12.             ,   8,
  13.             ,   8,
  14.             ,   8,
  15.             ,   8,
  16.             ,   7,
  17.             Offset (0x5E),
  18.             ,   8,
  19.             Offset (0x60),
  20.             ,   32,
  21.             ,   32,
  22.             ,   16,
  23.             B2MO,   16,
  24.             B1SN,   16
  25.         }
  26.     }
复制代码
cm+Q再打开就有了
  1. External (_SB_.PCI0.LPCB.EC__, DeviceObj)    // (from opcode)

  2.     Scope (\_SB.PCI0.LPCB.EC)
  3.     {
  4.         OperationRegion (XCF3, EmbeddedControl, Zero, 0xFF)
  5.         Field (XCF3, ByteAcc, Lock, Preserve)
  6.         {
  7.             Offset (0x50),
  8.             Offset (0x51),
  9.             Offset (0x52),
  10.             Offset (0x53),
  11.             Offset (0x54),
  12.             Offset (0x55),
  13.             Offset (0x56),
  14.             Offset (0x57),
  15.             Offset (0x58),
  16.                 ,   7,
  17.             Offset (0x5E),
  18.             Offset (0x5F),
  19.             Offset (0x60),
  20.             Offset (0x64),
  21.             Offset (0x68),
  22.             Offset (0x6A),
  23.             B2MO,   16,
  24.             B1SN,   16
  25.         }
  26.     }
复制代码

点评

lovest.fdh  应该把不字去掉,,。  发表于 2018-3-26 16:27

Rank: 2Rank: 2

UID
4824605
帖子
391
PB币
612
贡献
0
技术
1
活跃
754
发表于 2018-3-26 16:33:45 |显示全部楼层
lovest.fdh 发表于 2018-3-26 16:05
没有用过这种方式,也不清楚可行性,不过要计算偏移我觉得这样子不错,不容易出错,直接使用acpi编译器。
...

可行性是一定的,毕竟原理都一样。注意这里主要讨论的是弃用B1B2那种繁琐的方法,直接全部使用RECB。计算逻辑地址这个东西方法很多,搞出来就行。

Rank: 5Rank: 5Rank: 5

UID
4806575
帖子
562
PB币
241
贡献
0
技术
1
活跃
1090
发表于 2018-3-26 16:47:04 |显示全部楼层
论坛审核太慢了.无语.就像我说的.BAT1,8这个参数在偏移量0x92下面.一共从BAT1-BAT6共6个参数.
我尝试过把这6个参数直接改成8位.也就是BAT1,8,偏移量还是在0x92下面.不加入B1B2和RECB和WECB这些,直接放一个电池kext也可以读取电量.拔插充电器会自动切换状态.但是电池信息不准确.我觉得是原来16位的数据现在改成8位的导致读取的信息产生了偏差.

我还是想把BAT1直接改成8位的.按照你的帖子我修改0x92这个偏移量应该也可以完成电池的修改吧?
如下图给你看看:
但是这个偏移量的修改我很困惑.如果我把BA1T这个直接改成8,如果这个思路没问题的话,那么偏移量0x92应该改成多少才能使原来的电池函数读取的数据和BA1T是16的数据是一样的.
附件: 你需要登录才可以下载或查看附件。没有帐号?注册

Rank: 2Rank: 2

UID
4824605
帖子
391
PB币
612
贡献
0
技术
1
活跃
754
发表于 2018-3-26 17:07:14 |显示全部楼层
LuvU 发表于 2018-3-26 16:47
论坛审核太慢了.无语.就像我说的.BAT1,8这个参数在偏移量0x92下面.一共从BAT1-BAT6共6个参数.
我尝试过把这 ...

我不知道你是怎么想的。你想把BA1T,16改成BA1T,8?但是如果你这样改了之后,后面调用的代码可能会出现错误,唯一的可能性是这个BA1T只是声明了,并没有调用,你贴上你的.dsl文件上来。字段的首地址是预先分配好了的,可以是不连续的,你从图中可以看出来,所以说你这个要修改0x92的想法我觉得没有任何作用,因为后面代码要调用的是字段本身而不是你想当然的改一个bit值就行了。

Rank: 2Rank: 2

UID
4824605
帖子
391
PB币
612
贡献
0
技术
1
活跃
754
发表于 2018-3-26 17:09:03 |显示全部楼层
LuvU 发表于 2018-3-26 11:45
能否赐教具体方法呢.如果说我有一个参数名为BAT1,16,在offset0x92下.为第一个参数.那它的逻辑地址如何算呢 ...

0x92是字段的首地址,就是说它下面的字段从0x92开始,所以BAT1就是0x92

Rank: 5Rank: 5Rank: 5

UID
4806575
帖子
562
PB币
241
贡献
0
技术
1
活跃
1090
发表于 2018-3-26 17:46:06 |显示全部楼层
我自己做好了hotpath.可用.

压缩包里面有我的整个ACPI表.电池信息在SSDT2.dsl里面.做好的hotpath是.aml的.要不你帮我做一个本帖所说的方法的电池布丁我参考参考.帖子里面没有说明制作方法啊.
附件: 你需要登录才可以下载或查看附件。没有帐号?注册

Rank: 2Rank: 2

UID
4824605
帖子
391
PB币
612
贡献
0
技术
1
活跃
754
发表于 2018-3-26 20:38:15 |显示全部楼层
LuvU 发表于 2018-3-26 17:46
我自己做好了hotpath.可用.

压缩包里面有我的整个ACPI表.电池信息在SSDT2.dsl里面.做好的hotpath是.aml的 ...

似乎你的SMBD,256这个还没有处理。

Rank: 2Rank: 2

UID
2683820
帖子
140
PB币
112
贡献
0
技术
0
活跃
216
发表于 2018-3-27 01:28:50 来自手机 |显示全部楼层
Smda的开始位置应该是0x57吧

Rank: 5Rank: 5Rank: 5

UID
4806575
帖子
562
PB币
241
贡献
0
技术
1
活跃
1090
发表于 2018-3-27 08:51:16 |显示全部楼层
xc233 发表于 2018-3-26 20:38
似乎你的SMBD,256这个还没有处理。

这个我一直不处理.能正常使用.话说我明明只放了一个归档.咋出来三个.

Rank: 5Rank: 5Rank: 5

UID
4806575
帖子
562
PB币
241
贡献
0
技术
1
活跃
1090
发表于 2018-3-27 08:52:27 |显示全部楼层
xc233 发表于 2018-3-26 20:38
似乎你的SMBD,256这个还没有处理。

_BST和_BIF这俩并没有调用SMBD这个值.所以我不修改.
回顶部
Copyright (C) 2005-2020 pcbeta.com, All rights reserved
Powered by Discuz!  苏ICP备17027154号
请勿发布违反中华人民共和国法律法规的言论,会员观点不代表远景论坛官方立场。
远景在线 | 远景论坛 | 苹果论坛 | Win10论坛 | Win8论坛 | Win7论坛 | WP论坛 | Office论坛 | 电脑硬件 | 安卓软件