Win10论坛

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

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

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

搜索
查看: 875|回复: 18

[DSDT] 求助电池电量补丁制作 [复制链接]

Rank: 2Rank: 2

UID
4841777
帖子
180
PB币
31
贡献
0
技术
0
活跃
232
发表于 2018-9-3 17:32:11 |显示全部楼层
最近迷上了dsdt,拿到一个thinkpad e440的笔记本,在反编译过后,参考几个经典帖子着手弄dsdt电池电量补丁,花了很多时间,但是还有一些疑惑,所以做个伸手党问问大家大家如何给自己的dsdt打补丁的。
首先放我的参考链接吧
#1:http://bbs.pcbeta.com/viewthread-1595139-1-1.html
@daxuexinsheng制作的电池电量补丁制作过程
#2:http://bbs.pcbeta.com/viewthread-1521462-1-1.html
@daxuexinsheng制作的电池电量补丁制作过程
#3:http://bbs.pcbeta.com/forum.php?mod=viewthread&tid=1778499&highlight=
@GaoXinglei收集的电池电量补丁制作

说一下我的步骤吧:
1.提取dsdt文件
2.反编译
3.除错
4.着手电池电量补丁
4.1 搜索embeddedcontrol
4.2 Field (ECOR。。。。。。。。等等(我的有1个,但是有7个Field (ECOR)
4.3 记录大于8位的字段
4.3 删除只出现一次的大于8位的字段
4.4 拆分16位的字段
4.5 替换调用16位的字段(因为全都是读取相对简单)
但是有几个函数和设备不知道如何替换
4.6 拆分32位的字段,替换调用32位的字段,只有一个而且还是读取,相对比较简单
4.7 2个128位的字段,都是读取,就不用拆分了,直接用RECB来替换
4.8再加入一些通用的东西
二楼上求助和我的疑问

Rank: 2Rank: 2

UID
4841777
帖子
180
PB币
31
贡献
0
技术
0
活跃
232
发表于 2018-9-4 12:28:47 |显示全部楼层
已经成功了,应该改成分享并讨论,我会整理好,分享出来,大家一起研究
稍后会放示例的dsdt文件,大家帮忙一起看看,改进下,可能我阅读帖子不是很认真,有一些错误,希望大家指正

Rank: 7Rank: 7Rank: 7

UID
463044
帖子
3639
PB币
2975
贡献
0
技术
3
活跃
1869
发表于 2018-9-4 12:51:21 |显示全部楼层
等待中。。。。。。

Rank: 2Rank: 2

UID
4841777
帖子
180
PB币
31
贡献
0
技术
0
活跃
232
发表于 2018-9-4 13:45:09 |显示全部楼层
本帖最后由 key_shadow 于 2018-9-4 15:46 编辑

这里也是重复了,删除一下,内容在楼下


Rank: 2Rank: 2

UID
4841777
帖子
180
PB币
31
贡献
0
技术
0
活跃
232
发表于 2018-9-4 13:46:05 |显示全部楼层
本帖最后由 key_shadow 于 2018-9-4 15:44 编辑

重复了,删除了一下,看下面就好了

Rank: 2Rank: 2

UID
4841777
帖子
180
PB币
31
贡献
0
技术
0
活跃
232
发表于 2018-9-4 13:55:20 |显示全部楼层
# ==== # 16-bit, HWAK, HSPD, SBRC, SBFC, SBAC, SBVO, SBDC, SBDV, SBSN====
#HWAK
into device label EC code_regex HWAK,\s+16, replace_matched begin HWA1,8,HWA2,8, end;
into method label _L1D parent_label \_GPE code_regex \(\\_SB\.PCI0\.LPC\.EC\.HWAK, replaceall_matched begin (B1B2(\\_SB.PCI0.LPC.EC.HWA1,\\_SB.PCI0.LPC.EC.HWA2), end;   //参考RehabMan的battery_Lenovo-X201.txt
这里没什么
#HSPD
into device label EC code_regex HSPD,\s+16, replace_matched begin HSPM,8,HSPN,8, end;
这里只是拆分了,因为出现的地方是device(HSPD),问了群里的大佬,不需要改的

#SBRC
into device label EC code_regex SBRC,\s+16, replace_matched begin SBR1,8,SBR2,8, end;
into_all method label GBST code_regex \(SBRC, replaceall_matched begin (B1B2 (SBR1, SBR2), end;  //参考RehabMan的battery_Lenovo-X201.txt

这是出现的地方 If (Arg2)
                            {
                                Multiply (SBRC, 0x0A, Local2)
                            }
                            Else
                            {
                                Store (SBRC, Local2)
                            }
有点奇怪,出现了2次,我看RehabMan改成all method
#SBFC
into device label EC code_regex SBFC,\s+16, replace_matched begin SBF1,8,SBF2,8, end;
into_all method label GBIF code_regex \(SBFC, replaceall_matched begin (B1B2 (SBF1, SBF2), end;  //参考RehabMan的battery_Lenovo-X201.txt
这个RehabMan改成all method
这是出现的地方
                            If (Local7)
                            {
                                Multiply (SBFC, 0x0A, Local1)
                            }
                            Else
                            {
                                Store (SBFC, Local1)
                            }

#SBAC
into device label EC code_regex SBAC,\s+16, replace_matched begin SBA1,8,SBA2,8, end;
into_all method label GBST code_regex \(SBAC, replaceall_matched begin (B1B2 (SBA1, SBA2), end;   //参考RehabMan的battery_Lenovo-X201.txt       
这里没什么
#SBVO
into device label EC code_regex SBVO,\s+16, replace_matched begin SBVA,8,SBVB,8, end;
into_all method label GBST code_regex \(SBVO, replaceall_matched begin (B1B2 (SBVA, SBVB), end;  //参考RehabMan的battery_Lenovo-X201.txt
这里没什么
#SBBM
into device label EC code_regex SBBM,\s+16, replace_matched begin SBB1,8,SBB2,8, end;
into method label GBIF code_regex SBBM  replaceall_matched begin B1B2(SBB1,SBB2) end;  //参考链接的方法
这里没什么
#SBDC
into device label EC code_regex SBDC,\s+16, replace_matched begin SBDP,8,SBDQ,8, end;
into_all method label GBIF code_regex \(SBDC, replaceall_matched begin (B1B2 (SBDP, SBDQ), end;  //参考RehabMan的battery_Lenovo-X201.txt
这里 GBIF下有两个  
                       If (Local7)
                            {
                                Multiply (SBDC, 0x0A, Local0)
                            }
                            Else
                            {
                                Store (SBDC, Local0)

                            }
还有一个函数    Method (SBDC, 1, NotSerialized)   看这句的命令应该是没改这里

#SBDV
into device label EC code_regex SBDV,\s+16, replace_matched begin SBDX,8,SBDY,8, end;  
into_all method label GBIF code_regex \(SBDV, replaceall_matched begin (B1B2 (SBDX, SBDY), end;  //参考RehabMan的battery_Lenovo-X201.txt
into_all method label GBIF code_regex \(SBDV\) replaceall_matched begin (B1B2 (SBDX, SBDY)) end;  //参考RehabMan的battery_Lenovo-X201.txt
into_all method label GBIF code_regex ,\s+SBDV, replaceall_matched begin ,B1B2(SBDX, SBDY), end;   //参考RehabMan的battery_Lenovo-X201.txt
这里出现了3出,都出是出现在GBIF ,我看他写了三行
                            ElseIf (SBDV)
                            {
                                Divide (0x00030D40, SBDV, Local2, Index (Arg1, 0x06))
                            }
                            Else
                            {
                                Store (0x00, Index (Arg1, 0x06))
                            }

                            Store (SBDV, Index (Arg1, 0x04))

#SBSN
into device label EC code_regex SBSN,\s+16 replace_matched begin SBS1,8,SBS2,8 end;   
into_all method label GBIF code_regex \(SBSN replaceall_matched begin (B1B2 (SBS1, SBS2) end;  //参考RehabMan的battery_Lenovo-
X201.txt
这里没什么

# ==== # 32-bit,SBCH ,SBMN , SBDN====
#SBCH
into device label EC code_regex SBCH,\s+32 replace_matched begin BCH0,8,BCH1,8,BCH2,8,BCH3,8 end;  //参考RehabMan的battery_Lenovo-X201.txt
into_all method label GBIF code_regex \(SBCH, replaceall_matched begin (B1B4(BCH0,BCH1,BCH2,BCH3), end;  //参考RehabMan的battery_Lenovo-X201.txt
32位的没什么问题


#SBMN      //Store (SBMN, Index (Arg1, 0x0C))
into device label EC code_regex (SBMN,)\s+(128) replace_matched begin BMNX,%2,//%1%2 end;   //参考RehabMan的battery_Lenovo-X201.txt
into method label GBIF code_regex \(SBMN, replaceall_matched begin (RECB(0xA0,128), end;    //参考RehabMan的battery_Lenovo-X201.txt
这里128位的,不是太理解,我自己可能阅读不够仔细,我自己写的话,只能写出来第二句,第一句的含义不是特别明白

#SBDN
into device label EC code_regex (SBDN,)\s+(128) replace_matched begin BDNX,%2,//%1%2 end;  //参考RehabMan的battery_Lenovo-X201.txt
into method label GBIF code_regex \(SBDN, replaceall_matched begin (RECB(0xA0,128), end;   //参考RehabMan的battery_Lenovo-X201.txt
这里128位的,不是太理解,我自己可能阅读不够仔细,我自己写的话,只能写出来第二句,第一句的含义不是特别明白
# ==== Data handling method 数据处理方法 ====
# utility methods to read/write buffers from/to EC
into method label RE1B parent_label EC remove_entry;
into method label RECB parent_label EC remove_entry;
into device label EC insert
begin
Method (RE1B, 1, NotSerialized)\n
{\n
    OperationRegion(ERAM, EmbeddedControl, Arg0, 1)\n
    Field(ERAM, ByteAcc, NoLock, Preserve) { BYTE, 8 }\n
    Return(BYTE)\n
}\n
Method (RECB, 2, Serialized)\n
{\n
    ShiftRight(Arg1, 3, Arg1)\n
    Name(TEMP, Buffer(Arg1) { })\n
    Add(Arg0, Arg1, Arg1)\n
    Store(0, Local0)\n
    While (LLess(Arg0, Arg1))\n
    {\n
        Store(RE1B(Arg0), Index(TEMP, Local0))\n
        Increment(Arg0)\n
        Increment(Local0)\n
    }\n
    Return(TEMP)\n
}\n
end;
into method label WE1B parent_label EC remove_entry;    //这一段不知道对我有用没,我大于32位的都没有写入,全部都是读取的
into method label WECB parent_label EC remove_entry;
into device label EC insert
begin
Method (WE1B, 2, NotSerialized)\n
{\n
    OperationRegion(ERAM, EmbeddedControl, Arg0, 1)\n
    Field(ERAM, ByteAcc, NoLock, Preserve) { BYTE, 8 }\n
    Store(Arg1, BYTE)\n
}\n
Method (WECB, 3, Serialized)\n
// Arg0 - offset in bytes from zero-based EC\n
// Arg1 - size of buffer in bits\n
// Arg2 - value to write\n
{\n
    ShiftRight(Arg1, 3, Arg1)\n
    Name(TEMP, Buffer(Arg1) { })\n
    Store(Arg2, TEMP)\n
    Add(Arg0, Arg1, Arg1)\n
    Store(0, Local0)\n
    While (LLess(Arg0, Arg1))\n
    {\n
        WE1B(Arg0, DerefOf(Index(TEMP, Local0)))\n
        Increment(Arg0)\n
        Increment(Local0)\n
    }\n
}\n
end;
into method label B1B2 remove_entry;      //这一段我感觉好像是通用的,不打上的话,会找不到对象b1b2
into definitionblock code_regex . insert
begin
Method (B1B2, 2, NotSerialized)\n
{\n
Return(Or(Arg0, ShiftLeft(Arg1, 8)))\n
}\n
end;

into method label B1B4 remove_entry;    //这一段我感觉好像是通用的,不打上的话,会找不到对象b1b4
into definitionblock code_regex . insert
begin
Method (B1B4, 4, NotSerialized)\n
{\n
Store(Arg3, Local0)\n
Or(Arg2, ShiftLeft(Local0, 8), Local0)\n
Or(Arg1, ShiftLeft(Local0, 8), Local0)\n
Or(Arg0, ShiftLeft(Local0, 8), Local0)\n
Return(Local0)\n
}\n
end;

Rank: 5Rank: 5Rank: 5

UID
10033
帖子
1155
PB币
3018
贡献
0
技术
4
活跃
558
发表于 2018-9-4 17:28:19 |显示全部楼层
有个reshabman大神的工具,直接选择然后应用就可以了。
不过,似乎不支持我的ideapad u310 touch.

Rank: 5Rank: 5Rank: 5

UID
10033
帖子
1155
PB币
3018
贡献
0
技术
4
活跃
558
发表于 2018-9-4 17:30:17 |显示全部楼层

Rank: 5Rank: 5Rank: 5

UID
10033
帖子
1155
PB币
3018
贡献
0
技术
4
活跃
558
发表于 2018-9-4 18:55:12 |显示全部楼层
MaciASL补丁源:

Name: 派奇
URL: http://raw.github.com/Yuki-Judai/dxxs-DSDT-Patch/master

Rank: 1

UID
579676
帖子
32
PB币
53
贡献
0
技术
0
活跃
45
发表于 2018-9-4 20:23:39 |显示全部楼层
收藏了,一起研究一下,我目前的黑苹果电池问题也么搞定,不知道如何下手。症状就是屏保后无法返回系统

Rank: 2Rank: 2

UID
4841777
帖子
180
PB币
31
贡献
0
技术
0
活跃
232
发表于 2018-9-5 08:37:00 |显示全部楼层
忘了说,我综合了一下reshabman的battery_Lenovo-X201.txt电池补丁,已经成功搞定,只是大家探讨一下

Rank: 2Rank: 2

UID
4841777
帖子
180
PB币
31
贡献
0
技术
0
活跃
232
发表于 2018-9-5 08:37:16 |显示全部楼层
secowu 发表于 2018-9-4 17:30
这个教程了解一下
http://bbs.pcbeta.com/viewthread-1455120-1-1.html

这个应该是有用的

Rank: 2Rank: 2

UID
4818353
帖子
97
PB币
46
贡献
0
技术
0
活跃
340
发表于 2018-9-5 08:45:11 |显示全部楼层
鍗фЫ锛屽枩娆㈣繖鏍风殑骞茶揣甯栧瓙锛屾墦鍗¤褰曪紝鍥炲幓鎶樿吘鎴戠殑dsdt

Rank: 5Rank: 5Rank: 5

UID
10033
帖子
1155
PB币
3018
贡献
0
技术
4
活跃
558
发表于 2018-9-5 09:05:17 |显示全部楼层
key_shadow 发表于 2018-9-5 08:37
这个应该是有用的

源里没有我的u310,楼主可否帮忙制作一个?谢谢。一会提供原始acpi文件,谢谢

Rank: 2Rank: 2

UID
4841777
帖子
180
PB币
31
贡献
0
技术
0
活跃
232
发表于 2018-9-5 15:51:59 |显示全部楼层
secowu 发表于 2018-9-5 09:05
源里没有我的u310,楼主可否帮忙制作一个?谢谢。一会提供原始acpi文件,谢谢

你可以发送给我原始的dsdt文件,我尽量嘛,因为也只是和你们差不多~
1

查看全部评分

Rank: 5Rank: 5Rank: 5

UID
10033
帖子
1155
PB币
3018
贡献
0
技术
4
活跃
558
发表于 2018-9-5 20:48:15 |显示全部楼层
key_shadow 发表于 2018-9-5 15:51
你可以发送给我原始的dsdt文件,我尽量嘛,因为也只是和你们差不多~

在clover 下按f4提取的


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

Rank: 2Rank: 2

UID
4841777
帖子
180
PB币
31
贡献
0
技术
0
活跃
232
发表于 2018-9-5 22:12:45 |显示全部楼层
secowu 发表于 2018-9-5 20:48
在clover 下按f4提取的

忘记问你是什么笔记本了?笔记本的型号是?

点评

secowu  联想的 IdeaPad U310 Touch  发表于 2018-9-5 22:35
1

查看全部评分

Rank: 5Rank: 5Rank: 5

UID
10033
帖子
1155
PB币
3018
贡献
0
技术
4
活跃
558
发表于 2018-9-5 22:34:57 |显示全部楼层
key_shadow 发表于 2018-9-5 22:12
忘记问你是什么笔记本了?笔记本的型号是?

ideapad u310 touch

Rank: 2Rank: 2

UID
4841777
帖子
180
PB币
31
贡献
0
技术
0
活跃
232
发表于 2018-9-5 23:33:11 |显示全部楼层
secowu 发表于 2018-9-5 22:34
ideapad u310 touch

我觉得应该参考下下面几个补丁,应该可以弄出来,我空了给你弄好哈,你没事的时候也可以研究下
battery_Lenovo-z470-z370.txt
attery_Lenovo-V510-15IKB
battery_Lenovo-Ux10-Z580.txt
回顶部
Copyright (C) 2005-2019 pcbeta.com, All rights reserved
Powered by Discuz!  苏ICP备17027154号
请勿发布违反中华人民共和国法律法规的言论,会员观点不代表远景论坛官方立场。
远景在线 | 远景论坛 | 苹果论坛 | Win10论坛 | Win8论坛 | Win7论坛 | WP论坛 | Office论坛 | 电脑硬件 | 安卓软件