前言
我也是看这里的文章学习的:xstar-dev.github.io/hackintosh_…
其中有些概念开始的时候晦涩难懂,后面尝试几次逐渐清晰,所以总结一下。
有情况的还是看完教程再来看这篇文章。
首先声明一下几点:
- 这不是一篇教程,只是学习后的经验总结
- 请谨慎尝试,做好为自己行为负责的准备。
概念
用程序员的眼光看待 ACPI 的代码,设备路径可以理解为作用域,而 EC 设备路径依据主板不同大致为这些:
- _SB.PCI0.LPCB.H_EC
- _SB.PCI0.LPCB.EC
- _SB.PCI0.LPCB.EC0
而电池补丁所应对的设备路径就是这个作用域下的 BAT0 (或者其他名称,参考上面教程去查找)
然后,EC 下定义了一些变量会被 BAT0 下面的方法使用到。
修改
首先明确一点,修改的是 BAT0 下的方法(又可以说是覆盖 BAT0 下的方法)。
EC 下定义了一些变量,根据教程,需要找到哪些变量需要被修改,需要符合下面两点:
- EC 作用域下的定义的 OperationRegion - Field {} 里面的长度大于 8 bit 的
- 在 BAT0 下函数中使用到的
就比如我的ssdt下,我整理了之后是:

这里面我列出了,哪些需要处理,以及它占据的内存地址。
但是并不一定要拆出新的变量来,因为模板文件提供了大于 32 位的拆分和读取的方法,此方法同样适用于 16 位。
所以我是这样写的:

后面注释是实际的调用变量,前面改成了RECB 进行读取,可以适用于任意长度,也不用担心拆分命名冲突的问题。