yearjinheng 发表于 2017-8-1 12:49

电池补丁替换规则-总结 笔记本必看!

经过前几天发的[教程] 专为小白设计的电量补丁教程【超详细】的到了很多评赞,同时教程也有些欠缺!今天特意把最精华的部分分享给大家,希望大伙枉走弯路,以下都是我的个人总结,算是自己对电池补丁制作的体会吧!讲得不正确还希望大伙指正!相互学习!

【拆分字段命名规则】:         1.拆分后的名字,不能跟DSDT里已经存在的名字重复,不然会冲突         2.拆分后的名字,不能跟替换名字之间相冲突         3.良好的命名不易出错         4.命名名称不能超过4个字符且不能用数字开头
    例如:【16位拆分命名】:1)B0VL,   16, 拆分名字可命名为:3、4位 + 第二位 + 序列数(0为开始)      VL00VL01
2)B1VL,   16, 拆分名字可命名为:3、4位 + 第二位 + 序列数(0为开始)      VL10VL11【32位拆分命名】:    SMFV,   32, 拆分名字可命名为:3、4位 + 第二位(or 0) + 序列数(0为开始)      FVM0FVM1 FVM2FVM3    或者   FV00FV01 FV02FV03(佳)
【32位以上拆分命名】:32位以上由于不用拆分,所以可改原来原来名字其中一位即可,两位也行1)B0MN,   96,         例 命名为      BXMN2)B0DN,   64,         例 命名为   BXDN3)B0CM,   48,      例 命名为   BXCM


【定义名称替换】         替换的语句:1)into Scope label xxx code_regex xxx replace_matched begin xxx end;                     EmbeddedControl常出现SSDT,偶尔出现在DSDT
例如:into Scope label ^^LPCB code_regex BFC1,\s+16 replace_matched begin C1F0,8,C1F1,8,end;                               DSDT 平台:HP Envy 13into scope label _SB.PCI0.LPCB.EC code_regex BSRC,\s+16 replace_matched begin BRC0,8,BRC1,8 end;               SSDT 平台:HP Envy DV6
2)into device label xxx code_regex xxx replace_matched begin xxx end;                     EmbeddedControl常出现DSDT

xxx:常为H_EC、EC0或EC
Tip:into xxx label    xxx其实就是EmbeddedControl所在哪个范围,在哪个范围就填哪个。

【16位变量定义字段拆分】:into Scope label \_SB.PCI0.LPCB.H_EC code_regex B1CY,\s+16, replace_matched begin BCY0,8,BCY1,8, end;“\_SB.PCI0.LPCB.H_EC”:设备路径“code_regex”:搜索“eplace_matched”:把搜索的内容替换为“begin … end”:替换掉的内容
替代:“B1CY,\s+16,” :被搜索的内容“BCY0,8,BCY1,8,” :被替换的内容   16位拆分为2个字节,命名名称不能超过4个字符且不能用数字开头


【32位变量定义字段拆分】:into Scope label \_SB.PCI0.LPCB.H_EC code_regex B1CH,\s+32, replace_matched begin BC0H,8,BC1H,8,BC2H,8,BC3H,8, end;“\_SB.PCI0.LPCB.H_EC”:设备路径“code_regex”:搜索“eplace_matched”:把搜索的内容替换为“begin … end”:替换掉的内容
替代:“B1CH,\s+32,” :被搜索的内容“BC0H,8,BC1H,8,BC2H,8,BC3H,8,” :被替换的内容   32位拆分为4个字节,命名名称不能超过4个字符且不能用数字开头


【32位以上变量定义字段拆分】:into Scope label \_SB.PCI0.LPCB.H_EC code_regex (B1MA,)\s+(64) replace_matched begin BXMA,%2,//%1%2 end;“\_SB.PCI0.LPCB.H_EC”:设备路径“code_regex”:搜索“eplace_matched”:把搜索的内容替换为“begin … end”:替换掉的内容
替代:“ (B1MA,)\s+(64)”解释:          “(B1MA,)” :第一个参数,括号不能省          “(64)”:第二个参数,括号不能省
“BXMA,%2,//%1%2”解释:          “BXMA”:把第一个参数中B1MA命名为BXMA          “BXMA,%2”:BXMA,第二个参数,即          “//”:内容注释,后面的内容不执行          “%1%2”:第一个参数第二个参数,即“B1MA,64”
          “BXMA,%2,//%1%2”:即 BXMA,64,//B1MA,64
