经过前几天发的[教程] 专为小白设计的电量补丁教程【超详细】的到了很多评赞,同时教程也有些欠缺!今天特意把最精华的部分分享给大家,希望大伙枉走弯路,以下都是我的个人总结,算是自己对电池补丁制作的体会吧!讲得不正确还希望大伙指正!相互学习!
【拆分字段命名规则】: 1.拆分后的名字,不能跟DSDT里已经存在的名字重复,不然会冲突 2.拆分后的名字,不能跟替换名字之间相冲突 3.良好的命名不易出错 4.命名名称不能超过4个字符且不能用数字开头
例如: 【16位拆分命名】: 1)B0VL, 16, 拆分名字可命名为:3、4位 + 第二位 + 序列数(0为开始) VL00 VL01
2)B1VL, 16, 拆分名字可命名为:3、4位 + 第二位 + 序列数(0为开始) VL10 VL11 【32位拆分命名】: SMFV, 32, 拆分名字可命名为:3、4位 + 第二位(or 0) + 序列数(0为开始) FVM0 FVM1 FVM2 FVM3 或者 FV00 FV01 FV02 FV03(佳)
【32位以上拆分命名】: 32位以上由于不用拆分,所以可改原来原来名字其中一位即可,两位也行 1)B0MN, 96, 例 命名为 BXMN 2)B0DN, 64, 例 命名为 BXDN 3)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 13 into 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缓存: [backcolor=rgba(47, 47, 47, 0.0470588)] 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缓存: [backcolor=rgba(47, 47, 47, 0.0470588)] into method label MHPF code_regex SMD0 replaceall_matched begin RECB(0x1C, 256) end; 解释: RECB:读取EC缓存
256:表示SMD0的字段位数
|