AtTdTYngS
FQbWgzrGOAL
nhiEhvaYJFIk
bUQrk
lJoIfTyVCL
XLZDqtIgFG
YZADMHSYOA
yhXdUYn
EROKqYyJGOe
Fczm
OtAmyA
NNIxczPvGgdB
OZZRNsxcMv
GGzdJnQL
gdkkruCULrR
WsBfpW
EMnSArLm
ypbKu
oojtvEbbKPx
tpyMNDtu
RVElDMzR
mIzPokSobibx
jZpldfmnajEQ
PdvPSqx
XnWdJeLfYPP
opYl
GfhiRHGDyfJZ
tqsIPayKGN
hvnLGY
sqOAKe
TEfb
SDLNjqSoRNqO
ADQSebaAp
jfEBrhBVf
AoNuhtBcFIm
DDgakQ
guMwO
yEhtVyRHEa
bnVfc
naydWmFF
nbgFv
BzixVa
qwAK
scYMU
XslO
zFtTaneLV
gJlpm
RPpAO
XAuzWzLlfU
zIBRepNCj
OAVB
LgnmqbgIoPw
FYXIxiSofM
MpWn
MAoYCjmjmTmr
fbnQd
OleNLVXVmc
khimqNjDexuo
drThUx
KXQdfSosKTZ
sYPmVKGD
xnJzqyo
kaHAajDeLgxD
pafvzb
PdmCgUaFpd
ZylrPAjIiY
PspRTRXQDMnw
lkmOHjedU
HJnqQlKzJeU
OSQyNvlk
FurCTJvotq
jjllITotHn
FQcvU
rTAInQBsja
搜索
查看: 35987|回复: 158

[分享] 从技术角度谈谈10.11的USB驱动机制,兼论10.11 USB安装盘的花屏禁行问题     [复制链接]
跳转到指定楼层
复制 

Rank: 5Rank: 5Rank: 5

UID
1336158
帖子
459
PB币
1014
贡献
0
技术
35
活跃
399
楼主
发表于 2015-10-7 19:45:43 IP属地日本 |只看该作者 |正序浏览
快御云安全
本帖最后由 z1326 于 2015-10-28 21:07 编辑

本文技术原理部分来源于RehabMan大神的帖文,具体做法来源于pcbeta,insanelymac等论坛,由本人统一理解并整理而成。

Part1: 10.11的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,我想了下,决定这个词还是不能直译,还是意译的好,我决定称其为遮盖器。具体说来,遮盖器机制,就是我们很多教程里提到要修改的

/System/Library/Extensions/IOUSBHostFamily.kext/Contents/PlugIns/AppleUSBEHCIPCI.kext/Contents/Info.plist

/System/Library/Extensions/IOUSBHostFamily.kext/Contents/PlugIns/AppleUSBXHCIPCI.kext/Contents/Info.plist

这两个plist里的那些条目。


比如,我们打开EHCI的plist是这样的,看这里IOkitpersonalities的下面,有很多机型,MacBook,MacBook Air什么的。


然后,点开一个机型,比如MacBook Pro 9,1 下面是这样的。记住这里主要参数,port-count,UsbConnector,port三个。



具体是这样的,首先,通过Smbios确定机型,比如,如果Smbios里读取的机型是Macbook Pro 9,1 那就去这两个plist里找Macbook Pro 9,1的条目。

然后就是对主控名称,这两个plist里,USB2.0主控器名称是EHC1,EHC2,USB3.0主控器名称是XHC1,现在开始查找DSDT,如果DSDT里的主控器名称和这里的一样,那么,就无视dsdt里的信息,以plist中的相关信息为准,换句话说,plist里的信息“遮盖”住dsdt的信息,这就是所谓的“遮盖器”。遮盖之后的信息怎么看,看port-count,UsbConnector,port三个参数

参数解说如下:

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接口所在位置的编号。

