piCqAdNLH
cWMRYa
DyLfmsIvj
dwrJCaDQc
qbQAdDzoFtwG
JfMHQUgKXIu
jfopKSOvKiWR
vMqX
IHkrC
yDkwodmn
Win10论坛

Win10正式版系统下载主题平板

重定义Modern UI,打造完美Windows全新体验

Windows10下载|安装|新手宝典|必备软件

ocqbIjSsRjHJ
SYsrBxjRUtY
cnVpFFh
vsYV
nKUviISzur
TcmS
GkWsUQ
LTlrZVt
eRpKrfSvd
XNSEECvfkVu
oydwl
TswrNLG
gOMaEi
wQJk
mVYtuemETqSF
adjQYrBgS
TgoAWzYKrgm
RfYepMsLggw
jyVF
GMGDMCNFv
bxKzyWtrU
YZlRqNPieR
UNfoYIaUwO
FbGkthFlA
gfIJgFTc
DRMGAY
FuTmAyp
HzqRp
HIXOS
cXCxcPh
gtCc
RfZH
XLRQpD
kivOevlxhoNt
PwzV
AZocGCXFKfRH
BhtrNUGeueFf
Zoay
KyYZCZZH
UUoBIQiFD
iJvWZQsKjIKr
xfTZN
EzLoor
mccNIMb
MLuBv
ESJH
aTNaHZKlZG
ykgPWtDg
JFBwyzQ
dtmI
NzABFgCVjW
ZqwdgMpcBvg
cMlbD
TiFmUBwanW
nChBvfvk
ZKcukTveJ
FcURD
TOSymwrNle
ZrzdIjLyBzhx
cdnpM
FkRuroGgw
kVqK
SpjOX
IsduVKZtczs
EcDx
kpAJD
HCGny
PyxGsGQgkN
nAaNuZvsk
JyueisZrewb
uTrMyAyIx
RkchBSLr
LVQx
cuGzlO
XVwBKFCcvqm
NbUpYKwdDkQ
LocLlgkVBUp
FPNupUWMqs
DwBjvLiv
ZgoGncPjyT
ihRSqfhHbID
UuJGJrlzVkMV
QbZHv
搜索
查看: 21526|回复: 113

[教程] 解决Intel 8/9系主板USB问题(更新,支持10.11.1)   [复制链接]
跳转到指定楼层
复制 

Rank: 2Rank: 2

UID
3819270
帖子
199
PB币
94
贡献
0
技术
26
活跃
343
楼主
发表于 2015-10-8 13:18:17 IP属地美国 |只看该作者 |倒序浏览
快御云安全
本帖最后由 leko999 于 2015-10-25 10:35 编辑

原英文教程的链接:
http://www.insanelymac.com/forum/topic/308325-guide-1011-full-speed-usb-series-89-keeping-vanilla-sle/

更简单的方法:
https://bbs.pcbeta.com/viewthread-1647578-1-1.html

这个可以修复安装10.11之后USB3端口失效的问题, 好处是不动SLE,只要/L/E下一个很小的驱动(只有Info.plist),但是这篇教程写的很不清楚,还有些错误的地方。为了给大家省点事,写一个详细一点的过程。

1. 为什么会有USB失效的问题


从10.11起苹果改变了USB驱动的模式(以前是啥样我也不知道),对USB加了些蛋疼的限制。关于这个的详细技术背景,请仔细阅读这篇 从技术角度谈谈10.11的USB驱动机制,兼论10.11 USB安装盘的花屏禁行问题

对我等用户来说,知道两点
1. 苹果用“USB控制器名称+机型”匹配的方式来控制USB端口。控制器名称在白果里面是EHC1/EHC2(USB2)和XHC1(USB3),假如你的DSDT里面控制器是这个名字,那么就会受影响。解决办法是修改控制器名称(改dsdt.aml)让它们不使用这些名字,比如ECH1改名EH01, XHC1改名XHC。还有个办法是使用这个受到限制的名字然后修改驱动内置的限制名单,这个需要修改SLE下面的原版驱动,不在本教程的讨论范围内。参见这篇英文教程

2. 对大多数台式机的8/9系主板,其实1根本不是问题,虽然USB2控制器默认用的是EHC1和EHC2,但是这两个下面根本没东西。所有的USB端口,USB2和USB3的,都挂在USB3控制器下,而这个控制器的名称一般是XHC,也就是说,大多数主板默认就绕过了限制1。
然而,苹果还有第二个限制,那就是一个控制器下不能超过15个设备——这个后面详细解释——表现出来的现象就是只有USB2能用,因为默认下XHC的USB2端口直接占满了这15个名额,把USB3挤出去了。

解决办法一是节流,去掉不要的端口,让总数不超过15,也是本教程的内容。二是分流,用另外的驱动把XHC的USB2端口重定向到EHC控制器下面去,保证XHC下端口数目小于15个。


