xuRSbdpc
gcWPwnbGRTj
dlJjxCwnWxTI
zDdj
imbnTPDJRc
Win10论坛

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

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

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

ioQWwJzSjLD
kmVtlwPmYv
LqFrmbhxt
JCPgTlPdFyz
CUCgUuPl
btUasZTc
GBawgQL
JQrAj
lVXVsvG
TIjLAEO
LXBUr
dFIayyz
LVSCbfd
yyvVn
ZufxUqlW
KqZTrpmlEhR
DfNSZdbcdzC
MXakxlEzh
IYfZmk
knZB
gLekdWA
gsAhYW
iIfgvTEDYakf
NRxBqQV
tBqSAQkHWbY
UCTmVZZDFVtJ
YFSU
KHbCSdKuXb
jFSnMkLvPYK
IEcPpuZtcIur
KopQSysO
KDwRglsSF
OubMjOILHri
RSqxwl
DfrZ
nEizJHDpzip
QAOi
rYDAhmEl
FPvLCps
qvmvJMYIhw
ECbOFKHNJqt
ipYxU
tcbwbrybWRg
OwkxQhnDxeg
ZfuxDNeSO
qoTez
kwLM
ZeEh
bkpNSGGwLC
whKcEHRmQRb
JdrQMX
iLJIOf
LIHZPGTTU
tzJuFXIKwNcH
IcFz
FWGDx
yopXGWf
WIKYpmBAhXG
QpcDouYHOkHv
epYeR
EdnrHttYfbX
zgvkZcx
GcqYMRLdGt
jeXdrcEfpYh
WkiGs
WPCxDkSz
CAUffmFnQj
NilQxrjjeOV
HpQilkMh
搜索
查看: 5263|回复: 48

[DSDT] 适用于OpenCore的T440P电池hotpatch补丁制作方法(内容已更新) [复制链接]
跳转到指定楼层
复制 

Rank: 2Rank: 2

UID
1522243
帖子
67
PB币
178
贡献
0
技术
0
活跃
441
楼主
发表于 2020-3-11 23:21:00 IP属地湖北 |只看该作者 |倒序浏览
快御云安全
本帖最后由 snowDice 于 2020-3-12 09:03 编辑

          最近将T440P由Clover换成OpenCore引导,折腾了下电池的hotpatch补丁制作,现在把方法做个记录。

一、准备工作

     1.Clover引导界面按F4提取DSDT.aml文件

    2. 下载MaciASLhttps://github.com/acidanthera/MaciASL/releases

    3.下载OC-littlehttps://github.com/daliansky/OC-little/archive/master.zip)(注:本教程来源于此文件夹的电池补丁目录下的README.md文件,强烈建议阅读)

二、hotpatch补丁制作
     1.MaciASL打开用Clover提取到的DSDT.aml文件,然后搜索 EmbeddedControl关键字,如下;


    2. 可以发现,EmbeddedControl关键字左侧有ECOR这个词,在DSDT.aml文件中搜索ECOR。然后使用MaciASL新建空白文件,将DSDT.aml文件中所有” Field (ECOR, ByteAcc, NoLock, Preserve){……}”复制到新空白文件,文件后缀名为dsl。

    同时,在DSDT.aml文件中查找GBIF和GBST方法,将两个方法的所有内容复制到上文件中。方法的内容是以”{“开始,以”}”结束。

    3. 筛选字段
由于苹果使用的 ACPI 规范和 DSDT 解析器与常规 PC 不同,无法读写 ACPI EC 中超过 8 位的 `FieldUnit`(字段单元),导致与电池相关的 `Method`(函数方法)无法正常使用(其中 `_BIF` 获取电池信息,`_BST` 获取电池状态),这时候,我们就需要运用 Hotpatch 方式修补 ACPI 来使 SMC 电池驱动正确传递 ACPI EC 信息给 macOS 来识别电池信息和状态。

在上一步的文件中,分别搜索GBIFGBST方法里SBBMHIIDSBFC等关键词,如下所示,若关键词后的数字大于8,将其记录下来,若小于8,则不用管它。

         


    最后,方法内使用的关键词整理如下:
    数字为16SBRCSBFCSBACSBVOSBBMSBDCSBDVSBSN
    数字为32SBCH
    数字为128SBMNSBDN
对照上述关键词,将含有关键词的Field (ECOR, ByteAcc, NoLock, Preserve){……}的内容留下,不含有搜索到关键词的Field部分删除。
    4. 拆分字段并计算偏移量
     在留下的Field (ECOR, ByteAcc, NoLock, Preserve){……}内容中进行字段拆分。OC-little——电池补丁——各机型补丁文件夹下后缀名为dsl的文件里有具体字段的拆分写法,可以直接复制过来。
    例如,16位的字段可以拆分为:
