# 修复嵌入式控制器:手动

待办事项:

  • 完成边缘案例和SSDT编辑示例

# 查找ACPI路径

要找到ACPI路径,你有两个方法:

# DSDT

找到ACPI的路径是相当容易的,首先打开你从转储DSDT编译和编译与MaciASL(如果在macOS)或任何其他文本编辑器,如果在Windows或Linux(VSCode有一个ACPI扩展 (opens new window)也可以帮助)的反编译DSDT。

接下来,搜索PNP0C09。你应该得到类似:

从上面的例子中我们可以看到两个主要的东西:

  • 我们的嵌入式控制器的名称
    • 在本例中是EC0
  • 我们嵌入式控制器的路径
    • PC00.LPC0

但现在我们进入了边界情况,太有趣了!

需要检查的主要有:

如果以上这些都不适用于你,那么你已经为下一节做好了准备:

# 设备管理器

如果您已经在这台机器上安装了Windows,那么找到EC路径是相当容易的。

首先在Windows中打开设备管理器并查找名为“嵌入式控制器”的设备。找到后,单击它并选择“BIOS设备名称”条目。你会得到这样的结果:

从上面可以看到,我们的路径是SB.PC00.LPC0.EC0

现在有了路径,你可以转到这里: 对示例SSDT进行编辑

# 对示例SSDT进行编辑

现在我们有了我们的ACPI路径,让我们获取我们的SSDT并开始工作:

现在,当打开这个SSDT时,您将注意到一些事情。主要有:

  • 一些代码被注释掉了
    • 这是禁用我们的EC的代码
    • 笔记本电脑用户不应取消此注释
  • 有一个新的EC叫做Device (EC)
    • 不要重命名,这将是我们提供给macOS的EC

之前:

External (_SB_.PCI0.LPCB, DeviceObj) <- Rename this

Scope (_SB.PCI0.LPCB) <- Rename this

在我们找到的示例路径之后,SSDT应该看起来像这样:

之后:

External (_SB_.PC00.LPC0, DeviceObj) <- Renamed

Scope (_SB.PC00.LPC0) <- Renamed

# 边缘情况

# 出现多个PNP0C09

当显示出多个PNP0C09时,我们需要检查以下属性:

  • _HID (硬件ID)
  • _CRS (当前资源设置)
  • _GPE (通用事件)

这些表示的是这个PNP0C09设备是否真实,根据ACPI规范 (opens new window). 所以符合上述条件的就是我们想要禁用的。

# 没有PNP0C09出现

当这种情况发生时,你只需要为macOS创建一个“虚拟”EC。

尝试搜索任何名为“LPCB”,“LPC0”,“LPC”,“SBRG”,“PX40”的设备。如果你有其中任何一个,尝试使用这些设备的LPC路径来代替嵌入式控制器的路径。

请注意不要取消EC禁用代码的注释,因为在你的机器中没有被认为是“EC”的设备。

# PNP0C09已经命名为EC

祝贺你!不需要创建SSDT-EC!然而,如果你是Skylake或更新的,你仍然会想要USBX。

预构建可以在这里获取: SSDT-USBX.aml (opens new window)

# PNP0C09已经有了一个_STA方法

这相当于没有一个EC,因为我们无法通过SSDT-EC控制它,相反,我们需要为macOS创建一个“虚拟”EC。您仍然需要找到此设备的PCI和LPC路径。所以,就像创建一台笔记本电脑SSDT-EC/USBX一样,按照指南操作。

已经有STA的EC的例子:

Credit to rottenpants466

# 编译SSDT

完成SSDT后,您现在可以准备编译SSDT!

# 结束

完成SSDT后,可以转到下一页完成其余的SSDT,如果准备好了,可以转到此处: