黑苹果日记五(USB)

    xiaoxiao2022-07-12  148

    设定为SMBios中的机型后,该研究一下USB接口的问题了。

    之前加了USBInjectAll.kext还是有作用的,可以驱动所有USB口。

    原生的USB驱动文件在以下目录:/S/L/E/IOUSBHostFamily.kext/Contents/PlugIns/AppleUSBEHCIPCI.kext

    打开下面的Contents/Info.plist,可以找到一堆与机型相关的配置。

    结合之前部分USB接口能用的现象,反复观察后,认为与下面的内容有关:

    <key>MacBookPro7,1-EHC1</key> <dict> <key>CFBundleIdentifier</key> <string>com.apple.driver.AppleUSBMergeNub</string> <key>IOClass</key> <string>AppleUSBMergeNub</string> <key>IONameMatch</key> <string>EHC1</string> <key>IOProviderClass</key> <string>AppleUSBEHCIPCI</string> <key>IOProviderMergeProperties</key> <dict> <key>port-count</key> <data> BgAAAA== </data> <key>ports</key> <dict> <key>PRT1</key> <dict> <key>UsbConnector</key> <integer>0</integer> <key>port</key> <data> AQAAAA== </data> </dict> <key>PRT6</key> <dict> <key>UsbConnector</key> <integer>255</integer> <key>port</key> <data> BgAAAA== </data> </dict> </dict> </dict> <key>model</key> <string>MacBookPro7,1</string> </dict> <key>MacBookPro7,1-EHC2</key> <dict> <key>CFBundleIdentifier</key> <string>com.apple.driver.AppleUSBMergeNub</string> <key>IOClass</key> <string>AppleUSBMergeNub</string> <key>IONameMatch</key> <string>EHC2</string> <key>IOProviderClass</key> <string>AppleUSBEHCIPCI</string> <key>IOProviderMergeProperties</key> <dict> <key>port-count</key> <data> BgAAAA== </data> <key>ports</key> <dict> <key>PRT1</key> <dict> <key>UsbConnector</key> <integer>255</integer> <key>port</key> <data> AQAAAA== </data> </dict> <key>PRT3</key> <dict> <key>UsbConnector</key> <integer>255</integer> <key>port</key> <data> AwAAAA== </data> </dict> <key>PRT4</key> <dict> <key>UsbConnector</key> <integer>0</integer> <key>port</key> <data> BAAAAA== </data> </dict> <key>PRT5</key> <dict> <key>UsbConnector</key> <integer>255</integer> <key>port</key> <data> BQAAAA== </data> </dict> <key>PRT6</key> <dict> <key>UsbConnector</key> <integer>255</integer> <key>port</key> <data> BgAAAA== </data> </dict> </dict> </dict> <key>model</key> <string>MacBookPro7,1</string> </dict>

    其中EHC1和EHC2即是本机的USB控制器名称,在Windows系统下用USBTree工具查看USB设备信息如下:

    可以看到有两个USB控制器,分别连接了一个USB Root Hub,而USB Root Hub下面有3个端口,其中只有PORT1是有用的,PORT2和PORT3都是空的,而PORT1下面又连接了一个USB 2.0 Hub。

    其中右边的信息还显示了控制器的地址:0x1D0000,另一个是0x1A0000,

    在DSDT文件里能搜索到这个地址。分别对应EHC1和EHC2。

    再联想到刚才的机型配置文件,有描述EHC1/PRT1 UsbConnector=0,而EHC2/PRT1 UsbConnector=255,这里的PRT1就是端口1的意思,连接参数0和255,我猜测0表示连接了USB HUB,而255表示是直接对外的接口。

    所以把配置文件里的255改为0,删除PRT2,3,4,5,6这些无用的端口,重启电脑,发现所有的USB口都可以用了。

    这样不需要USBInjectAll.kext也可以驱动所有的USB2.0接口了。

    不过修改了Info.plist会导致驱动的签名信息被破坏,在MAC系统里查找系统报告,扩展功能,会显示这个驱动的签名是未知的。

     

     

    最新回复(0)