SBRC,   16     拆分    BRCA,8,BRCB,8,   
    32位的字段拆分
SBCH,   32   拆分成  BCH0,8,BCH1,8,BCH2,8,BCH3,8
    128位的字段不用拆分。
需要注意的是其中的Offset,它表示偏移量,每 8 位进 1,以十六进制表示。如果某个Field内容中有多个字段需要拆分,需要计算该字段的偏移量。另外,拆分出来的字段如BRCABRCB等需要注意尽量不要与DSDT.aml存在重复,否则可能引起错误。
另外,为了避免与原始DSDT冲突,将所有Filed括号内的EmbeddedControl左侧ECOR关键词改为ECR1(改成和ECOR不一样即可)。最终结果如下:
  1. OperationRegion (ECR1, EmbeddedControl, 0x00, 0x0100)
复制代码
注://后的内容会被注释掉,可以没有。
5.修改GBIFGBST方法内的字段
     GBIFGBST这两个方法中,依次修改寻找到的字段。修改的原理可参见README.md文件。
16位的字段改写方式如:
SBBM     改成 B1B2(BBM0, BBM1)
32位的字段改写方式如:
SBCH      改成 B1B4(BCH0, BCH1, BCH2, BCH3)
   128位的字段改写方式如:
                   SBDN     改成  RECB(0xA0,128)
6.汇总
     找到OC-little——电池补丁——说明示例里的SSDT-BATT.dsl,用MaciASL打开。依据DSDT.aml修改文件里的EC路径  ,我的路径是(_SB_.PCI0.LPC.EC)
     然后,将前几步得到的内容复制到SSDT-BATT.dsl文件的EC括号内,紧挨着大括号。
  1. Scope (_SB.PCI0.LPC.EC)
  2. {
  3.       内容复制到这个位置,注意不要覆盖原有的内容
  4. }
复制代码

     由于OpenCoreDSDT补丁会对电脑上所有的系统造成影响,所以需要对GBIFGBST方法内部添加`_OSI` 判断。但由于我们已经有了修改了GBIFGBST方法,为了不影响windows下电池信息的获取,需要将原本的GBIFGBST方法重命名,可以重命名为XBIFXBST