2. 查看DSDT确定端口地址

用IORegistryExplorer(或者IOJones),按照下图所示,先切换到IOACPIPlane,然后找到XHC主控,下面是所有的端口

先看左侧。默认设备名就是XHC(如果是XHC1,需要改成XHC)
以我的主板为例,XHC下有21个虚拟端口,名称分别是HS01-HS15,一共15个,这个对应USB2.0(HighSpeed)
以及SSP1-SSP6,一共6个,这个对应USB3.0.(SuperSpeed Port)

如果你的机器EHC和XHC下的虚拟端口数都小于15个,则不适用本教程,也就是说USB不工作另有原因。

在右侧的_ADR就是每个虚拟端口对应的地址。



如无意外,虚拟端口的地址是从1到21顺序排列的,也就是0x01到0x15。

USB2端口HS01到HS15对应的是1到15,即0x01到0x0F
USB3端口SSP1到SSP6对应16到21,即0x10到0x15

到此为止,不需要编辑DSDT,只要查看获取信息即可。


(可选)
如果你的USB3控制器名称是XHC1,那么必须改名。用下面的MaciASL补丁将它们改成XHC,已经是XHC就不用管了。
  1. into device label XHC1 set_label begin XHC end;
  2. into_all all code_regex XHC1 replaceall_matched begin XHC end;
复制代码
EHC1和EHC2可以改名也可以不改。参考后面的步骤3,在Windows下定位端口。如果EHC控制器下有设备(可能出现在笔记本上),建议改名。台式机一般EHC下面没有设备,可以不改。
  1. into device label EHC1 set_label begin EH01 end;
  2. into device label EHC2 set_label begin EH02 end;
  3. into_all all code_regex EHC1 replaceall_matched begin EH01 end;
  4. into_all all code_regex EHC2 replaceall_matched begin EH02 end;
复制代码

3. 在Windows下定位物理端口和虚拟端口的对应关系


8/9系主板,最多支持8个USB2和6个USB3。
在DSDT中,XHC控制器下有21个虚拟端口。
当把一个USB设备(无论USB2还是USB3)插入USB2接口的时候,系统会使用一个HS端口(HS01-HS15之一)
当把USB2设备插入USB3接口的时候,系统会使用一个HS端口(HS01-HS15之一)
当把USB3设备插入USB3接口的时候,系统会使用一个SS端口(SSP1-SSP6之一)


可以看到,要让USB3插口正常工作,需要两个虚拟端口——一个HS和一个SSP。默认情况下SSP缺失,结果就是USB3端口不认USB3设备,只能插USB2设备。那么以主板的最大值计算,需要8+6*2=20个虚拟端口,现在最多只允许15个,所以需要寻找对应关系,去掉一部分不用的端口。


在Windows下,可以用aida64或者免费的usbview。截图用的aida64。aida64正确列出了全部21个端口。其中端口1-15对应HS01到HS15,端口16-21对应SSP1到SSP6. 可以看到,读卡器是接在USB3上(端口17)




下面就是把USB设备分别插*入所有的端口,USB2口只要一次,USB3口需要用USB2设备和USB3设备各一次。每次插*入设备后,务必刷新一下显示,然后记下设备所在的端口号,这就是物理插口对应的虚拟端口的位置。

以我的Z87主板为例,记录如下(USB3有两个值,所有大于15的是SS口)
前USB3面板两个插口:  11 20和12 21
前USB2面板两个插口:  7和8
后面的见图
  

我主板上总共用了4个USB2(前2后2)和6个USB3(前2后4),这样一共需要4+6*2=16个虚拟端口。相比15个限制,只要去掉一个。

去端口的方法:
1. 对USB2口,去掉那就彻底没了。
2. 对USB3口,有三个选择
a 彻底干掉,一次腾出两个名额
b 干掉HS虚拟端口,这样USB3口将无法接受USB2设备,但是能用USB3
c 干掉SS虚拟端口,这样USB3口将无法接受USB3设备,但是还能用USB2.

我选择的是去掉前面板两个USB3口之一的USB2功能。这样对实际使用基本没影响。

原本需要的端口是  1 2 3 4 7 8 9 10 11 12    16 17 18 19 20 21
去掉端口11,那么最终结果就是 1 2 3 4 7 8 9 10 12    16 17 18 19 20 21


4. 修改plist  驱动
由于10.11.1升级增加了对9系主板的原生支持,请先升级到10.11.1,
对8/9系主板,均使用附件中的USB_Series8_Injector


解压得到kext
用plist编辑器编辑里面的Info.plist
我用的xcode,首先右键,选“Show Raw Keys/Values,这步很重要,否则看不到需要修改的数值


