USBInjectAll.kext 是黑苹果屋搜集到的一款黑苹果USB驱动,支持USB3.0修复摄像头等问题,苹果系统在OS X 10.11之后改变了USB驱动的加载方式,以至于大多数USB端口无法被驱动,对于黑苹果用户来说是个致命问题,USB无法驱动也就意味着你的键盘鼠标等USB设备无法使用,还有奇葩的摄像头问题。USBInjectAll.kext驱动文件可以帮助黑苹果驱动你的USB设备,包括3.0的端口和摄像头等问题。
0.7.5 版本分支由@Sniki维护并发布,并不是上一版作者 Rehabman,如果遇到问题,可退回 0.7.1 版
OS-X-USB-Inject-All 是一款用于黑苹果 macOS 的 USB 驱动程序。在macOS 10.11+中,Apple改变了USB驱动程序的工作方式。在没有端口注入器的情况下,驱动程序使用ACPI获取有关哪些端口处于活动状态的信息,但是通常情况下,这些信息是错误的。如果使用端口注入器(port Injector),就像Apple在自己的Mac上一样,就可以避免动手校正DSDT。但是,为了创建这样的注入器,您必须首先确定实际使用的端口。为此需要注入所有端口,以便可以测试计算机上的所有端口,以确定哪些端口与每个可用端口地址相对应。无法测试已禁用的端口。
以上就是这个驱动的主要用途。此驱动会尝试为每个控制器以及集线器注入所有端口。您可以(临时)使用此驱动启用所有端口,以便确定哪些端口确实需要在最终注入器中。需要注意的是,驱动仅注入EH01.PRT1和EH02.PRT1上的(潜在)集线器,如果需要其他集线器则需要手动修改。截至目前,还没有内部集线器连接到其他端口的案例。驱动会根据特定的USB控制器芯片组自动确定端口及其地址。
- EH01: 8-USB2 ports PR11-PR18.
- EH02: 6-USB2 ports PR21-PR28.
- EH01 hub: 8-USB2 ports HP11-HP18.
- EH02 hub: 8-USB2 ports HP21-HP28.
- XHC, 7-series chipset (8086:1e31): 4-USB2 ports HS01-HS04, 4-USB3 ports SS01-SS04.
- XHC, 8/9-series chipset (8086:9xxx): 9-USB2 ports HS01-HS09, 6-USB3 ports SS01-SS06.
- XHC, 8/9-series chipset (8086:8xxx): 14-USB2 ports HS01-HS14, 6-USB3 ports SS01-SS06.
- XHC, 8/9-series chipset (8086:9cb1): 11-USB ports HS01-HS11, 4-USB3 ports SS01-SS04.
- XHC, 100-series chipset (8086:a12f): 14-USB2 ports HS01-HS14, 10-USB3 ports SS01-SS10, plus USR1/USR2)
- XHC, 100-series chipset (8086:9d2f): 10-USB2 ports HS01-HS10, 6-USB3 ports SS01-SS06, plus USR1/USR2)
- XHC, 200-series/300-series chipset, etc.
截止目前,USBInjectAll.kext 仅适用于 macOS 10.11 及以上版本,且仅支持英特尔控制器。驱动中已包含最常用的SMBIOS ID。如果没有自定义配置,则不推荐长期使用此驱动程序。最好创建一个仅包含目标计算机上活动端口的定制注入器,或者创建一个SSDT来定制由USBInjectAll.kext完成的端口注入。
如果您有英特尔100系列主板,那么XHCI上最多可以有26个端口,因此您应该相应地增加限制:
描述: 修改AppleUSBXHCIPCI的15个端口限制到26个
名称: AppleUSBXHCIPCI
查找: <83bd8cfe ffff10>
替换: <83bd8cfe ffff1b>
您可以从签入该项目的文件config_patches.plist中复制/粘贴补丁程序,其中还包含重命名EHC1-> EH01和EHC2-> EH02所需的DSDT补丁,这对于避免此驱动与SMBIOS本地驱动中的任何内置端口注入器之间发生冲突非常重要。注意:不要在没有定制设置的情况下长期使用本驱动,可能会产生问题。如果XHC上的端口超过15个,则应使用FakePCIID_XHCIMux将这些USB3端口的USB2组件路由到EHCI。如果通过XHC路由多达8个USB2端口,则很容易保持在限制之下。此驱动在安装场景中可能会有所帮助,它能在在Clover EFI / Clover / kexts 中运行。
定制注入属性
提供了两种机制来定制此驱动执行的注入。内核标识符“uia_exclude”可用于消除通常会注入的端口。“uia_exclude”需要一个字符串,该字符串具有多个以逗号分隔的端口标识符。
例如,在没有FakePCIID_XHCIMux的联想u430上,蓝牙在XHC的HS06位置。触摸屏位于HS01。可以通过使用内核标识符“uia_exclude = HS01”引导或使用“uia_exclude = HS06”禁用蓝牙引导来禁用触摸屏。要同时禁用这两个功能,则使用“uia_exclude = HS01,HS06”。如果使用FakePCIID_XHCIMux,触摸屏则位于EH01的USB端口1上的集线器上。要禁用此集线器端口,使用“uia_exclude = HP11”。您可以轻松查看哪些设备连接到了哪些端口。USBInjectAll.kext注入的每个端口标识符都是唯一的,因此您可以轻松识别每个端口标识符。
另外还有一些其他标识符:
- 标识符 -uia_exclude_hs:排除所有HSxx端口;
- 标识符 -uia_exclude_ss:排除所有SSxx端口
- 标识符 -uia_exclude_xhc:禁用XHC上的注入
- 标识符 -uia_include:即使正常情况下也会排除某些端口。例如:-uia_exclude_hs uia_include = HS01(保留HS01但排除其他HSxx)
- 但是排除端口并不能提供需要的灵活性。可以通过ACPI配置Info.plist中ConfigurationData的所有数据。
- 例如,如果我们只想在XHC上为8086_8xxx芯片组启用SS01:
DefinitionBlock ("", "SSDT", 1, "hack", "UIAC", 0)
{
Device(UIAC)
{
Name(_HID, "UIA00000")
// override XHC configuration to have only one port
Name(RMCF, Package()
{
"8086_8xxx", Package()
{
"port-count", Buffer() { 0xa, 0, 0, 0 },
"ports", Package()
{
"SS01", Package()
{
"UsbConnector", 3,
"port", Buffer() { 0xa, 0, 0, 0 },
}
}
}
})
}
}
SSDT-UIAC.dsl中也提供了一个示例,通过这种机制可以更改为每种类型的设备注入的所有数据。
SSDT-UIAC-ALL.dsl包含与Info.plist中相同的数据,您可以将其用作模板,以针对计算机上的特定USB配置建立自己的自定义SSDT,删除不需要的端口,或更改UsbConnector或portType以匹配您自己的USB硬件配置,包括所有XHC标识符(vendor_device),因此您可能应该从删除不适用于您的XHC设备的配置开始,仅保留设备的配置。您可以在XHC节点下的IORegistryExplorer中看到您的设备ID(供应商ID和设备ID)。
注意:此驱动默认您已重命名为EHC1-> EH01和EHC2-> EH02。它还默认您的XHCI控制器名为XHC或XHCI(重命名前为XHC1)。这些名称EH01 / EH02 / XHC最好避免与Apple计算机的内置端口注入器冲突。某些Intel xHCI控制器本身不受支持,需要注入器。对于这些系统,请安装XHCI-unsupported.kext。本地支持取决于版本,您可以在/System/Library/Extensions/IOUSBHostFamily.kext/Contents/Plugins/AppleUSBXHCIPCI.kext/Contents/Info.plist中查看,以确认xHCI是否受支持。
需要XHCI-unsupported.kext的典型xHCI:
- X99系列芯片组XHC控制器,8086:8d31
- 200系列芯片组XHC控制器,8086:a2af(取决于macOS版本)
- 300系列芯片组XHC控制器,8086:a36d或8086:9ded
评论5