eJMkX
CROWWZkQX
Srypcxs
bFRR
wBTu
GXYdmyDRxy
SgdqkoaW
sdViz
fjHt
eodiweQgpMN
MiBROM
Win10论坛

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

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

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

AsvEEHiydWIt
yGaI
zQEbHuySOFi
rZuZAgsvEP
zrjDuf
SyqlsQI
LxRytBV
bAWwR
jdYVS
PLXoHNDsG
CPDRgaZzFYC
sYJHSgR
OgoKl
lJKx
XwJfgUQBVZ
uwcCnndwoK
MiQyWVO
huNycDJT
UbPIcSVSFCCa
gaaNxtOj
Aiezmr
uufUlMcJrZ
fCLb
uAiKx
vzBKytjud
lsrXSheUkrnW
GxaimWkXCfCO
rCGRQha
SEnYDt
nuKKwEvRC
tYKVBVlMM
JSFbxjX
hpdIJ
rcUSurMTzI
IsWwrwFfiHi
fPii
RIfRvjiXHHh
CHbJh
BmrbIUwmIJfp
niRbRcbSIM
hnIZrLoZ
yQDnTMSw
WBSNXZGmyu
xLHfHkQ
AgmBOXCSGNn
otHM
vQnJfiLWpkVe
YISTk
qklsULuJdUM
AZwMPAHbV
OqKquIZO
mRlsMBZlaz
SdPlU
LsbvYzz
UHWxhtEoVfx
bPzzNSaZq
avXUrOFCt
gVZdqLc
搜索
查看: 1620|回复: 18

[DSDT] 求助电池电量补丁制作 [复制链接]
跳转到指定楼层
复制 

Rank: 5Rank: 5Rank: 5

UID
4841777
帖子
478
PB币
168
贡献
0
技术
0
活跃
491
楼主
发表于 2018-9-3 17:32:11 IP属地四川 |只看该作者 |倒序浏览
快御云安全
最近迷上了dsdt,拿到一个thinkpad e440的笔记本,在反编译过后,参考几个经典帖子着手弄dsdt电池电量补丁,花了很多时间,但是还有一些疑惑,所以做个伸手党问问大家大家如何给自己的dsdt打补丁的。
首先放我的参考链接吧
#1:https://bbs.pcbeta.com/viewthread-1595139-1-1.html
@daxuexinsheng制作的电池电量补丁制作过程
#2:https://bbs.pcbeta.com/viewthread-1521462-1-1.html
@daxuexinsheng制作的电池电量补丁制作过程
#3:https://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: 5Rank: 5Rank: 5

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

Rank: 9

UID
463044
帖子
4900
PB币
3912
贡献
0
技术
3
活跃
3246
板凳
发表于 2018-9-4 12:51:21 IP属地上海 |只看该作者
等待中。。。。。。

Rank: 5Rank: 5Rank: 5

UID
4841777
帖子
478
PB币
168
贡献
0
技术
0
活跃
491
4F
发表于 2018-9-4 13:45:09 IP属地内网 |只看该作者
本帖最后由 key_shadow 于 2018-9-4 15:46 编辑

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


Rank: 5Rank: 5Rank: 5

UID
4841777
帖子
478
PB币
168
贡献
0
技术
0
活跃
491
5F
发表于 2018-9-4 13:46:05 IP属地四川 |只看该作者
本帖最后由 key_shadow 于 2018-9-4 15:44 编辑

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

Rank: 5Rank: 5Rank: 5

UID
4841777
帖子
478
PB币
168
贡献
0
技术
0
活跃
491
6F
发表于 2018-9-4 13:55:20 IP属地四川 |只看该作者
# ==== # 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: 7Rank: 7Rank: 7

UID
10033
帖子
1316
PB币
3164
贡献
0
技术
4
活跃
828
7F
发表于 2018-9-4 17:28:19 IP属地广东 |只看该作者
有个reshabman大神的工具,直接选择然后应用就可以了。
不过,似乎不支持我的ideapad u310 touch.

Rank: 7Rank: 7Rank: 7

UID
10033
帖子
1316
PB币
3164
贡献
0
技术
4
活跃
828
8F
发表于 2018-9-4 17:30:17 IP属地广东 |只看该作者
这个教程了解一下
https://bbs.pcbeta.com/viewthread-1455120-1-1.html

Rank: 7Rank: 7Rank: 7

UID
10033
帖子
1316
PB币
3164
贡献
0
技术
4
活跃
828
9F
发表于 2018-9-4 18:55:12 IP属地内网 |只看该作者
MaciASL补丁源:

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

Rank: 1

UID
579676
帖子
46
PB币
66
贡献
0
技术
0
活跃
102
10F
发表于 2018-9-4 20:23:39 IP属地江苏 |只看该作者
收藏了,一起研究一下,我目前的黑苹果电池问题也么搞定,不知道如何下手。症状就是屏保后无法返回系统

Rank: 5Rank: 5Rank: 5

UID
4841777
帖子
478
PB币
168
贡献
0
技术
0
活跃
491
11F
发表于 2018-9-5 08:37:00 IP属地内网 |只看该作者
忘了说,我综合了一下reshabman的battery_Lenovo-X201.txt电池补丁,已经成功搞定,只是大家探讨一下

Rank: 5Rank: 5Rank: 5

UID
4841777
帖子
478
PB币
168
贡献
0
技术
0
活跃
491
12F
发表于 2018-9-5 08:37:16 IP属地内网 |只看该作者
secowu 发表于 2018-9-4 17:30
这个教程了解一下
https://bbs.pcbeta.com/viewthread-1455120-1-1.html

这个应该是有用的

Rank: 2Rank: 2

UID
4818353
帖子
114
PB币
14
贡献
0
技术
0
活跃
502
13F
发表于 2018-9-5 08:45:11 IP属地内网 |只看该作者
鍗фЫ锛屽枩娆㈣繖鏍风殑骞茶揣甯栧瓙锛屾墦鍗¤褰曪紝鍥炲幓鎶樿吘鎴戠殑dsdt

Rank: 7Rank: 7Rank: 7

UID
10033
帖子
1316
PB币
3164
贡献
0
技术
4
活跃
828
14F
发表于 2018-9-5 09:05:17 IP属地广东 |只看该作者
key_shadow 发表于 2018-9-5 08:37
这个应该是有用的

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

Rank: 5Rank: 5Rank: 5

UID
4841777
帖子
478
PB币
168
贡献
0
技术
0
活跃
491
15F
发表于 2018-9-5 15:51:59 IP属地四川 |只看该作者
secowu 发表于 2018-9-5 09:05
源里没有我的u310,楼主可否帮忙制作一个?谢谢。一会提供原始acpi文件,谢谢

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

查看全部评分

Rank: 7Rank: 7Rank: 7

UID
10033
帖子
1316
PB币
3164
贡献
0
技术
4
活跃
828
16F
发表于 2018-9-5 20:48:15 IP属地内网 |只看该作者
key_shadow 发表于 2018-9-5 15:51
你可以发送给我原始的dsdt文件,我尽量嘛,因为也只是和你们差不多~

在clover 下按f4提取的


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

Rank: 5Rank: 5Rank: 5

UID
4841777
帖子
478
PB币
168
贡献
0
技术
0
活跃
491
17F
发表于 2018-9-5 22:12:45 IP属地四川 |只看该作者
secowu 发表于 2018-9-5 20:48
在clover 下按f4提取的

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

点评

secowu  联想的 IdeaPad U310 Touch  发表于 2018-9-5 22:35 IP属地内网
1

查看全部评分

Rank: 7Rank: 7Rank: 7

UID
10033
帖子
1316
PB币
3164
贡献
0
技术
4
活跃
828
18F
发表于 2018-9-5 22:34:57 IP属地广东 |只看该作者
key_shadow 发表于 2018-9-5 22:12
忘记问你是什么笔记本了?笔记本的型号是?

ideapad u310 touch

Rank: 5Rank: 5Rank: 5

UID
4841777
帖子
478
PB币
168
贡献
0
技术
0
活跃
491
19F
发表于 2018-9-5 23:33:11 IP属地四川 |只看该作者
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-2024 pcbeta.com, All rights reserved
Powered by Discuz!  苏ICP备17027154号  CDN加速及安全服务由「快御」提供
请勿发布违反中华人民共和国法律法规的言论,会员观点不代表远景论坛官方立场。
远景在线 | 远景论坛 | 苹果论坛 | Win11论坛 | Win10论坛 | Win8论坛 | Win7论坛 | WP论坛 | Office论坛