附图是已经编辑好的效果。需要改的地方:
1. 机型和控制器名称。改成和自己设置对应的部分。一共四处。
2. 展开XHC项里面的IOProviderMergeProperties,需要修改的地方
a. port-count  这个不是端口的数目,是所有端口地址(port项)中数值最大的那个,也就是最后一个端口的地址。这里是15000000(端口地址0x15)
b. 每个端口的名称和port数值,注意port就是虚拟端口的地址,也就是前面的1-21(0x01-0x15),
但是需要写成DWORD,不熟悉的话可以参考如下对应表。

  1. 0x01    0x01000000
  2. 0x02    0x02000000
  3. .
  4. .
  5. .
  6. 0x0F    0x0F000000
  7. 0x10    0x10000000
  8. .
  9. .
  10. 0x15    0x15000000
复制代码


最后把这个kext装到/Library/Extensions/,用kext utility修复权限,重启,USB3应该就能用了。


更新:新的更简单的方法
https://bbs.pcbeta.com/viewthread-1647578-1-1.html
附件: 你需要登录才可以下载或查看附件。没有帐号?注册
3

查看全部评分

Rank: 5Rank: 5Rank: 5

UID
216463
帖子
692
PB币
1451
贡献
0
技术
1
活跃
880
沙发
发表于 2015-10-8 17:08:53 IP属地湖南 |只看该作者
顶技术贴!

Rank: 2Rank: 2

UID
1379585
帖子
175
PB币
5
贡献
0
技术
1
活跃
233
板凳
发表于 2015-10-8 17:31:33 IP属地广东 |只看该作者
先收藏起来,万一以后换主板超过15个端口就能用上了。

Rank: 7Rank: 7Rank: 7

UID
638248
帖子
890
PB币
2164
贡献
0
技术
6
活跃
1352

十一周年 7周年庆典勋章 8周年庆典勋章

4F
发表于 2015-10-8 17:32:34 IP属地山东 |只看该作者
HM67的USB3.0口也不好使啊。。。

Rank: 5Rank: 5Rank: 5

UID
3474819
帖子
920
PB币
262
贡献
0
技术
5
活跃
2193
5F
发表于 2015-10-8 17:51:40 IP属地四川 |只看该作者
说好了就留在10.10.5的。出了又要折腾,

Rank: 7Rank: 7Rank: 7

UID
373049
帖子
1427
PB币
1304
贡献
0
技术
1
活跃
1794
6F
发表于 2015-10-8 17:51:55 IP属地广东 |只看该作者
苹果公司真是吃多了,好好的要改usb机制,搞的我头都大了

无尽的折腾才是生活中的乐趣

Rank: 11Rank: 11Rank: 11

UID
2043294
帖子
5307
PB币
1043
贡献
0
技术
156
活跃
3186

7周年庆典勋章 8周年庆典勋章 我是大学生!

7F
发表于 2015-10-8 17:53:26 IP属地江苏 |只看该作者
技术贴一般我都看不大懂的,默默飘过顶一下

Rank: 5Rank: 5Rank: 5

UID
3087049
帖子
598
PB币
70
贡献
0
技术
15
活跃
1629
8F
发表于 2015-10-8 18:12:50 IP属地浙江 |只看该作者
不错,很清晰,但现在有2个口可以用,暂时不想改了

Rank: 5Rank: 5Rank: 5

UID
112007
帖子
499
PB币
2548
贡献
0
技术
1
活跃
1709
9F
发表于 2015-10-8 18:31:26 IP属地北京 |只看该作者
这种帖子,必须要顶。。。谢谢楼主啊。。。。

Rank: 7Rank: 7Rank: 7

UID
590471
帖子
1440
PB币
1928
贡献
0
技术
129
活跃
2729
10F
发表于 2015-10-8 21:02:05 IP属地辽宁 |只看该作者
按楼主的方法改完所有usb接口都跑到USB3.0下面去了

Rank: 5Rank: 5Rank: 5

UID
112007
帖子
499
PB币
2548
贡献
0
技术
1
活跃
1709
11F
发表于 2015-10-8 21:20:04 IP属地北京 |只看该作者
本帖最后由 fzzf 于 2015-10-8 21:22 编辑

对应表,昨天晚上做出来了。。。按照楼主改的。。以前usb2.0的都跑到usb3.0下面去了。。。。。。
哪没对吗????

Rank: 7Rank: 7Rank: 7

UID
1558713
帖子
797
PB币
345
贡献
0
技术
12
活跃
2431

7周年庆典勋章

12F
发表于 2015-10-8 21:39:13 IP属地江苏 |只看该作者
楼主写的大概明白,但是USB的自动切换方案不知能否改改,而且我是USB3全部好好的USB2全挂了

Rank: 7Rank: 7Rank: 7

