- UID
- 1636165
- 最后登录
- 1970-1-1
- 阅读权限
- 30
- 精华
- 主题
- 回帖
- 0
- 积分
- 262
- PB币
-
- 威望
-
- 贡献
-
- 技术
-
- 活跃
-
|

本帖最后由 reticencezcl 于 2018-10-25 17:12 编辑
真不爽 Sketch 52的系统要求到10.13了,只能告别我撑了那么久的10.12 ;本想直接上最新的Mojave,但新系统用着总是提心吊胆的,真怕更新下,又挂了哪个驱动「黑果的无奈。。」,So,还是选择了HighSierra的最新版,这里折腾到尽量完美,至少段时间内不会有大问题了。
而且,我的PC还是4代CPU时的配置,上10.14找不到方法驱动我的AR5008无线网卡,也不想再换了~
我的机器 硬件:i7-4710MQ,8系列芯片组,1个USB2.0,2个USB3.0,1个eSATA接口「亦当作USB3.0」,一个前置摄像头「USB2.0」
系统:macOS HighSierra 10.13.6
这当然不是我想出来的
这个方法来自Rehanman大神的https://www.tonymacx86.com/threads/guide-creating-a-custom-ssdt-for-usbinjectall-kext.211311/这篇分享,我就是将里面的方法,用自己的案例讲述一遍,需要的可以直接阅读原文。
我想要睡眠啊 我要睡眠的功能,必需USB内建,而且可以避免一些关机,重启的BUG,本次的方法也能避过接口限制,关掉不使用的接口等等。
失败到怀疑人生 1. 只是加载了FakePCIID_XHCIMux.kext ,所有USB口都可以驱动,3.0的最大速度在5G/s,但均未内建;
2. 注入USBInjectAll.kext,并修改info.plist中的参数,或者USB2.0驱动,USB3.0无法读取,提示“需要电源”,或者全都无法驱动,或者USB3.0驱动,USB2.0无法读取;
3. 打上解开端口限制补丁,也没效果
4. 。。。
启用EHCI总线的方法
前期准备
为了创建一个有正确USB信息的SSDT补丁,首先必须找出所有可用的接口,删掉不需要的接口,所以必须看到所有的接口,这就需要:
- EHC1->EH01 和 EHC2->EH02
- XHC1->XHC「注:是XHC1,不是XHCI」,没有就不用重新命名
在config.plist中写作:
- comment: change EHC1 to EH01
- find: 48484331
- replace: 45483031
- comment: change EHC2 to EH02
- find: 48484332
- replace: 45483032
复制代码 我的机子没XHC1,所以需要XHC1->XHC的话,去看下自己的DSDT吧。如果重命名不知怎么操作的话,先去了解下hotpatch吧。
- - 在KextsToPatch打上解除端口限制的补丁,去这个链接 https://github.com/RehabMan/OS-X-USB-Inject-All/archive/master.zip 中对应自己的系统版本去查,从10.11-10.14的补丁都有,例如我的10.13.6:
- Comment: disable port limit in XHCI kext
- Name: AppleUSBXHCIPCI
- Find: 837D880F 0F83A704 0000
- Replace: 837D880F 90909090 9090
复制代码- 安装USBInjectAll.kext到clover/ACPI/Pathced
- 如果需要打开EHCI控制器「USB2.0总线,XHCI是USB3.0总线」,安装FakePCIID.kext + FakePCIID_XHCIMux.kext
- 如果已经注入了USBInjectAll.kext相关的SSDT,可以在启动参数中加入*-uia_ignore_rmcf* 来暂时屏蔽
- 200系列主板,300系列主板,也可注入对应的kext「XHCI-200-series-injector.kext、XHCI-300-series-injector.kext」
所以方法有两个:
启用ECHI「USB2.0」总线
不启用ECHI「USB2.0」总线,即全部用XHC「USB3.0」总线
我是用第一个方法成功的,第二个没成功,可能第二种比较适合没EHCI的平台「比如SkyLake」吧(′ω`)
找出可用接口
注入了USBInjectAll.kext、FakePCIID.kext + FakePCIID_XHCIMux.kext后,用IORegistryExplorer这个app来找出可用的接口,没的百度下载吧。
1. 打开IORegistryExplorer,找到EH01、EH02、XHC「*原来是EHC1、EHC2,但是准备阶段,我重命名过了*」,注意!这里不要用搜索找到,直接按照路径来找,我的EH01、EH02在AppleACPIPlatformExpert/PCI@0/AppleACPIPCI这里,XHC往下拉即可找到。
这些是我的USB接口:
可以看到EH01下的PR11下的HP13、EH02下的PR21下的HP22、HP24正在被使用,然后拔出相应的设备,可以看到原来的位置有了删除线,并显示红色:
2. 用USB2.0和USB3.0的设备在每个接口都插啊、拔啊、插啊、拔啊 (′>‿<`),好开心啊~
所以动作完成后,可以看到:
其中EH01是总线,PR11是集线器,HP11是具体的端口,打开系统报告中的USB项也是这个结构:
所以这些集线器、接口中可用的有:
- EH01/PR11/HP11: 左上角USB2.0
- EH01/PR11/HP12: 左下角USB2.0
- EH01/PR11/HP13: 右上角USB2.0
- EH02/PR21/HP22: 右下角USB2.0
- EH02/PR21/HP24: 前置摄像头
- XHC/SSP1: 左上角USB3.0「兼容2.0」
- XHC/SSP2: 左下角USB3.0
- XHC/SSP3: 右上角USB3.0
复制代码
为USBInjectAll.kext创建相应的SSDT
USBInjectAll.kext所有的信息都存在于其中的 Info.plist中,当它加载时,它会匹配相应的EH01/EH02/XHC,并注入对应的接口设备,但是一个SSDT可以覆盖它在Info.plist中的数据。大神提供了一个模板,涵盖了USBInjectAll.kext.Info.plist中的所有数据。
所以接下来,
- 下载这个模板https://github.com/RehabMan/OS-X-USB-Inject-All/raw/master/SSDT-UIAC-ALL.dsl
- windows通过Aid64,mac通过IORegistryExplorer查看USB3.0的的device-id,比如我的是:
所以这个USB3.0总线对应SSDT-UIAC-ALL.dsl中的“*8086_8c31*”项,所以我只需要SSDT中XHC的“*8086_8xxx*”部分。
然后根据第2步得出的可用接口,可以确定移除的集线器和接口是:
- EH01中的PR12~PR18,PR11中的HP14~HP18
- EH02中的PR22~PR26,PR21中的HP21、HP23、HP25~HP28
- XHC中的HS01~HS14,SSP4
复制代码
可以得到我的SSDT-UIAL:
DefinitionBlock ("", "SSDT", 2, "hack", "UIAC-ALL", 0)
{
Device(UIAC)
{
Name(_HID, "UIA00000")
Name(RMCF, Package()
{
"HUB1", Package()
{
"port-count", Buffer() { 8, 0, 0, 0 },
"ports", Package()
{
"HP11", Package() // usb3&2 top left
{
//"UsbConnector", 0,
"portType", 0,
"port", Buffer() { 1, 0, 0, 0 },
},
"HP12", Package() // usb3&2 bottom left
{
//"UsbConnector", 0,
"portType", 0,
"port", Buffer() { 2, 0, 0, 0 },
},
"HP13", Package() // usb3&2 top right
{
//"UsbConnector", 0,
"portType", 0,
"port", Buffer() { 3, 0, 0, 0 },
},
},
},
"HUB2", Package()
{
"port-count", Buffer() { 6, 0, 0, 0 },
"ports", Package()
{
"HP22", Package() // usb2 bottom right
{
//"UsbConnector", 0,
"portType", 0,
"port", Buffer() { 2, 0, 0, 0 },
},
"HP24", Package() //camera
{
//"UsbConnector", 0,
"portType", 0,
"port", Buffer() { 4, 0, 0, 0 },
},
},
},
"EH01", Package()
{
"port-count", Buffer() { 8, 0, 0, 0 },
"ports", Package()
{
"PR11", Package()
{
"UsbConnector", 255,
"port", Buffer() { 1, 0, 0, 0 },
},
},
},
"EH02", Package()
{
"port-count", Buffer() { 6, 0, 0, 0 },
"ports", Package()
{
"PR21", Package()
{
"UsbConnector", 255,
"port", Buffer() { 1, 0, 0, 0 },
},
},
},
"8086_8xxx", Package()
{
"port-count", Buffer() { 21, 0, 0, 0 },
"ports", Package()
{
"SSP1", Package() // usb3 top left
{
"UsbConnector", 3,
"port", Buffer() { 16, 0, 0, 0 },
},
"SSP2", Package() // usb3 bottom left
{
"UsbConnector", 3,
"port", Buffer() { 17, 0, 0, 0 },
},
"SSP3", Package() // usb3 top right
{
"UsbConnector", 3,
"port", Buffer() { 18, 0, 0, 0 },
},
},
},
})
}
}
其中XHC的"*8086_8xxx*"不改也是可以的,但为了让人明确这个SSDT的使用对象,就把这里改成"*8086_8c31*"「PS:也可以用XHC」,也就是:
"8086_8c31", Package()
{
"port-count", Buffer() { 21, 0, 0, 0 },
"ports", Package()
{
"SSP1", Package() // usb3 top left
{
"UsbConnector", 3,
"port", Buffer() { 16, 0, 0, 0 },
},
"SSP2", Package() // usb3 bottom left
{
"UsbConnector", 3,
"port", Buffer() { 17, 0, 0, 0 },
},
"SSP3", Package() // usb3 top right
{
"UsbConnector", 3,
"port", Buffer() { 18, 0, 0, 0 },
},
},
},
EH01和EH02中的UsbConnector的数值不用改变,USB2.0的集线器驱动并不使用UsbConnector的数值,而其中的portType意义不明,大神的原话:
In this case, there is no need to modify any of the UsbConnector values, since they are already set correctly. The USB Hub driver in macOS/OS X does not use UsbConnector and we don't really understand the purpose of portType. You can experiment with different values if you need to. Refer to the hub driver Info.plist in IOUSBHostFamily.kext/Contents/PlugIns/AppleUSBHub.kext/Contents/Info.plist for ideas.
最后安装
把得到的SSDT-UIAL-ALL.aml「*SSDT-UIAL-ALL.dsl用MaciSAL另存为而来*」放到clover/acpi/patched,关闭解除接口限制补丁,重启后,内建就成功了,各个接口USB2.0、USB3.0的设备都可以正确识别了,用系统报告查看:
也可以用IORegistryExplorer查看:
不启用EHCI总线的方法
放在后面讲是因为我失败了,没有完全内建成功,但是这种方法挺适合没有EHCI总线的平台,比如SkyLake,甚至更新的;或者并不想启用EHCI的平台,也是分为通用的几个步骤,但我当时忘记截图了,所以我就直接用大神的例子了,就是直接翻译下。
前期准备
- 没有EHCI总线,也就是不用重命名EHCI了,如果你的DSDT中有XHC1,只要把XHC1->XHC或者XHCI
- 加载USBInjectAll.kext
- 打上结出接口限制补丁,链接在上面提供了
- 如果已经注入了USBInjectAll.kext相关的SSDT,可以在启动参数中加入-uia_ignore_rmcf 来暂时屏蔽
找出可用接口
跟第一个方法一样,也是在打开IORegistryExplorer,找到XHC后,不断地插入,拔出。。。
在完成后,可以看到:
所以这些集线器、接口中可用的有:
- HS01/SS01: 左前USB3
- HS02/SS02: 右前USB3
- HS03/SS03: 后方底部USB3
- HS04/SS04: 后方顶部USB3
- HS09: 蓝牙
复制代码 注意到,每个SSxx接口都对应一个HSxx接口,使用USB3.0设备时,启用SSxx接口;使用USB2.0设备时,启用HSxx接口;USB2.0只用HSxx接口。
*注:这个例子中XHC是“8086_a12f”*
为USBInjectAll.kext创建相应的SSDT
去除没用的接口,这里需要设置USBconnector types的数值,
USB2 = 0, USB3 = 3, internal 「内部的设备,比如蓝牙、摄像头」= 255
USB type C接口为9或者10,不太懂这个方向的说明,没接触过,找到 @黑果小兵 的话说就是:
USB type-C型端口可以是9或10,这取决于硬件如何处理USB type-C型设备/电缆的两种可能方向
如果USB-C在两个方向上使用相同的SSxx,则它具有内部开关(UsbConnector = 9)
如果USB-C在每个方向使用不同的SSxx,则它没有开关(UsbConnector = 10)
继续打开SSDT-UIAL-ALL,这个例子中所有的设备都显示在XHC下了,所以删除其他不用的部分,只保留“8086_a12f"部分即可,可以得到SSDT-UIAL-ALL.dsl:
DefinitionBlock ("", "SSDT", 2, "hack", "UIAC", 0)
{
Device(UIAC)
{
Name(_HID, "UIA00000")
Name(RMCF, Package()
{
"8086_a12f", Package()
{
"port-count", Buffer() { 26, 0, 0, 0 },
"ports", Package()
{
"HS01", Package() // HS USB3 front left
{
"UsbConnector", 3,
"port", Buffer() { 1, 0, 0, 0 },
},
"HS02", Package() // HS USB3 front right
{
"UsbConnector", 3,
"port", Buffer() { 2, 0, 0, 0 },
},
"HS03", Package() // HS USB3 rear bottom
{
"UsbConnector", 3,
"port", Buffer() { 3, 0, 0, 0 },
},
"HS04", Package() // HS USB3 rear top
{
"UsbConnector", 3,
"port", Buffer() { 4, 0, 0, 0 },
},
"HS09", Package() // bluetooth
{
"UsbConnector", 255,
"port", Buffer() { 9, 0, 0, 0 },
},
"SS01", Package() // SS USB3 front left
{
"UsbConnector", 3,
"port", Buffer() { 17, 0, 0, 0 },
},
"SS02", Package() // SS USB3 front right
{
"UsbConnector", 3,
"port", Buffer() { 18, 0, 0, 0 },
},
"SS03", Package() // SS USB3 rear bottom
{
"UsbConnector", 3,
"port", Buffer() { 19, 0, 0, 0 },
},
"SS04", Package() // SS USB3 rear top
{
"UsbConnector", 3,
"port", Buffer() { 20, 0, 0, 0 },
},
},
},
})
}
}
//EOF
最后安装
把得到的SSDT-UIAL-ALL.aml放到clover/acpi/patched,关闭解除接口限制补丁,重启后,内建就成功了,各个接口USB2.0、USB3.0的设备都可以正确识别了,用系统报告或者IORegistryExplorer查看。
总结
黑果折腾真是酸爽,查了好几天的资料,试过很多种方法,最后还是发现只用这么简单的几步就能完成了「*可能是我的4代的硬件优势*,现在已经很容易安装了 。
Rehabman大神真是太厉害了,之前的屏蔽独显都是看他在tonymacx86的文章才弄懂的。到这里我的机子就差不多完美了,可以愉快的体验macOS了,嘎嘎嘎~
大神原话说过,有些机器可能打了解除限制补丁就好了,但这不是一个长久的解决方法,是有可能会引起其他问题的,目前USBInjectAll.kext +SSDT-UIAL-ALL才是更好的解决方案。
PS:一点小技巧,不确定是否通用,但可以尝试:
现在HD4600的设备应该还是有的吧,这个注入ig-0x0a260006后的八苹果、花屏,不管用什么补丁,都无法修复,我的就是这样,据说是这张显卡的硬伤。但这次无意中发现,clover注入这个EDID:
- 00FFFFFF FFFFFF00 30E42303 00000000 00160104 95231378 0A25B5A1 59599D27 1C505400 00000101 01010101 01010101 01010101 0101E835 80A87038 16402024 550059C2 10000018 00000000 00000000 00000000 00000000 00000000 00FE004C 47204469 73706C61 790A2020 000000FE 004C5031 35365746 342D5350 42310069
复制代码 虽然开机会暗一下,但是八苹果、花屏就都没了。
在注入这个EDID之后,再用 *@冰水加劲Q* 这个大神gihub里的“一键开启HIDPI”的命令,https://github.com/xzhih/one-key-hidpi/blob/master/README-zh.md ,操作按这个链接里的说明就行~
得到的效果
这样了,虽然对于1080p的屏幕没啥实际用途,但是。。。颜值高啊!说不定能吸引个玩黑果的妹子或者对黑果有意向的妹子呢~
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?注册
×
|