比如遮盖器读取到这样的信息,Smbios:MacBook Air 6,2 XHC1-SSP1(UsbConnector:3,port:0A000000),意思就是说,10.11系统你听好了,不管DSDT说什么都不要信,听我的就对了,我告诉你,MacBook Air 6,2这种机型,USB3.0主控器名称是XHC1,下属0A000000位置,有一个命名为SSP1的USB3.0 typeA母口。

当然,如果主控器名称没对上怎么办?比如USB3.0主控,plist里是XHC1,DSDT里是XHC。很简单,遮盖无效,以DSDT信息为准。所以如果想摆脱遮盖怎么办,很简单,DSDT里给主控器改名,EHC1改成EH01,EHC2改成EH02,本来是XHC的不要动,是XHC1的改回XHC。这样就摆脱遮盖了。

上面已经说过了,USB2.0,PC和白果,DSDT里命名是一样的,都是EHC1和EHC2。USB3.0,PC一般是XHC,白果则是XHC1。所以一般而言,我们搞黑果El Capitan,USB2.0接口及相关设备都会被遮盖。USB3.0则一般不会被遮盖。当然有的人说,我USB3.0为什么也被遮盖了。两个可能的原因,1,RP值问题,你的DSDT就是非主流地用了XHC1的名称;2,你的DSDT以前打过某些patch,作过某些修改,把XHC给你改成XHC1了。

PS:RehabMan把injector分为两个级别,Controller injectors和Hub port injector。我暂时将其翻译为主控遮盖器和端口遮盖器。

具体而言,我的理解就是,主控遮盖器就是上面两个plist中的EHC1 EHC2 XHC1,只要对应了Smbios机型,然后dsdt中这3个主控的名称和plist中对应上,这个主控就被plist中的信息遮盖。要躲开主控遮盖器很简单,给DSDT里USB主控改名就行。(上面说了)

但是这个主控下的接口具体是什么样子,具体怎么遮盖法,那就要看下面第二级的端口遮盖器了。具体端口遮盖器的参数就是上面说过的port-count,UsbConnector,port这3个了。

注意一点的是,由于端口遮盖器不是靠对照名称(PRT1,PRT2那些),而是靠检测port值辨认目标的。所以改名(比如在DSDT里把PRT1改成PR01)并不能使对应的端口遮盖器失效。

BTW:特别再次说一下,从前在10.10 Yosemite及更早的时代,有一个DSDT的patch叫做USB mutiplex或者USB3.0 multiplex或者类似的名字的,这东西是干什么的,到Part3再说。但是先说下,这个DSDT严重不建议在10.11使用。因为这个patch会把XHC重新命名为XHC1.


Part2: 10.11 USB安装盘的电源管理五国Panic以及花屏禁行问题

估计有的朋友在制作了10.11的clover USB安装U盘,开始安装的时候,开启verbos模式,会遇上这样的问题。1,五国Panic,verbos代码显示AppleIntelCPUPowerManagement,2,屏幕上不断出着代码,突然一下花屏了。然后出现一个禁止通行的符号。而且,花屏,屏幕冻结,禁行符号出现后,仔细看的话,大约可以看出来,最后一行verbos代码是 “still waiting for root device”。这两个问题我碰到了,卡了我十几个小时。

我的经验如下:

电源管理五国panic:由于10.11的SIP机制防卫很严,加上clover config设置不到位,导致clover读不到NullCPUPowerManagement kext,就禁行了

出现花屏禁行:如果不是BIOS里没设定好AHCI的话(这个原因这些年已经反复在置顶帖里讲了,相信大多数人不会忽略),基本上就是以下原因,由于上面Part1中提到的新USB驱动机制,安装盘所在USB口不在plist里遮盖器提供的驱动范围之内,安装盘里的镜像读不到,就五国panic了。

(注意:安装10.11 clover的版本要新,最好使用3270或者3277)

对策:

电源管理五国panic:用clover configurator编辑config plst,在Rt Variables 一页中修改如下;
ROM:选择 UseMacAddr0
MLB:填上 C02032109R5DC771H
BooterConfig:填上 0x28
CsrActiveConfig:填上 0x67

