解决10.11 El Capitan USB 摄像头 蓝牙无法使用问题(自制遮盖器法)
本帖最后由 aricy 于 2015-10-13 16:04 编辑参考贴:https://bbs.pcbeta.com/viewthread-1646768-1-1.html
最近大家在更新10.11的时候,发现原来的USB驱动无法使用,这就导致很多机油的摄像头、蓝牙等设备无法使用。
在拜读上面的文章后,我们明白了其实这完全是由于苹果完全重写了OSX系统的USB驱动机制。
在这里引用作者的说法:
10.11 El Capitan开始,苹果完全重写了OSX系统的USB驱动机制。原来的驱动是怎么样的大神没说我也不知道。现在的情况是这样的。
首先,一般而言,对于ivybridge平台开始的电脑(自2012年的ivybridge开始intel引入原生USB3驱动),一般而言,硬件内总共存在3个USB主控器,两个USB2.0的,一个USB3.0的。两个USB2.0的。在ACPI表(就是我们常说的DSDT)中,两个USB2.0主控器一般被命名为EHC1和EHC2,无论对PC机还是白果机都是如此。但是USB3.0的主控器,PC机的DSDT里一般命名为XHC(或许也有例外),白果机则命名为XHC1。
或许苹果本来想的是,完全依赖ACPI表(就是DSDT信息)来读取有关USB的数据,但是问题来了,有些机器的ACPI表(DSDT信息)是不准确的,当然,普通PC机不准确不关苹果的事,爱准不准。但是,注意,苹果发现,自家的有些白果机的ACPI表(DSDT信息)也是不准确的,这就不好玩了。
为了解决这个问题,苹果引入了一个东西,RehabMan大神称之为injector,我想了下,决定这个词还是不能直译,还是意译的好,我决定称其为遮盖器。具体说来,遮盖器机制,就是我们很多教程里提到要修改的
通过上面,我们知道遮盖器的大概原理。(如有不懂之处,请参考上面的帖子)
单具体我们应该怎么来做呢?其实大家读了上面的帖子后,应该就知道怎么来制作遮盖器了。
制作适用于自己机器的遮盖器的具体步骤:
1,先看看电脑有几个usb3.0接口,几个usb2.0接口。
比如宏碁Aspire V5-473P-5602 (这是一个网友的机型):
这个机型有只有三个usb接口,一个usb3.0,二个usb2.0。我们都知道usb3.0是向下兼容usb2.0的。于是我们知道如果要让所有端口都可用(这里考虑到所有端口都插上USB设备),我们就要为其预留至少2+1*2个虚拟端口,如果再加上蓝牙,摄像头,触屏等设备,这个机型需要2+1*2+3=7个虚拟端口。根据上面帖子可以知道,每个usb控制器只允许15个虚拟端口。因为只有7个虚拟端口,我们就不必在意虚拟端口数不够用的问题。但是,如果是台式机,usb接口已经远远大于15了,怎么办,那只有通过屏蔽usb3.0接口兼容的usb2.0端口来节省虚拟端口数。
由此,对于宏碁Aspire V5-473P-5602 来说,需要7个虚拟端口。
2,在windows 或者Yosemite下查询真正的虚拟端口号(Port 1、HSP1、SSP1)
注意:事先,请将所有usb端口都插上usb设备,记录下所有的虚拟端口号,然后在usb3.0上插上usb2.0的设备,再记录下此时的端口号,并且记录具体对应的设备是什么。
在windows下查询端口号,我们可以使用aida64这个软件来查看:
从上面的图中,我们可以看出:
在usb3.0控制器上,虚拟端口对应的设备情况:
Port 2:usb2.0U盘
Port 3:webcam 摄像头
Port 4:蓝牙设备
Port 6:usb输入设备,触屏
Port 10:usb3.0U盘
在usb2.0控制器上,虚拟端口对应的设备情况:
Port 5:usb2.0 U盘
Port 7: 无线蓝牙鼠标
由此可以看出我们需要的虚拟端口号:2、3、4、5、6、7、10 一个七个
在Yosemite下,我们可以用ioreg这个软件来查看:
3,进入mac系统,制作遮盖器。
这里分享下载:
宏碁Aspire V5-473P-5602:
切换了下系统。结果无法编辑了
3,进入mac系统,制作遮盖器。
首先下载上贴中驱动,你是哪个系类的就选哪个。这台宏碁笔记本是8系列的。如果不知道的,可以从aida64看出来,8 Series
打开驱动中的info.plist, 如图
我们需要修改成和你smbios相同的机型。根据上贴可知,当DSDT中的设备Device (EHC1)设备名EHC1和遮盖器的中对应的设备名相同时,遮盖器就起作用了,于是我们要保证遮盖器的设备名与dsdt的一样。
所以修改如下图:
端口参数:
参数解说如下:
port-count:这是一个坑爹的命名,因为很容易根据字面意思理解成,这个hub下面的PRT(端口)总数。实际上不是,这个东西的意思是,下属所有PRT(端口)中的最大port值。也就是说,你下面如果有3个PRT,3个PRT,port值分别是01000000,02000000,06000000,那port-count这里填的不应该是03000000,而应该是06000000。
UsbConnector:代表所属USB接口类型,一般有0,3,255等常见数值。其中0代表usb2.0 typeA型母口,2代表 type miniAB,3代表USB3.0 typeA型母口,255代表特殊接口。
port:该USB接口所在位置的编号。
端口修改原理:我们只需要对应上面查询出来的虚拟端口来设置对应的端口信息就行了。
对于UsbConnector代表的接口类型:0代表usb2.03代表usb3.0255代表特殊端口(这里就看作蓝牙和涉嫌头就行了)
这里的触屏属于usb输入设备,可以看成usb设备。
于是乎,各个虚拟端口设置如图:
4,制作好遮盖器,然后将这个驱动安装,修复权限和缓存,就可以了。我建议直接复制到sle或者le下面,用kext utility修复一下。
谢谢楼主了,我就需要这篇教程啊!在搞搞 不错很详细,学习了 非常好,下载下来研究就下
太好了。感谢楼主 我的也是USB设备没搞定 研究了2天还没有成功,准备安装楼主的方法再试一次。 谢谢分享。 我来说几句,,1.先找到使用的端口 2.在dsdt删除无用的端口 3.改名ehc1 xhc1 4.编辑注入kexthaswell 本子平台只要将info 下eh01 下pr01 的借口类型改为0 即可识别所有~~ info 下 xhc 全删除。
aricy 发表于 2015-10-13 15:43 http://cdn.pcbeta.img.inimc.com/static/image/common/back.gif
切换了下系统。结果无法编辑了
3,进入mac系统,制作遮盖器。
下载看看看 图都挂啦? 一目了然茅塞顿开啊
有意思,好像绝大多数台式机USB口都在XHC下
原来笔记本还有在EHC的
这种情况不做遮盖器直接改名EH01可以么?
太好了。感谢楼主 真心感谢 回去再试一试 是要把每个USB口都插上设备?八个口没那么USB设备怎么办。 doolaee 发表于 2015-10-13 15:57 https://bbs.pcbeta.com/static/image/common/back.gif
谢谢楼主了,我就需要这篇教程啊!在搞搞
我真的要看一看了 谢谢分享。原理说的很好 非常感谢。。。。