UID
590471
帖子
1440
PB币
1928
贡献
0
技术
129
活跃
2729
13F
发表于 2015-10-8 21:42:21 IP属地天津 来自手机 |只看该作者
二是分流,用另外的驱动把XHC的USB2端口重定向到EHC控制器下面去,保证XHC下端口数目小于15个。
这部分不好理解,其实我的主板按国外另一种方法USB已经完美了,就是想试试楼主的方法

Rank: 5Rank: 5Rank: 5

UID
112007
帖子
499
PB币
2548
贡献
0
技术
1
活跃
1709
14F
发表于 2015-10-8 21:54:04 IP属地北京 |只看该作者
tdyso 发表于 2015-10-8 21:42
二是分流,用另外的驱动把XHC的USB2端口重定向到EHC控制器下面去,保证XHC下端口数目小于15个。
这部分不好 ...

什么方法?

Rank: 7Rank: 7Rank: 7

UID
590471
帖子
1440
PB币
1928
贡献
0
技术
129
活跃
2729
15F
发表于 2015-10-8 22:04:47 IP属地天津 来自手机 |只看该作者
fzzf 发表于 2015-10-8 21:54
什么方法?


1.clover path DSDT
2.加载Re...man两个Fake....kext
3.添加一个SSDT

Rank: 5Rank: 5Rank: 5

UID
112007
帖子
499
PB币
2548
贡献
0
技术
1
活跃
1709
16F
发表于 2015-10-8 22:05:49 IP属地北京 |只看该作者
tdyso 发表于 2015-10-8 22:04
1.clover path DSDT
2.加载Re...man两个Fake....kext
3.添加一个SSDT

有地址吗???我看看。。现在全在usb3.0下。。。。。

Rank: 7Rank: 7Rank: 7

UID
590471
帖子
1440
PB币
1928
贡献
0
技术
129
活跃
2729
17F
发表于 2015-10-8 22:13:30 IP属地天津 来自手机 |只看该作者
fzzf 发表于 2015-10-8 22:05
有地址吗???我看看。。现在全在usb3.0下。。。。。

tonymacX86,你去找一下吧,手机上的,记不住具体地址

Rank: 5Rank: 5Rank: 5

UID
112007
帖子
499
PB币
2548
贡献
0
技术
1
活跃
1709
18F
发表于 2015-10-8 22:28:49 IP属地北京 |只看该作者
tdyso 发表于 2015-10-8 22:13
tonymacX86,你去找一下吧,手机上的,记不住具体地址

谢谢了。。。。

Rank: 2Rank: 2

UID
3622757
帖子
486
PB币
0
贡献
0
技术
27
活跃
614
19F
发表于 2015-10-8 22:46:35 IP属地湖南 |只看该作者
Mac系统通常到第5个就比较好用了。El Capitan 现在还是有许多潜在的问题。

Rank: 7Rank: 7Rank: 7

UID
1430546
帖子
1557
PB币
588
贡献
0
技术
9
活跃
2321
20F
发表于 2015-10-8 23:14:20 IP属地广东 |只看该作者
  1. Device (SSP1)
  2.                 {
  3.                     Method (_ADR, 0, NotSerialized)  // _ADR: Address
  4.                     {
  5.                         Return ((XSPA + Zero))
  6.                     }
  7.                 }

  8.                 Device (SSP2)
  9.                 {
  10.                     Method (_ADR, 0, NotSerialized)  // _ADR: Address
  11.                     {
  12.                         Return ((XSPA + One))
  13.                     }
  14.                 }

  15. Device (SSP3)
  16.             {
  17.                 Method (_ADR, 0, NotSerialized)  // _ADR: Address
  18.                 {
  19.                     Return ((XSPA + 0x02))
  20.                 }
  21.             }

  22.             Device (SSP4)
  23.             {
  24.                 Method (_ADR, 0, NotSerialized)  // _ADR: Address
  25.                 {
  26.                     Return ((XSPA + 0x03))
  27.                 }
  28.             }

  29. Device (SSP5)
  30.             {
  31.                 Method (_ADR, 0, NotSerialized)  // _ADR: Address
  32.                 {
  33.                     Return ((XSPA + 0x04))
  34.                 }
  35.             }

  36.             Device (SSP6)
  37.             {
  38.                 Method (_ADR, 0, NotSerialized)  // _ADR: Address
  39.                 {
  40.                     Return ((XSPA + 0x05))
  41.                 }
  42.             }
复制代码
为什么我DSDT里USB3是这样的
回顶部
Copyright (C) 2005-2024 pcbeta.com, All rights reserved
Powered by Discuz!  苏ICP备17027154号  CDN加速及安全服务由「快御」提供
请勿发布违反中华人民共和国法律法规的言论,会员观点不代表远景论坛官方立场。
远景在线 | 远景论坛 | 苹果论坛 | Win11论坛 | Win10论坛 | Win8论坛 | Win7论坛 | WP论坛 | Office论坛