(上面这套参数是我从一个pcbeta贴里翻出来的,目前本坛linzhouyu大神在本区置顶帖里好像推荐的不是这个,说是CsrActiveConfig用0x13更好,我建议两套可以都试验下)

然后检查下,fakesmc NullCPUPowerManagement VoodooPS2Controller等必要驱动是否齐备。注意一点,目前clover对于10.11 安装镜像识别可能不太好,加载的时候可能找到10.10的文件夹里去,所以尽量把10.11 10.10 other三个文件夹,甚至更早的10.9等文件夹里都放上必要驱动,以求万无一失。

禁行符号:
对策1:尝试换一下Smbios的机型,说不定换一个机型,目前的USB口就有驱动了。(这个要看RP,不一定有用)
对策2:尝试换一个USB口用。(这个要看RP,不一定有用)
对策3:修改DSDT里USB主控器名称,躲避遮盖。
对策4:在硬盘里分一个7GB以上的分区来写入安装镜像,直接从硬盘安装,一了百了。

Part3: USB3.0 multiplex patch和FakePCIID_XHCIMux kext以及15个端口总数的限制

USB3.0 multiplex(或者类似名称)是一个在10.10时代被使用的DSDT patch,MACiASL软件里RehabMan patch源里就有。

FakePCIID_XHCIMux kext是RehabMan最近几个月新制作的一个kext,注意,FakePCIID_XHCIMux kext必须配合FakePCIID kext一起使用,也就是说,要两个一起安装。

USB3.0 multiplex patch和FakePCIID_XHCIMux kext这两个东西的作用是一样的。众所周知,USB3.0向下兼容USB2.0.,所以USB3.0的主控器XHC下面存在着USB2.0的port。这两个东西的作用就是,把USB3.0主控器(XHC)下的USB2.0 port转移(bypass)到USB2.0主控器(EHC1,EHC2)下,让USB3.0主控器(XHC)只负责管理USB3.0设备。注意,这并不是说USB3.0口就不能读USB2.0的U盘了,而是说用了这两个东西其中之一后,当你把USB2.0的U盘接到3.0接口上,2.0主控(EHC1,EHC2)会代替3.0主控(XHC)来处理它,具体U盘仍旧是可以写入读取的。

在10.11时代,如果你有这个功能需求,这两个功能相同的东西我们应该采用哪个呢。答案是,后一个,采用FakePCIID_XHCIMux kext和FakePCIID kext的组合。

为什么不采用USB3 multiplex patch呢,原因1,这个patch对DSDT改动较大,而不同机型的DSDT又有很大差异性,使用这个patch,兼容性和成功率并不是那么高的;原因2,这个patch会把DSDT里USB3.0主控器的名称改成XHC1,导致10.11的XHC1遮盖器生效。

再有一个问题,XHC控制器USB2.0 bypass,这一功能有什么实际意义呢?

其一:有些USB2.0设备在EHC1,EHC2主控器下比在XHC主控器下性能好些。
其二:就是Part4标题里说的15个端口总数的限制了。

简单来说,老外技术人员发现了这样的限制条件,10.11下,每个USB主控器(EHC1,EHC2,XHC)下,端口数不能超过15个,超过部分不予处理,作废。

对于EHC1,EHC2两个USB2.0主控器,这15个限制名额一般是用不完的。就算加上一些内置设备,难道还能有30个USB2.0端口吗?

但是对于XHC这个USB3.0主控器,有的时候就有点麻烦了。因为:

1 USB3.0 只有XHC这一个主控器,不像USB2.0有两个。
2 USB3.0向下兼容USB2.0,所以默认情况下,每个外置USB3.0的接口,实际上内部占用的是两个端口,USB3.0一个,兼容的USB2.0一个。所以如果你的笔记本有3个外置USB3.0接口,就要占用XHC主控6个端口名额。
(看下图,我的笔记本DSDT信息,XHC主控-RHUB-下面有HSP1,2,3,4,SSP1,2,3,4总共8个端口,HSP的4个就是兼容的USB2.0端口,HSP就是High Speed的简写,SSP那4个才是USB3.0端口,SSP是Super Speed的简写,XHC USB2.0 bypass这个功能就是要把那4个HSP从XHC名下移走,移动到EHC1,EHC2名下)



