ycg31 发表于 2015-12-24 21:27

【翻译】修复 OS X El Capitan的USB端口

本帖最后由 ycg31 于 2015-12-25 21:17 编辑

坛子里有一篇关于这篇文章的翻译,不过机翻实在是。。。。
修复 OS X El Capitan的USB端口
原文地址:http://www.insanelymac.com/forum/topic/306777-guide-usb-fix-el-capitan-1011/#entry2147401



10.11有一个新的机制来约束的USB端口, SMBIOS里定义机型会有相关的usb描述。如果之前版本usb能正常工作,升级10.11突然不能用了,问题就出在SMBIOS中所选择机型对usb端口的描述和实际情况不对。
1. 加载usb驱动
10.11控制usb的驱动是AppleUSBEHCIPCI.kext和 AppleUSBXHCIPCI.kext,藏在 IOUSBHostFamily.kext这个驱动里面,显示包内容可以打开查看。你可以在两个驱动的info.plist文件查看关于usb端口的描述 :
USB 2.0由AppleUSBEHCIPCI.kext控制/System/Library/Extensions/IOUSBHostFamily.kext/Contents/PlugIns/AppleUSBEHCIPCI.kext/Contents/Info.plist
USB 2.0 and USB 3.0由AppleUSBXHCIPCI.kext控制/System/Library/Extensions/IOUSBHostFamily.kext/Contents/PlugIns/AppleUSBXHCIPCI.kext/Contents/Info.plist
AppleUSBEHCIPCI kext 默认将usb2.0定义为EHC1和EHC2,如下图所示:

上图中显示的是对imac13.1机型的定义,根据你选择的机型查看对应的名字。
你可以更改此处的IONameMatch 成你主板dsdt定义的usb2.0控制器的名字,也可以在dsdt中把usb2.0控制器的名字修改成EHC1/EHC2(跟你用的机型里的信息一致)
换句话说主板上usb2.0控制器的名字要和AppleUSBEHCIPCI kext中info.plist中你对应机型定义的名字一致,改那一边都可以。
USB 3.0有所不同, AppleUSBXHCIPCI中是用id来控制的,如下图所示:
所以不管你的USB 3.0 控制器在dsdt中叫什么名字,都是会被加载的,不过前提是info.plist中要有相应机型。
2. 端口限制
尽管usb驱动加载了,但不意味着所有的端口都正常工作,因为苹果公司在SMBIOS中用一种新的方法来控制这些端口。
请注意,如果您的USB3.0设备没有命名XHC1(通常XHC),默认情况下没有端口限制,但如果所有的端口都不能完全正常工作,您可能需要启用端口限制和手动添加端口。
以 iMac 13,1为例:(ehc表示是usb2.0端口)

默认情况下,imac13.1只有一个usb2.0的端口,端口地址为01000000,那么你如果smbios定义的是这个机型,如果不添加端口的话,那么你讲只有一个usb2.0的端口可用!
再来看MacBookPro 9,2 中关于usb3.0端口(xhci)的定义,有1, 2, 5, 6 共四个usb3.0的端口可用:

要修复只有解除端口限制或者添加端口。
2a. 方法一:解除端口限制
这个方法比较简单,就是直接删除info里面你对应机型关于usb端口的描述,删除port-count 和 ports 项即可,系统会自动从你dsdt的描述中生成新的端口。

对usb3.0而言,同样删除port-count和 ports,并将你dsdt中关于usb3.0的描述修改成xhc(除了xhc1之外任意名字均可)
有些机型比如 iMac14,x 没有关于usb2.0的描述,所以如果你选择这些机型的话会报错"still waitingfor root device"而导致usb2.0不可用

然而,苹果为一个usb设备设置了15个端口的限制,如果你dsdt中定义的端口数超过15个,这种方法的话仅有15个端口会被初始化,要突破限制只有使用方法2添加端口来解决。
2b. 添加端口到端口限制
这个方法将启用端口限制并添加你直接的端口。
To enable port restrictions:USB 2.0:在dsdt中重命名你的 USB 为 EHC1或EHC2 ,或修改IONameMatch与你dsdt中的一致。USB 3.0:在dsdt中重命名你的 USB 为 XHC1 ,或修改IONameMatch与你dsdt中的一致。

下面,你要识别你dsdt中有哪几个usb端口,比如, 我的XHC1 有4个端口,分别是 1, 2, 3, 4:

但如果我使用MacBookPro9,2这个机型的话,我就只有1, 2, 5, 6 (端口名字并不重要,看地址,前面说的1是指01000000):

因此我需要在info.plist里MacBookPro9,2-XHC1下添加端口 3、4, 我的所有端口才能正常使用


注意:有15个端口的限制,举个例子,如果你的dsdt中定义了14个usb2.0端口,从hs01-hs14和6个usb3.0端口,从ss01-ss06,那么系统将只初始化14个usb2.0端口和1个usb3.0端口。(hs01-hs14和ss01)
为了解决这个问题,你需要判断出那些端口是实际有作用的,那些端口只是个定义,你就可以把没用的排除掉,一般电脑15的usb端口可能是能满足的,详情参考:(这篇以后再翻译)