重新整理下思路为:把“B1MA,64”替代为“BXMA,64,//B1MA,64”

【调用方法名称替换】注意⚠:写入EC缓存时需整体替换,如“Store(FB4,SMD0)”,读取EC缓存时可局部替换,如“Store (B0RC, Local0)”       Tip:红色区域代表需替换;写入缓存常出现在16位和32位以上,32位写入几乎目前看不到

【16位被调用】:
读取:into method label BVO1 code_regex \(B0VL, replaceall_matched begin (B1B2(VL00,VL01), end;解释:BVO1:在BVO1这个范围里“\(B0VL, ”:被搜索的内容“(B1B2(VL00,VL01), ”:被替换的内容;                                     B1B2:16位处理方法                                     VL00:BVO1被拆分的高位,为VL00                                     VL01:BVO1被拆分的低位,为VL01

写入:into method label SMBW code_regex Store\s\(Arg4,\sDT2B\) replaceall_matched begin Store (Arg4,DTB1) Store (ShiftRight(Arg4,8),DTB1) end;
解释:SMBW:在SMBW这个范围里“Store\s\(Arg4,\sDT2B\)”:被搜索的内容,为“Store (Arg4, DT2B)”   整体“Store (Arg4,DTB1) Store (ShiftRight(Arg4,8),DTB1) ”:被替换的内容;                                     “Store (Arg4,DTB1)”和“Store (ShiftRight(Arg4,8),DTB1) ”之间无需用逗号,空格即可                                     “Store (Arg4,DTB1)”:只需把“Store (Arg4, DT2B)”中DT2B替换为被拆分的高位即可“DTB1”。                                     “Store (ShiftRight(Arg4,8),DTB1)”:Store (ShiftRight(前参数,8),低位) ,低位为DTB1
【写入通用代码】:Store (前参数,高位) Store (ShiftRight(前参数,8),低位)
重新整理下思路为:把“Store (Arg4, DT2B)”整体替代为“Store(Arg4,DTB0) Store(ShiftRight(Arg4,8),DTB1)”
【32位被调用】:
读取:into method label _BIF code_regex B1CH replaceall_matched begin B1B4(BC0H,BC1H,BC2H,BC3H) end;
解释:_BIF:在_BIF这个范围里“B1CH”:被搜索的内容“ B1B4(BC0H,BC1H,BC2H,BC3H)”:被替换的内容;                                     B1B4:16位处理方法                                     BC0H,BC1H,BC2H,BC3H:B1CH被拆分为最高位 到 最低位

写入⚠:目前尚未发现32位写入


【32位以上被调用】:
看之前请参考我之前发的 大于32位字段偏移量计算
例如:    被调用256位字段(SMD0)            Offset (0x18),          //(基地址)            SMPR,   8,            // 从基地址起 ,为0x18             SMST,   8,            //8,为1个字节;计算:上一个的起始地址0x18+0x1(上一个的8位占了1个字节,10转为16进制为0x1)值为0x19 (偏移量)            SMAD,   8,             //8,为1个字节;计算:上一个的起始地址0x19+0x1(上一个的8位占了1个字节,10转为16进制为0x1)值为0x1a (偏移量)            SMCM,   8,            //8,为1个字节;计算:上一个的起始地址0x1a+0x1(上一个的8位占了1个字节,10转为16进制为0x1)值为0x1b (偏移量)            SMD0,   256,       //8,为1个字节;计算:上一个的起始地址0x1b+0x1(上一个的8位占了1个字节,10转为16进制为0x1)值为0x1c (偏移量)
写入EC缓存:      into method label MHPF code_regex Store\s\(FB4,\sSMD0\) replaceall_matched begin WECB(0x1C,256,FB4) end;      
注意⚠:写入缓存时需整体替换,即Store(FB4,SMD0),替换后前参数FB4需放在后面,即WECB(0x1C,256,FB4)
解释:WECB:写入EC缓存0x1C:“SMD0,   256 ”字段中的偏移量    256:表示SMD0的字段位数    【写入通用代码】:WECB (偏移量,字段位数,未修改前的前参数)
读取EC缓存:      into method label MHPF code_regex SMD0 replaceall_matched begin RECB(0x1C, 256) end;解释:RECB:读取EC缓存
    256:表示SMD0的字段位数



东骧神骏 发表于 2017-8-1 17:02

前排支持老哥,学习一下~~·

BlondeCloud 发表于 2017-8-1 17:06

前排支持技术贴!

helpmans 发表于 2017-8-1 17:09

又一次拜读楼主大作,收益良多,{:5_266:}

yearjinheng 发表于 2017-8-1 17:19

helpmans 发表于 2017-8-1 17:09 https://www.pcbeta.com/static/image/common/back.gif
又一次拜读楼主大作,收益良多,

谢谢大伙的支持!!

tony_weibs 发表于 2017-8-1 17:27

看不懂的时候统统被我叫做技术贴和大神。

yearjinheng 发表于 2017-8-1 17:29

tony_weibs 发表于 2017-8-1 17:27 https://www.pcbeta.com/static/image/common/back.gif
看不懂的时候统统被我叫做技术贴和大神。

还看不懂!{:5_262:}?

675609454 发表于 2017-8-1 17:49

之前有遇到一个苏菲pro3的电池问题,一直没能解决得了,很奇怪。你有空可以看看。https://bbs.pcbeta.com/viewthread-1747149-1-1.html

tdyso 发表于 2017-8-1 17:50

楼主连续发良心贴,帮顶

yearjinheng 发表于 2017-8-1 18:06

675609454 发表于 2017-8-1 17:49 https://www.pcbeta.com/static/image/common/back.gif
之前有遇到一个苏菲pro3的电池问题,一直没能解决得了,很奇怪。你有空可以看看。https://bbs.pcbeta.com/vi ...

我发你,我的也是surface pro 3

yearjinheng 发表于 2017-8-1 18:08

675609454 发表于 2017-8-1 17:49 https://www.pcbeta.com/static/image/common/back.gif
之前有遇到一个苏菲pro3的电池问题,一直没能解决得了,很奇怪。你有空可以看看。https://bbs.pcbeta.com/vi ...

Surface PRO3 完美解决电池问题,支持所有系统 包括10.13 完美正常使用,支持最新的电池驱动,电池驱动可在我另外一个帖子下载https://bbs.pcbeta.com/viewthread-1752078-1-1.html

zhongbuxiao 发表于 2017-8-1 18:22

支持技术贴

ydyanglq 发表于 2017-8-1 19:48

赶忙学学,谢谢.

小小小毛 发表于 2017-8-1 19:56

我的电池今天才弄好!我不都不知道怎么弄好的,就是换了个EFI!就搞定了!

gooddir 发表于 2017-8-1 19:56

学习了,谢谢

675609454 发表于 2017-8-1 20:05

yearjinheng 发表于 2017-8-1 18:06 https://www.pcbeta.com/static/image/common/back.gif
我发你,我的也是surface pro 3

谢啦,这个是论坛一个人求助的,不是我的设备,那时候我在学习修改电池的。但是都拆分了依然没作用,开机出现一会儿就消失了,我想弄清楚原因。还望指教,我等会儿也下载您的DSDT学习一下。

yearjinheng 发表于 2017-8-1 20:16

675609454 发表于 2017-8-1 20:05 https://www.pcbeta.com/static/image/common/back.gif
谢啦,这个是论坛一个人求助的,不是我的设备,那时候我在学习修改电池的。但是都拆分了依然没作用,开机 ...

拆分点需要良好的命名,需要正确的方法步骤。不然很容易遗漏!!

421031173 发表于 2017-8-3 11:25

感谢分享。

Kay850118 发表于 2017-8-4 14:47

感谢分享。。

mnmjda 发表于 2017-8-4 15:45

感谢楼主分享。学习了
页: [1] 2 3
查看完整版本: 电池补丁替换规则-总结 笔记本必看!