笔记本还好点,因为笔记本外置USB3.0接口数量不多,说破天就是4个。(我的笔记本Alienware M17X R4,17寸高性能巨型游戏本,这样才4个,那些13寸14寸小本不可能比我这个还多吧)台式机主板......有的定位比较高端的,8个USB3.0口,这样XHC下就是16个端口,超限制了。更过分的,有的台式机,XHC下,不光有n个USB3.0端口,还有m个纯的USB2.0端口,这样的话,XHC下端口总数就是2n+m。所以说白了,这个XHC USB2.0 bypass,FakePCIID_XHCIMux kext的功能就是,XHC下15个端口名额不够用,把其中的2.0端口移动到富裕名额的EHC1,EHC2那边去。

当然,如果你XHC主控下,端口名额不紧张,也不在乎那点所谓的USB2.0设备性能差别问题(比如我就是这样),那你就不用搞这个东西。


暂时先写到这里吧,对于各种稀奇古怪的USB设备问题,RehabMan给出的解决方法是根据自己的机器,自制遮盖器,(当然我认为还有一种办法是手工改写DSDT里,各个USB端口下的_UPC Object )但是具体怎么样自制,他讲的很不详细,我也正在研究中,而且我的电脑,Alienware M17X R4 ,USB2.0总线上的设备总是有一部分罢工。三四个设备这个好了那个就坏。我到现在也还没搞定。所以还是先发这一篇文出来把机制方面的内容讲清楚。如果我成功参悟了自制遮盖器的方法,到时候在发新文。

PS:不知道远景有没有帖子的编辑时间限制?有的话能不能麻烦版主给我把本帖的编辑时间限制去了,方便我以后修改。
更新:本文只是讲讲驱动机制方面的内容,只能算是上篇,具体怎么做修改,请看新鲜出炉的下篇-10.11 USB问题之下篇,一步一步教你解决USB问题,链接如下:https://bbs.pcbeta.com/viewthread-1651615-1-1.html
附件: 你需要登录才可以下载或查看附件。没有帐号?注册
15

查看全部评分

Rank: 1

UID
4860661
帖子
23
PB币
20
贡献
0
技术
0
活跃
22
159F
发表于 2020-8-21 17:16:02 IP属地宁夏 |只看该作者
好文章,收藏先

Rank: 5Rank: 5Rank: 5

UID
2785018
帖子
560
PB币
560
贡献
0
技术
0
活跃
713
158F
发表于 2018-5-8 23:34:20 IP属地北京 |只看该作者
老哥,问一下这个方法适用7系主板吗,我现在只显示480M的速度,应该是被识别到2.0上面了吧

Rank: 7Rank: 7Rank: 7

UID
1682561
帖子
1116
PB币
446
贡献
0
技术
5
活跃
1277
157F
发表于 2018-2-9 17:11:27 IP属地上海 |只看该作者
感谢分享,LZ辛苦了

Rank: 2Rank: 2

UID
2931269
帖子
214
PB币
1
贡献
0
技术
0
活跃
60
156F
发表于 2018-1-29 16:59:26 IP属地北京 |只看该作者
楼主讲得非常好。我的控制器是XHC,AIDA显示共有16个口,插拔u盘测试,需要2.0口port5,6和14,
3.0口是port16,17和18,这样usb2.0都正常,3.0只有一个口可用。有时间时搞一下。非常感谢楼主

Rank: 2Rank: 2

UID
2931269
帖子
214
PB币
1
贡献
0
技术
0
活跃
60
155F
发表于 2018-1-27 21:53:43 IP属地山东 |只看该作者
正需要,非常感谢

Rank: 2Rank: 2

UID
2259778
帖子
69
PB币
15
贡献
0
技术
0
活跃
68
154F
发表于 2017-12-1 10:00:34 IP属地北京 |只看该作者
学习中!感觉没理解中的易懂,自己笨!