3. 注入usb驱动

上面两种方法直接编辑kext文件, OSX更新后会覆盖,你可以采取注入新的驱动的方法 (RehabMan大神的杰作)。
如果你想编辑你的USB2.0(由EHCI控制)信息,将你的DSDT 中usb2.0的名字从EHC1/ EHC2修改成别的名字(如EH01/ EH02),从而使苹果原装驱动对EHC1/ EHC2端口限制失效,然后创建一个新的驱动(这基本上只是一个Info.plist,那个可执行文件没什么内容),编辑info.pilst中的名为EH01/ EH02(与dsdt中的名字一致)。
Usb3.0类似,改成xhc1以外的任何名字,info.plist里面与之对应。
这里有一个示例info.plist文件: https://raw.githubus...ents/Info.plist
Info.pilst中同样要注意机型的名字要和你使用的机型对应
把编辑好的info.plist文件放入你新建的驱动中即可




这3种方法其实原理一样,都是让dsdt中的描述和info.plist中的限制相匹配,第一种是直接删除,自动匹配,第二、三种是手动修改精确匹配,可把没用的端口屏蔽,控制在15个端口的限制内。

arslan2012 发表于 2015-12-24 21:38

楼主你图片挂了能帮忙补一下吗

ycg31 发表于 2015-12-24 23:16

本帖最后由 ycg31 于 2015-12-24 23:17 编辑

上文中方法3中仿冒注入的驱动,使用前请务必自行修改info.plist

brain-lin 发表于 2015-12-25 09:32

asdfadadfadfadfa

cc0214vv 发表于 2015-12-25 09:44

翻译的很不错啊,支持楼主

二丑他哥 发表于 2015-12-25 09:52

这个必须支持

likeme 发表于 2015-12-25 10:30

翻译得很好,不过本论坛有大神写的一片中文化的更通熟易懂,具体链接没保存,搜索一下本区可看看。

ycg31 发表于 2015-12-25 11:44

likeme 发表于 2015-12-25 10:30 https://www.pcbeta.com/static/image/common/back.gif
翻译得很好,不过本论坛有大神写的一片中文化的更通熟易懂,具体链接没保存,搜索一下本区可看看。

我觉得原文比较好懂啊可能我翻译表达的不够好其实很简单 其他驱动也是类似的 无非是在info里添加自己的id或者修改dsdt里的名字去迎合原版驱动原理相通

新佳影 发表于 2016-1-2 23:57

我的系统里为什么没有找到这几个文件AppleUSBEHCIPCI.kext 和 AppleUSBXHCIPCI.kext, IOUSBHostFamily.kext



lvwenqiang 发表于 2016-1-3 10:29

翻译的很不错啊,支持楼主

ycg31 发表于 2016-1-3 11:37

新佳影 发表于 2016-1-2 23:57 https://www.pcbeta.com/static/image/common/back.gif
我的系统里为什么没有找到这几个文件AppleUSBEHCIPCI.kext 和 AppleUSBXHCIPCI.kext, IOUSBHostFamily.kex ...
你是什么系统啊 你进你的iousbfamily.kext显示包内容里面看看有没有AppleUSBEHCIPCI.kext 和 AppleUSBXHCIPCI.kext而且你的驱动还有标签你替换过?

新佳影 发表于 2016-1-3 13:49

实在搞不来{:5_263:}

davidguo2002 发表于 2016-1-5 09:32

难得的好文。

leon258123 发表于 2016-1-7 15:17

来看看有人可以将AMD 10.11.2的USB问题解决没有,楼主的可能是启发

infovision 发表于 2016-1-7 21:59

谢谢分享!

ycg31 发表于 2016-1-7 22:08

leon258123 发表于 2016-1-7 15:17 https://www.pcbeta.com/static/image/common/back.gif
来看看有人可以将AMD 10.11.2的USB问题解决没有,楼主的可能是启发

这个是修改原版驱动中对于usb的定义,对三方的应该是无用,第三方的是自己的驱动,应该没得限制把我也是猜想没玩过amd的 所以不清楚

Maseratifly 发表于 2016-1-8 10:54

谢谢分享 支持

新佳影 发表于 2016-1-15 16:04

ycg31 发表于 2016-1-3 11:37 https://www.pcbeta.com/static/image/common/back.gif
你是什么系统啊 你进你的iousbfamily.kext显示包内容里面看看有没有AppleUSBEHCIPCI.kext 和 AppleUSBXHC ...


hedy16 发表于 2016-1-15 16:08

ycg31 发表于 2016-1-16 00:52

新佳影 发表于 2016-1-15 16:04 https://www.pcbeta.com/static/image/common/back.gif


IOUSBHostFamily.kext你截图是这个驱动的包内容吗应该不是吧   你的sle下没IOUSBHostFamily.kext这个文件?
页: [1] 2 3 4
查看完整版本: 【翻译】修复 OS X El Capitan的USB端口