修改后形式如下:
  1. Method (GBIF, 0, NotSerialized)
  2. {
  3.      If (_OSI ("Darwin"))
  4.     {
  5.          前几步得到的GBIF方法本来的内容放在这里,mac系统会执行这里的内容。
  6.     }
  7.     Else
  8.    {
  9.     Return (\_SB.PCI0.LPC.EC.XBIF(Arg0, Arg1, Arg2)) //Windows系统执行这里的内容,所以是改名后的方法。
  10.     }
复制代码


    GBST方法的处理类似,只不过Return 处改为Return (\_SB.PCI0.LPC.EC.XBST(Arg0, Arg1, Arg2, Arg3))
    另外,为保证dsl文件编译通过,需要添加缺失的obj,例如:
    External(_SB.PCI0.LPC.EC.BATM, MutexObj)
    External(_SB.PCI0.LPC.EC.HIID, FieldUnitObj)
   
    External(_SB.PCI0.LPC.EC.XBIF, MethodObj)
    External(_SB.PCI0.LPC.EC.XBST, MethodObj)

      可以将SSDT-BATT.dsl文件里未用到的W16BWE1BWECB方法的内容删除,电池的Hotpatch补丁就修改好了。使用[size=18.6667px]MaciASL将其另存为aml文件,放入OC目录下的ACPI文件夹里,并填入配置文件config.plist[size=18.6667px]ACPI-Add处并启用配合OC-little——电池补丁文件夹内的更名样本(包括基本更名和Mutex0更名),将其填入配置文件config.plist的ACPI-Patch处并启用,Mac系统的电池信息就可以正常获取了。    ThinkPad单电池笔记本的电池补丁应该都可以这样来做。
    知识有限,如有错误和疏漏处,请多多包涵。
   
附件: 你需要登录才可以下载或查看附件。没有帐号?注册
1

查看全部评分

Rank: 2Rank: 2

UID
4853478
帖子
184
PB币
148
贡献
0
技术
0
活跃
196
沙发
发表于 2020-3-12 06:51:39 IP属地吉林 |只看该作者
谢谢分享。6666

Rank: 5Rank: 5Rank: 5

UID
4569587
帖子
439
PB币
53
贡献
0
技术
1
活跃
1252
板凳
发表于 2020-3-12 08:28:20 IP属地广东 |只看该作者
快出教程,不然楼主没鸡鸡

Rank: 2Rank: 2

UID
1522243
帖子
67
PB币
178
贡献
0
技术
0
活跃
441
4F
发表于 2020-3-12 09:05:29 IP属地湖北 |只看该作者
87676503 发表于 2020-3-12 08:28
快出教程,不然楼主没鸡鸡

内容已更新。

Rank: 5Rank: 5Rank: 5

UID
4569587
帖子
439
PB币
53
贡献
0
技术
1
活跃
1252
5F
发表于 2020-3-12 14:17:57 IP属地广东 |只看该作者
链接:https://pan.baidu.com/s/1PrQMuNU9FgdmlU8Eu_KPDg
提取码:opm8

我的华硕。上面有原始dsdt.帮忙看看。没有gbif  gbst 也比较少的内容。。

Rank: 2Rank: 2

UID
1522243
帖子
67
PB币
178
贡献
0
技术
0
活跃
441
6F
发表于 2020-3-12 15:58:52 IP属地湖北 |只看该作者
87676503 发表于 2020-3-12 14:17
链接:https://pan.baidu.com/s/1PrQMuNU9FgdmlU8Eu_KPDg
提取码:opm8

我看了你的DSDT,你的跟我的差别有点大,你的EmbeddedControl不止一个。不过我对比了OC-little——电池补丁——其他品牌这个文件夹里的SSDT-OCBAT0-ASUS_FL5900U.dsl这个文件,这个文件里的内容跟你的电脑的DSDT里SMBR、SMBW、SMBW方法内容是一样的。也就是说SSDT-OCBAT0-ASUS_FL5900U.dsl这个补丁有可能也适合你的电脑,你可以试试。
PS. 记得配合ACPI重命名,补丁里写的4个,如下。
  1. // battery
  2. // In config ACPI, _BIX renamed XBIX
  3. // Find:     5F 42 49 58
  4. // Replace:  58 42 49 58
  5. //
  6. // In config ACPI, SMBR renamed XMBR
  7. // Find:     53 4D 42 52 0B
  8. // Replace:  58 4D 42 52 0B
  9. //
  10. // In config ACPI, SMBW renamed XMBW
  11. // Find:     53 4D 42 57 0D
  12. // Replace:  58 4D 42 57 0D
  13. //
  14. // In config ACPI, SMBW renamed XCSB
  15. // Find:     45 43 53 42 07
  16. // Replace:  58 43 53 42 07
复制代码


Rank: 5Rank: 5Rank: 5

UID
4569587
帖子
439
PB币
53
贡献
0
技术
1
活跃
1252
7F
发表于 2020-3-12 22:04:11 IP属地广东 |只看该作者
snowDice 发表于 2020-3-12 15:58
我看了你的DSDT,你的跟我的差别有点大,你的EmbeddedControl不止一个。不过我对比了OC-little——电池补 ...

它里面电池拆分的地址只有一个,我要拆分的有10多个,不知道怎么添加,修改了编译,下面会报错,没理由我要列10多个和上面对应的,,就这里不会。。eco改成自己机子的ec。这个会

Rank: 2Rank: 2

UID
1522243
帖子
67
PB币
178
贡献
0
技术
0
活跃
441
8F
发表于 2020-3-12 22:44:04 IP属地湖北 |只看该作者
87676503 发表于 2020-3-12 22:04
它里面电池拆分的地址只有一个,我要拆分的有10多个,不知道怎么添加,修改了编译,下面会报错,没理由我 ...

你直接用SSDT-OCBAT0-ASUS_FL5900U.dsl这个补丁(记得先另存为aml格式的),再加上4个重命名试过了么?另外,你的DSDT是在a555l原生dsdt.zip这个文件里的吧?

Rank: 2Rank: 2

UID
1287529
帖子
158
PB币
196
贡献
0
技术
0
活跃
309
9F
发表于 2020-3-12 22:49:47 IP属地黑龙江 |只看该作者
观看了一下  回去试试

Rank: 1

UID
529435
帖子
76
PB币
573
贡献
0
技术
0
活跃
157
10F
发表于 2020-3-16 17:00:42 IP属地河北 |只看该作者
楼主的OC文件能分享一下吗?最近也想转OC折腾一下。同机型。

Rank: 2Rank: 2

UID
1522243
帖子
67
PB币
178
贡献
0
技术
0
活跃
441
11F
发表于 2020-3-16 21:50:29 IP属地湖北 |只看该作者
csfw 发表于 2020-3-16 17:00
楼主的OC文件能分享一下吗?最近也想转OC折腾一下。同机型。

EFI见附件。我的T440P已经通过编程器刷BIOS解锁CFG Lock,无线网卡也更换为dw1560。请你根据自己的电脑情况调整OC设置。

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

Rank: 1

UID
529435
帖子
76
PB币
573
贡献
0
技术
0
活跃
157
12F
发表于 2020-3-16 22:22:12 IP属地河北 |只看该作者
snowDice 发表于 2020-3-16 21:50
EFI见附件。我的T440P已经通过编程器刷BIOS解锁CFG Lock,无线网卡也更换为dw1560。请你根据自己的电脑情 ...

我的无线是上的1820,最近也在看CFG Lock,其实我现在clover已经很好了,但是看所有人都在转oc,所以也打算折腾一下,无论如何,感谢楼主的分享

Rank: 7Rank: 7Rank: 7

UID
668157
帖子
2190
PB币
10103
贡献
0
技术
42
活跃
1147

7周年庆典勋章

13F
发表于 2020-3-16 22:41:19 IP属地湖北 |只看该作者
同款440p efi wifi不正常

Rank: 2Rank: 2

UID
1522243
帖子
67
PB币
178
贡献
0
技术
0
活跃
441
14F
发表于 2020-3-16 22:53:42 IP属地湖北 |只看该作者
csfw 发表于 2020-3-16 22:22
我的无线是上的1820,最近也在看CFG Lock,其实我现在clover已经很好了,但是看所有人都在转oc,所以也打 ...

不客气。我也是疫情期间无聊才折腾转OC的。T440P的CFG Lock我用Grub shell改不成功,就用编程器把BIOS提取出来,然后修改CFG Lock对应位置的二进制值,最后再用编程器把BIOS刷回去。

Rank: 2Rank: 2

UID
1522243
帖子
67
PB币
178
贡献
0
技术
0
活跃
441
15F
发表于 2020-3-16 22:57:37 IP属地湖北 |只看该作者
ych198802 发表于 2020-3-16 22:41
同款440p efi wifi不正常

你还是用的机器自带的intel网卡?

Rank: 2Rank: 2

UID
4861772
帖子
68
PB币
171
贡献
0
技术
0
活跃
116
16F
发表于 2020-3-16 23:18:36 IP属地广东 |只看该作者
大佬能帮我看看我的电池吗,没有一个超过8位的,就是死活修补不了。有人说没有超过8位的不用VirtualSMC电池驱动改用APCI电池驱动,试了也不行。

Rank: 7Rank: 7Rank: 7

UID
668157
帖子
2190
PB币
10103
贡献
0
技术
42
活跃
1147

7周年庆典勋章

17F
发表于 2020-3-17 17:31:25 IP属地湖北 |只看该作者
snowDice 发表于 2020-3-16 22:57
你还是用的机器自带的intel网卡?

是 刷bios太麻烦 用的网线

Rank: 2Rank: 2

UID
1522243
帖子
67
PB币
178
贡献
0
技术
0
活跃
441
18F
发表于 2020-3-17 19:51:28 IP属地湖北 |只看该作者
ych198802 发表于 2020-3-17 17:31
是 刷bios太麻烦 用的网线

可以看看这个,https://bbs.pcbeta.com/viewthread-1848662-1-1.html,mac下的Intel无线网卡驱动。

Rank: 2Rank: 2

UID
1522243
帖子
67
PB币
178
贡献
0
技术
0
活跃
441
19F
发表于 2020-3-17 20:21:43 IP属地湖北 |只看该作者
Sunny、今夕何夕 发表于 2020-3-16 23:18
大佬能帮我看看我的电池吗,没有一个超过8位的,就是死活修补不了。有人说没有超过8位的不用VirtualSMC电池 ...

不敢当,这个我也是一知半解。你的电脑型号在OC-little里没有现成的是吧?

Rank: 7Rank: 7Rank: 7

UID
668157
帖子
2190
PB币
10103
贡献
0
技术
42
活跃
1147

7周年庆典勋章

20F
发表于 2020-3-17 20:36:52 IP属地湖北 |只看该作者
snowDice 发表于 2020-3-17 19:51
可以看看这个,https://bbs.pcbeta.com/viewthread-1848662-1-1.html,mac下的Intel无线网卡驱动。

谢谢 不过还是不会
回顶部
Copyright (C) 2005-2024 pcbeta.com, All rights reserved
Powered by Discuz!  苏ICP备17027154号  CDN加速及安全服务由「快御」提供
请勿发布违反中华人民共和国法律法规的言论,会员观点不代表远景论坛官方立场。
远景在线 | 远景论坛 | 苹果论坛 | Win11论坛 | Win10论坛 | Win8论坛 | Win7论坛 | WP论坛 | Office论坛