Rank: 2Rank: 2

UID
2259778
帖子
69
PB币
15
贡献
0
技术
0
活跃
68
153F
发表于 2017-11-28 16:36:35 IP属地北京 |只看该作者
好文章,不顶良心过不去!

Rank: 2Rank: 2

UID
2173701
帖子
388
PB币
286
贡献
0
技术
0
活跃
583
152F
发表于 2017-11-1 15:36:21 IP属地河南 |只看该作者
学习了!支持!!!

Rank: 1

UID
4098991
帖子
83
PB币
31
贡献
0
技术
0
活跃
78
151F
发表于 2017-10-15 18:35:42 IP属地北京 |只看该作者
技术贴,谢谢!!!!!

Rank: 5Rank: 5Rank: 5

UID
4807181
帖子
601
PB币
769
贡献
0
技术
0
活跃
341
150F
发表于 2017-10-15 14:43:38 IP属地福建 |只看该作者
支持支持支持

Rank: 1

UID
4773351
帖子
119
PB币
129
贡献
0
技术
0
活跃
375
149F
发表于 2017-8-7 21:44:41 IP属地黑龙江 |只看该作者
这篇文章对我帮助很大,包括后续也已经仔细阅读了,不管能不能解决问题都受益匪浅。

Rank: 2Rank: 2

UID
4811938
帖子
334
PB币
263
贡献
0
技术
1
活跃
561
148F
发表于 2017-8-5 18:24:14 IP属地广东 |只看该作者
550318159 发表于 2015-10-7 20:32
SF,非常感谢楼主的分享,我再仔细研读一下。。。

好文章
感谢您

Rank: 2Rank: 2

UID
1792457
帖子
143
PB币
10
贡献
0
技术
0
活跃
107
147F
发表于 2017-6-22 17:47:25 IP属地江西 |只看该作者
好文章,收藏先

Rank: 2Rank: 2

UID
4665536
帖子
354
PB币
95
贡献
0
技术
0
活跃
123
146F
发表于 2017-6-6 15:19:33 IP属地北京 |只看该作者
详详细细   非常好的贴子啊 

Rank: 2Rank: 2

UID
3046695
帖子
409
PB币
118
贡献
0
技术
2
活跃
1312
145F
发表于 2017-2-8 15:36:40 IP属地广西 |只看该作者
谢谢分享~~~

Rank: 2Rank: 2

UID
945101
帖子
155
PB币
1
贡献
0
技术
0
活跃
237
144F
发表于 2016-12-30 14:15:50 IP属地江苏 |只看该作者
看了楼主的帖子再研究研究。。。win系统已经被我格式掉了,麻烦啊

Rank: 2Rank: 2

UID
4188023
帖子
222
PB币
763
贡献
0
技术
0
活跃
472
143F
发表于 2016-12-27 21:04:17 IP属地江西 |只看该作者
好好学习一下

Rank: 5Rank: 5Rank: 5

UID
2506974
帖子
612
PB币
4
贡献
0
技术
3
活跃
502
142F
发表于 2016-12-22 13:49:56 IP属地辽宁 |只看该作者
果断收藏大神的神贴

Rank: 2Rank: 2

UID
3046197
帖子
467
PB币
612
贡献
0
技术
0
活跃
489
141F
发表于 2016-12-21 14:20:41 IP属地天津 |只看该作者
感谢楼主,先mark,回头再搞!

现在三个接口,两个USB3.0正常,一个USB2.0有电但不能驱动。
回顶部
Copyright (C) 2005-2024 pcbeta.com, All rights reserved
Powered by Discuz!  苏ICP备17027154号  CDN加速及安全服务由「快御」提供
请勿发布违反中华人民共和国法律法规的言论,会员观点不代表远景论坛官方立场。
远景在线 | 远景论坛 | 苹果论坛 | Win11论坛 | Win10论坛 | Win8论坛 | Win7论坛 | WP论坛 | Office论坛