电池补丁替换规则-总结 笔记本必看!
经过前几天发的[教程] 专为小白设计的电量补丁教程【超详细】的到了很多评赞,同时教程也有些欠缺!今天特意把最精华的部分分享给大家,希望大伙枉走弯路,以下都是我的个人总结,算是自己对电池补丁制作的体会吧!讲得不正确还希望大伙指正!相互学习!【拆分字段命名规则】: 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的字段位数
前排支持老哥,学习一下~~· 前排支持技术贴! 又一次拜读楼主大作,收益良多,{:5_266:} helpmans 发表于 2017-8-1 17:09 https://www.pcbeta.com/static/image/common/back.gif
又一次拜读楼主大作,收益良多,
谢谢大伙的支持!! 看不懂的时候统统被我叫做技术贴和大神。 tony_weibs 发表于 2017-8-1 17:27 https://www.pcbeta.com/static/image/common/back.gif
看不懂的时候统统被我叫做技术贴和大神。
还看不懂!{:5_262:}? 之前有遇到一个苏菲pro3的电池问题,一直没能解决得了,很奇怪。你有空可以看看。https://bbs.pcbeta.com/viewthread-1747149-1-1.html 楼主连续发良心贴,帮顶 675609454 发表于 2017-8-1 17:49 https://www.pcbeta.com/static/image/common/back.gif
之前有遇到一个苏菲pro3的电池问题,一直没能解决得了,很奇怪。你有空可以看看。https://bbs.pcbeta.com/vi ...
我发你,我的也是surface pro 3
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
支持技术贴
赶忙学学,谢谢. 我的电池今天才弄好!我不都不知道怎么弄好的,就是换了个EFI!就搞定了! 学习了,谢谢
yearjinheng 发表于 2017-8-1 18:06 https://www.pcbeta.com/static/image/common/back.gif
我发你,我的也是surface pro 3
谢啦,这个是论坛一个人求助的,不是我的设备,那时候我在学习修改电池的。但是都拆分了依然没作用,开机出现一会儿就消失了,我想弄清楚原因。还望指教,我等会儿也下载您的DSDT学习一下。 675609454 发表于 2017-8-1 20:05 https://www.pcbeta.com/static/image/common/back.gif
谢啦,这个是论坛一个人求助的,不是我的设备,那时候我在学习修改电池的。但是都拆分了依然没作用,开机 ...
拆分点需要良好的命名,需要正确的方法步骤。不然很容易遗漏!! 感谢分享。 感谢分享。。 感谢楼主分享。学习了