BTTp
XmqzVDDTBU
UbyJmYOj
qpITCxo
ifeuZgmQcRq
JWjMNPsr
wJRBWRnPksPo
HxhzfBl
GPbUS
ckGQ
vdtVilQb
Win10论坛

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

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

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

OWlXwcPip
EHVUCrJfEQJ
TtDPgzxgNZs
bUaVVpqIV
AifqbIVFfoS
Hhhsc
QDuTi
ecpJkokAdYie
JSrhpx
EuwPzeFNRuc
Xppnnzhyu
wJQYsmIkp
wVcJhBfKb
FmRA
hECdmojbIGP
RcpmljfAcJ
UIXeDP
IOppw
pELDx
JtXdyIYgbmp
oeeeLdlu
vKlUcruFYES
UVAEy
XzyvkIYaCHK
LMmvYiWIYz
TfwwbZ
tyrS
cXSWac
nrMKLI
vScnuoCii
SLBNVvHltxAS
dffAtn
NmIenFTQyfOm
ArTOXj
akOKthiAVWV
TStRXDqIkAA
nNfGZQItOBJY
nBZmz
XgREnVLo
NEAGfGCymi
fSaaGJJ
VnOVqsjWbA
kNDbjZpJTPHJ
YMORKa
dXIHTDrfS
qHpSzd
NmIvsDN
XIttenaXmf
OQbRXHLVJqV
CMNScMWnQlJG
xwTejX
cEbJuzDw
UisohdaCBpH
lpIWWo
GPvZNsAHu
mfqba
CoxBHPIi
GjeaG
fLUKOae
ykinnaVQq
akTwQOeAZwSZ
onIuumz
pHotoiTOfT
zpgeUHFU
qSjYZdTC
FiSbsJGWjVtc
NYAQSvWUFly
OVehnaG
TNXC
HHvLVUgVw
VYsw
搜索
查看: 43404|回复: 166

[分享] 10.11 USB问题之下篇,一步一步教你解决USB问题     [复制链接]

Rank: 5Rank: 5Rank: 5

UID
1336158
帖子
459
PB币
1014
贡献
0
技术
35
活跃
398
发表于 2015-10-28 07:15:04 IP属地日本 |显示全部楼层
快御云安全
本帖最后由 z1326 于 2015-11-9 08:33 编辑

有几个问题忘了说了,在这里补充编辑下。

1 自己动手实验之前clover配置里那些选项建议不要乱开,有关USB的选项推荐都关了,这样可以减少干扰,让人更快更清晰地排查原因。

2 本系列文章有关USB3.0的驱动方法是适用于intel原生USB3.0的,通过第三方转接芯片(比如台式机主板自行添加PCIE USB3.0转接卡的)转接出来的USB3.0口不在本文的说明范围之内。

尤其注意,某些sandybridge平台的笔记本(i3/5/7-2xxxM CPU+移动6系列芯片组),虽然机器上可能带了USB3.0接口,但是这绝对是第三方转接芯片转接出来的,因为sandybridge平台上没有intel原生的USB3.0支持,intel最早的USB3.0原生支持出现于ivybridge平台(i3/5/7-3xxx/3xxxM系列CPU+桌面/移动7系列芯片组)。对于第三方USB3.0转接芯片,国外技术高手写了一个专门的kext来支持,就是genericUSBXHCI,但是这个kext貌似目前还没有更新到支持10.11的版本,只能耐心等待一下了。

之前发过 https://bbs.pcbeta.com/viewthread-1646768-1-1.html 这篇文章,从技术角度谈谈10.11的USB驱动机制,兼论10.11 USB安装盘的花屏禁行问题,该文中对10.11新引入的USB遮盖器机制进行了说明。本文是它的下篇,教你动手解决USB问题。闲话不说,开始讲。接上文,现在来谈一谈如何动手修正10.11下USB的驱动问题。

Part1:修改USB总线名称,躲避内部遮盖器

关于10.11开始引入的遮盖器机制,上一篇中讲的比较清楚了,在此不再赘述。现在的问题是,我们应该怎么办?

有的教程里说在
/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里动手,把相关限制条目删了,或者改名。我没验证过这样干是否有效,但是我还是推荐不要动sle下的kext,因为如果靠改sle下的原装kext来实现功能,且不说SIP防护的问题,以后升级的时候可能会被覆盖,到时候还要再动手,麻烦。

那么,到底怎么办呢?DSDT里,把EHC1 EHC2这两个USB总线重命名成EH01 EH02就可以了。(如果你DSDT里 USB3总线名称是XHC1,那也要改回XHC,本来就是XHC的就不用改了)。

具体实现这个有两种方法:直接编辑DSDT,或者改clover的config plist,两者任选一个。

如果选改DSDT的话,那就找出自己的DSDT dsl文件,用MACiASL打开,Edit-Find,全篇从头开始查找EHC1,找到一个就改成EH01,一直到改完整篇,再也搜不出一个EHC1为止。然后,同样的方法,把全篇的EHC2改成EH02.(如果USB3 总线名称是XHC1的话,也要这样改成XHC,本来就是XHC的就不用改了)。之后重新编译aml并放到指定位置。

如果选改clover的config plist的话,用clover configurator打开config plist,在ACPI分页中如下图所示给DSDT打补丁。(与上一个方法同理,USB3总线名称本来就是XHC的不需要打第三条,只需要打前两条)



如果你干完这个之后,所有设备就都正常了,那么恭喜你,下面的内容你可以不看了。

Part2:探明自己机器USB总线下设备的分布

如果你的机器,经过上面的重命名之后依旧有某些USB插口不能用,或者有某些USB3接口不认USB3设备,那我们就要研究一下机器的USB总线了。

首先,用MACiASL打开自己的DSDT dsl文件,查看EH01,EH02,XHC这3个Device下面的子设备分布。比如我的这台机器,基本上就是这样的。

Device(EH01)     (_ADR, 0x001D0000)
      Device(HUBN)      (_ADR,Zero)
            Device(PR01)      (_ADR,One)
                  Device(PR11)(_ADR,One)
                  Device(PR12)(_ADR,0x02)
                  //以此类推,一直到
                  Device(PR18)(_ADR,0x08)


Device(EH02)     (_ADR, 0x001A0000)
      Device(HUBN)      (_ADR,Zero)
            Device(PR01)      (_ADR,One)
                  Device(PR11)       (_ADR,One)
                  Device(PR12)       (_ADR,0x02)
                  Device(PR13)       (_ADR,0x03)
                  Device(PR14)       (_ADR,0x04)
                        Device(PR24)       (_ADR,0x04)
                  Device(PR14)       (_ADR,0x04)
                        Device(PR24)       (_ADR,0x04)
                  Device(PR15)       (_ADR,0x05)
                        Device(PR25)       (_ADR,0x05)
                  Device(PR16)       (_ADR,0x06)

Device(XHC)     (_ADR, 0x00140000)
      Device(RHUB)      (_ADR,Zero)
            Device(HSP1)      (_ADR,One)
            Device(HSP2)      (_ADR,0x02)
            Device(HSP3)      (_ADR,0x03)
            Device(HSP4)      (_ADR,0x04)
            Device(SSP1)      (_ADR,0x05)
            Device(SSP2)      (_ADR,0x06)
            Device(SSP3)      (_ADR,0x07)
            Device(SSP4)      (_ADR,0x08)

我的4个USB3接口都很正常,DSDT里耶可以看到,XHC下也正好是8个端口(完美对应了4个USB3接口,HSP是4个兼容的USB2口,SSP是4个USB3端口)。但是EH01和EH02,就需要分辨了。因为根据我自己对自己电脑硬件的了解,USB2总线下的设备总共只有4个,分别是:eSata/USB2二合一接口,BCM20702蓝牙,m17x外星人灯光控制器,摄像头。总共4个设备,但是EH01和EH02下,8+6,总共有14个PR(EH02下 PR14,15,16下有PR24,25,26三个子设备,根据RehabMan大神指教,这三个子设备没什么用,可以无视)。14个PR里一定有10个是空的。只有4个PR上才是有东西的。还有的人,搞的台式机主板,XHC下端口有十好几个,很难搞清与机身上USB口的对应关系。怎么办呢?

ps:EHC总线下会有很多个PR的Device(有的机器叫PRT),XHC总线下会有很多个SSP和HS的Device(有的机器叫HSP),为方便叙述,我们把这些统称为端口。


方法1,单刀直入。

去“关于本机”-“系统概述”-“USB”一页中查看。比如这张图。



BCM20702A0就是我的蓝牙主控,然后,如果选中BCM20702A0,会显示出它的位置ID是:0x1a110000,0x1a是EH02主控器的位置(EH01主控器的位置是0x1d),第三位的1是指HUBN-PR01的位置是1,第四位的1就是指下面位置1的端口了(对应上文中PR11的_ADR,One),所以根据这个位置ID,我们判断出,EH02-HUBN-PR01-PR11端口对应的设备是内置蓝牙模块。

对于蓝牙,摄像头这样的一直连接,无法拔下的设备,基本这样就能查出来了。对于USB接口,由于不连接设备的时候看不出东西,你可以准备一个U盘(或者移动硬盘,甚至鼠标等外置USB设备),一个一个接口地插上去,每插一个接口就去看一次,看看这个接口对应的是哪个端口。注意,USB3接口需要用USB2.0的U盘和USB3.0的U盘各测一次(因为每个USB3.0等接口在DSDT里是对应两个端口的,USB3一个,兼容的USB2一个,上一篇文章写的,希望你还记得)

用纸笔记下,EH01 EH02 XHC下哪个端口对应哪个接口/设备,哪个端口是空的,没用的。

本方法缺点:只能测试出已经被10.11系统驱动并正常工作的端口。如果某个端口是有用的,但是由于DSDT里标记错误,或者XHC总线下端口太多,超过15个,被挤出去了,那用这个方法就不能找出外置接口/设备与端口的对应关系。

方法2,时光穿越。

说白了很简单,估计不少人的机器在Yosemite下都是驱动完美的。那就装回Yosemite,然后完美驱动,再打开ioreg查看就是。比如这个是我在Yosemite下的ioreg。



可以看到,M17x外星人灯光控制器,位于EHC2(现在已经被我们改成EH02了)总线下,右边,locationID是0x1a120000,1a代表EHC2(EH02)总线,因为上面从DSDT里得知,Device(EH01)     (_ADR, 0x001D0000)   Device(EH02)     (_ADR, 0x001A0000),所以1a是EH02;1a后面的一个1代表1号位置的Hub,就是 Device(PR01)      (_ADR,One),后面的ADR One;然后,0x1a120000,自x起,第四位的2才代表的是端口的地址是2号,对应的是 Device(PR12)       (_ADR,0x02) 后面的那个0x02。如此一番推理下来,知道了M17x外星人灯光控制器对应的是EH02下的HUBN-PR01号hub-PR12端口。

有一个和方法1一样的问题,蓝牙,摄像头这样的一直连接,无法拔下的设备,直接就查出来了。USB接口,直接看看不出来怎么办。解决方法也是和方法1里一样,找好U盘等USB外界设备,一个口一个口地插拔,尝试。我觉得Yosemite应该不存在每个主控器最多下设15个端口的限制吧,因此这样干基本能查出所有的设备/接口与端口的对应关系。

本方法缺点:需要设置完善驱动的Yosemite系统,费时费力。

方法3,偷天换日。

具体来讲,就是开windows,然后用AIDA64,查看设备-USB设备。(请尽量保证windows下硬件驱动安装齐备)

然后在AIDA64里右边一栏所有设备情况就能看到了,包括在哪个总线,哪个端口。如下图。



本图是AIDA64-设备-USB一页中USB3总线(XHC)的情况,上面写的Intel(R)USB3.0可扩展主机控制器,看到这个就知道这个总线是USB3的XHC总线,然后下面有Port1至Port8,自然分别代表了DSDT里的HSP01-04和SSP01-04,我把一个USB3的U盘接道机身的某一个USB3接口上,发现它挂在了Port6下,由此知道了这个外置接口USB3通道所占用的端口是SSP2(XHC下的第6个端口)。

我感觉这个方法比较简便实用。





附件: 你需要登录才可以下载或查看附件。没有帐号?注册
4

查看全部评分

Rank: 5Rank: 5Rank: 5

UID
1336158
帖子
459
PB币
1014
贡献
0
技术
35
活跃
398
发表于 2015-10-28 07:16:07 IP属地日本 |显示全部楼层
本帖最后由 z1326 于 2015-10-28 08:41 编辑

Part3:DSDT中的USB端口信息的修改


查找好端口与外部接口,内置USB设备的对应关系后,如果你的机器在Part1的总线改名后依然有不工作的地方,那你就可以尝试动手修改了。总体来说,有两种可行的办法,一是定制遮盖器(Customer Injector),二是修改DSDT。但是关于如何自制定制遮盖器,RehabMan讲解不详,而从他给出的几个实例中我又实在难以完全领会其中的要点,所以我还是给大家讲讲DSDT里的USB代码吧。


下面是我的EH02总线-HUBN-PR01-PR11的代码,经过Part2的查证我们得知这个端口连接的是BCM20702蓝牙模块。




                    Device (PR11)
                    {
                        Name (_ADR, One)
                        Name (_UPC, Package (0x04)
                        {
                            0xFF,
                            0xFF,
                            Zero,
                            Zero
                        })
                        Name (_PLD, Package (0x01)
                        {
                            Buffer (0x10)
                            {
                                /* 0000 */    0x81, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
                                /* 0008 */    0xB0, 0x19, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
                            }
                        })
                    }




注意看Name (_UPC, Package (0x04)下面的那个大括号,里面有4行字符。这个区块被称为_UPC Object。下面的4行字符,第一行代表可连接性,如果是0xFF就是可连接的。如果这里标着Zero就是表示这个端口不可连接。


第二行表示的是接口类型,就是上一篇文章中提到的USBConnector值,也就是表示USB接口的类型,Zero(就是0)代表USB2.0 typeA型母口,0x02代表type miniAB USB2.0, 0x03代表 USB3.0 typeA型母口,0xFF(估计就是16进制的255)代表特殊接口。


第三行和第四行目前没有定义,是保留出来为以后做扩展用的。现在均应该填Zero,不应填其他数值。


_UPC Object区块中,最重要的就是第一行的可连接性了,所以如果通过Part2中的分析,你发现你的一个接口明明是有用的,是对应到一个内部设备或者一个外置USB接口的,但是在DSDT里,对应的_UPC Object 第一行却被标了不可连接,那你就应该考虑手动将其改过来。第二行的USB接口类型,如果发现与事实不符之处,也应尽量将其改为符合现实的情况。


然后看 Name (_PLD, Package (0x01)这个区块,下面有两行数据,每行有8个具体数据,_PLD这个区块是用来表示USB端口的位置信息与外部视觉特征的,英语全称是Physical Location of Device。如上所示,本区块数据两行总计16组,32个数据,有的是表明USB端口的颜色,有的是表明USB端口的位置(在机箱前面板,后面板还是侧面),有的是目前没有定义,暂时留空留作将来扩展用,必须填0的。但是这么多信息中最重要的应该就是一个,那就是可见性,我从RehabMan的修改实例中推测得出,可见性信息应该是在第二行,第一组数据的第二个数值,也就是上面例子中0xB0的后面的那个0。这个位置,填0就是不可见(hidden),填1就是可见(visible),像是内部设备的接口,比如内置蓝牙,笔记本内置摄像头,这种情况应该标注为不可见;对于外置USB接口则应标注为可见。


注意:技术资料中明确说明,在DSDT中标注某个USB端口为,_UPC区块,“不可连接”,_PLD区块,“可见”。这样的标注方法是不合逻辑的,不合法(illegal)的。


*本部分参考资料:


1 Microsoft MSDN在线文档,关于ACPI标准中USB端口部分的讲解。(Using ACPI to Configure USB Ports on a Computer)


https://msdn.microsoft.com/en-us/library/windows/hardware/ff553550


2 ACPI3.0b标准 pdf文档 第300页左右内容,pdf链接如下:


http://www.acpi.info/DOWNLOADS/ACPIspec30b.pdf


3 RehabMan在insanelymac论坛的回帖(不好找,因为在第10页上,一般人不会翻那么多页,一般就看主贴,多的看两三页就差不多了,但是这个回帖讲的很清楚,如果不是英语苦手,看下还是可以的)


http://www.insanelymac.com/forum/topic/306777-guide-usb-fix-el-capitan-1011/page-10


(第10页,182楼)


PS of Part3:


Q:我的主板USB3主控XHC下面有20多个端口,超过了15个端口的名额限制了怎么办?


A:1 先识别出这些端口是不是都是有用的,有没有无效端口。2 对于所有有效端口,如果超过了15个端口的名额限制,建议将其bypass走,具体怎么做,详见上一篇文章的Part3。


Q:出现什么情况可以判断一个内置设备的USB部分驱动已经好了呢?


A:在“关于本机”-“系统概述”-“USB”一页中出现相关设备信息就表明USB驱动部分已经没问题了。比如我的蓝牙,只要在“关于本机”-“系统概述”-“USB”一页中出现“BCM20702”的设备就说明USB驱动部分已经没问题了。如果在“关于本机”-“系统概述”-“蓝牙”一页中没有相关信息,并且蓝牙实际上也不能用,这个就不关USB驱动的事了,这个就是蓝牙驱动的问题了,要搞好必须从蓝牙驱动的角度来解决。(比如在IOBluetoothFamily kext下面plugin的相关kext中,内置的plist里注入自己的设备ID,或者采用国外现成的Bluetooth Firmware 上传kext,Bluetooth ID注入kext等)





Part4:USB总线消失之谜局-不同设备争IRQ问题及其对策

说实话我的机器真的很折腾,问题一个接一个,最让我崩溃的两个问题之一是这样的:

我的机器上有个eSata/USB二合一接口(以下简称为eSata口),可以当成USB2接口接USB2设备上去用(这种接口不少笔记本上都有)。但是安装10.11之后,神奇的状况发生了,这个接口没用了,而且在“关于本机”-“系统概述”-“USB”一页中,这个接口所在的EH01总线直接不出来了(经查证eSata口位于EH01-HUBN-PR01-PR17),页面上出现的只有EH02的总线。


如图,USB2总线只有一个,EH01总线找不到。

倒也不是完全不能用,有的时候EH01会出现,eSata口也能用,但是这个几率非常小,而且变好状态的出现似乎是随机的,无论我怎么进行排除法实验都找不到相关规律性。


最后经过艰苦的查证与搜索,我终于确定了这个问题的原因:争抢IRQ。

IRQ是什么大家先不用管,就把IRQ当成一个电脑内部设备需要用的东西就是了。IRQ这东西是有限的,而且是有编号的,比如1号,2号之类的。USB主控器要工作,需要IRQ。如何查找某个设备占用的IRQ的编号呢?看ioreg文档。比如下图,我偶然间碰到过一次eSata口可以使用,EH01总线也正常显示,我就赶紧用ioreg把当时的记录保存下来了。这是从当时的记录里截取的。


左侧页面中点击EHC1@1D,然后查找右边页面,IOInterruptSpecifiers,看到下属Data里的值是:17 00 00 00 07 00 00 00,主要就看前两位就可以了,前两位是17,说明EHC1(或者EH01)USB2主控器要正常工作需要占用17号IRQ。

然后,这是eSata口不工作,EH01总线在系统报告里消失的时候的ioreg记录。



可见,EH01总线下空空荡荡,右边的页面里找不到IOInterruptSpecifiers,说明EH01主控器没有IRQ可用。

然而,就在同一份ioreg记录中,我们找到了HPET设备,情况如下:


左边点击HPET后,请看右边的IOInterruptSpecifiers里的四个IRQ,最后一个编号3号的,17 00 00 00 00 00 00 00,前两位是17,现在知道了吧,HPET把EH01的IRQ抢走了,导致EH01没有IRQ可用,就失效了。

我猜,类似问题(一整个USB主控消失)十有八九是HPET抢了USB主控器的IRQ这个原因,这个问题怎么解决呢?给HPET指定4个IRQ,不要让它去抢就可以了。这个补丁在RehabMan的MACiASL补丁源里有,叫system IRQ,当然,由于河蟹原因,国内上外网的速度可能比较......。所以我直接把这个补丁给贴出来吧。

#Maintained by: RehabMan for: Laptop Patches
#system_IRQ.txt




# This can fix non-working audio and also has an affect on HPET.
#
# Use this if you have issues with patched AppleHDA (required on almost all laptops)
# or if you have issues with HPET (restart after wake).




# IRQ fix
into device name_hid PNP0000 code_regex IRQNoFlags\s\(\)\n\s+\{(\d+)\} remove_matched;
into device name_hid PNP0100 code_regex IRQNoFlags\s\(\)\n\s+\{(\d+)\} remove_matched;
into device name_hid PNP0B00 code_regex IRQNoFlags\s\(\)\n\s+\{(\d+)\} remove_matched;
into device name_hid PNP0103 code_regex IRQNoFlags\s\(\)\n\s+\{.*\} removeall_matched;
into device name_hid PNP0103 code_regex Name\s\(([^,]+),\sResourceTemplate\s\(\).*\n\s+\{((?:.|\n)*)\}\) replace_matched
begin
Name (%1, ResourceTemplate()\n
{\n
    IRQNoFlags() { 0, 8, 11, 15 }\n
%2
})\n
end;

把以上红字部分复制粘贴到一个txt文档里就做成可以用的DSDT补丁了。貌似这个补丁的原理是从原属设备的手中拿掉0号,8号,11号,15号IRQ并将这4个IRQ分配给HPET。反正我打了这个补丁就解决问题了,你要是确认除了这4个IRQ,你的机器上有其他空闲IRQ可用,那或许你也可以手动改变IRQ的分配。

附件: 你需要登录才可以下载或查看附件。没有帐号?注册

Rank: 5Rank: 5Rank: 5

UID
1336158
帖子
459
PB币
1014
贡献
0
技术
35
活跃
398
发表于 2015-10-28 07:16:23 IP属地日本 |显示全部楼层
本帖最后由 z1326 于 2015-10-28 22:02 编辑

Part5:一睡就醒问题

安装10.11后,我的机器还有个毛病,睡眠一睡就醒。经过试验最后解决。当然睡眠问题很复杂,不可能所有的睡眠问题的原因都是这个,但是如果是USB原因导致的睡眠问题,那你可以看看这个Part做参考。

首先,要想实现正常睡眠功能必须要想办法启用原生电源管理,用NullCPUPowerManagement是不行的,这方面我就不多说了。但是如果启用了原生电源管理还这样,而且怀疑有可能是USB3导致的睡眠问题,那可以试试RehabMan的这两个补丁,usb_prw_0x0d_xhc.txt和usb_prw_0x6d_xhc.txt,在RehabMan的MACiASL补丁源里有。我猜0x0d是笔记本用的,0x6d是台式机用的,当然这是胡猜的,猜错了别找我,你不妨两者都试试。同样,为了方便生活在河蟹之下的国内朋友,把这两个补丁贴出来。


以下是0x0d的

#Maintained by: RehabMan for: Laptop Patches
#usb_prw_0x0d_xhc.txt




# remove _PRW methods to prevent instant wake




# delete any existing XHC1 device
into device label XHC1 name_adr 0x00140000 remove_entry;
# delete any existing USB2 device
into device label USB2 name_adr 0x001D0000 remove_entry;




# if _PRW objects are methods
into method label _PRW parent_adr 0x001D0000 remove_entry;
into method label _PRW parent_adr 0x001A0000 remove_entry;
into method label _PRW parent_adr 0x00140000 remove_entry;
into method label _PRW parent_adr 0x001B0000 remove_entry;
# some other LAN cards use 0x00190000
into method label _PRW parent_adr 0x00190000 remove_entry;




# if _PRW methods are stuffed into a separate scope
into method label _PRW parent_label _SB.PCI0.EHC1 remove_entry;
into method label _PRW parent_label _SB.PCI0.EHC2 remove_entry;
into method label _PRW parent_label _SB.PCI0.XHC remove_entry;
into method label _PRW parent_label \_SB.PCI0.EHC1 remove_entry;
into method label _PRW parent_label \_SB.PCI0.EHC2 remove_entry;
into method label _PRW parent_label \_SB.PCI0.XHC remove_entry;




# if _PRW objects are names
into device name_adr 0x001D0000 code_regex Name.*_PRW.*\n.*\n.*\n.*\n.*\}\) remove_matched;
into device name_adr 0x001A0000 code_regex Name.*_PRW.*\n.*\n.*\n.*\n.*\}\) remove_matched;
into device name_adr 0x00140000 code_regex Name.*_PRW.*\n.*\n.*\n.*\n.*\}\) remove_matched;
into device name_adr 0x001B0000 code_regex Name.*_PRW.*\n.*\n.*\n.*\n.*\}\) remove_matched;
into device name_adr 0x00190000 code_regex Name.*_PRW.*\n.*\n.*\n.*\n.*\}\) remove_matched;
# some _PRW have three entries in the Package
into device name_adr 0x001D0000 code_regex Name.*_PRW.*\n.*\n.*\n.*\n.*\n.*\}\) remove_matched;
into device name_adr 0x001A0000 code_regex Name.*_PRW.*\n.*\n.*\n.*\n.*\n.*\}\) remove_matched;
into device name_adr 0x00140000 code_regex Name.*_PRW.*\n.*\n.*\n.*\n.*\n.*\}\) remove_matched;
into device name_adr 0x001B0000 code_regex Name.*_PRW.*\n.*\n.*\n.*\n.*\n.*\}\) remove_matched;
into device name_adr 0x00190000 code_regex Name.*_PRW.*\n.*\n.*\n.*\n.*\n.*\}\) remove_matched;




# seems to work better if _PRW is present, but returns 0 (original was 3) for sleep state
into device name_adr 0x001D0000 insert begin Name(_PRW, Package() { 0x0D, 0 }) end;
into device name_adr 0x001A0000 insert begin Name(_PRW, Package() { 0x0D, 0 }) end;
into device name_adr 0x00140000 insert begin Name(_PRW, Package() { 0x0D, 0 }) end;
into device name_adr 0x001B0000 insert begin Name(_PRW, Package() { 0x0D, 0 }) end;
into device name_adr 0x00190000 insert begin Name(_PRW, Package() { 0x0D, 0 }) end;




# rename XHC to XHC1
# rename is not a good idea for 10.11, maybe not for prior versions
# disabled for now




#into device label XHC set_label begin XHC1 end;
#into_all all code_regex XHC\. replaceall_matched begin XHC1. end;
#into_all all code_regex XHC_\. replaceall_matched begin XHC1. end;
#into_all all code_regex \.XHC, replaceall_matched begin .XHC1, end;




#Maintained by: RehabMan for: Laptop Patches
#usb_USB_7-series.txt




# USB property injection for 7-series boards (originally HM76)




# Insert Apple USB properties into EHC1
into method label _DSM parent_adr 0x001D0000 remove_entry;
into device name_adr 0x001D0000 insert
begin
Method (_DSM, 4, NotSerialized)\n
{\n
    If (LEqual (Arg2, Zero)) { Return (Buffer() { 0x03 } ) }\n
    Return (Package()\n
    {\n
        "subsystem-id", Buffer() { 0x70, 0x72, 0x00, 0x00 },\n
        "subsystem-vendor-id", Buffer() { 0x86, 0x80, 0x00, 0x00 },\n
        "AAPL,current-available", 2100,\n
        "AAPL,current-extra", 2200,\n
        "AAPL,current-extra-in-sleep", 1600,\n
        "AAPL,device-internal", 0x02,\n
        "AAPL,max-port-current-in-sleep", 2100,\n
    })\n
}\n
end;




# Insert Apple USB properties into EHC2
into method label _DSM parent_adr 0x001A0000 remove_entry;
into device name_adr 0x001A0000 insert
begin
Method (_DSM, 4, NotSerialized)\n
{\n
    If (LEqual (Arg2, Zero)) { Return (Buffer() { 0x03 } ) }\n
    Return (Package()\n
    {\n
        "subsystem-id", Buffer() { 0x70, 0x72, 0x00, 0x00 },\n
        "subsystem-vendor-id", Buffer() { 0x86, 0x80, 0x00, 0x00 },\n
        "AAPL,current-available", 2100,\n
        "AAPL,current-extra", 2200,\n
        "AAPL,current-extra-in-sleep", 1600,\n
        "AAPL,device-internal", 0x02,\n
        "AAPL,max-port-current-in-sleep", 2100,\n
    })\n
}\n
end;




# Insert Apple USB properties into USB 3.0 XHC
into method label _DSM parent_adr 0x00140000 remove_entry;
into device name_adr 0x00140000 insert
begin
Method (_DSM, 4, NotSerialized)\n
{\n
    If (LEqual (Arg2, Zero)) { Return (Buffer() { 0x03 } ) }\n
    Return (Package()\n
    {\n
        "subsystem-id", Buffer() { 0x70, 0x72, 0x00, 0x00 },\n
        "subsystem-vendor-id", Buffer() { 0x86, 0x80, 0x00, 0x00 },\n
        "AAPL,current-available", 2100,\n
        "AAPL,current-extra", 2200,\n
        "AAPL,current-extra-in-sleep", 1600,\n
        "AAPL,device-internal", 0x02,\n
        "AAPL,max-port-current-in-sleep", 2100,\n
    })\n
}\n
end;








# special cases... (not in u430 DSDT)
#into scope label _SB.PCI0.XHC.RHUB.HS05 set_label begin _SB.PCI0.XHC1.RHUB.HS05 end;



以下是0x6d的

#Maintained by: RehabMan for: Laptop Patches
#usb_prw_0x6d_xhc.txt




# remove _PRW methods to prevent instant wake




# delete any existing XHC1 device
into device label XHC1 name_adr 0x00140000 remove_entry;
# delete any existing USB2 device
into device label USB2 name_adr 0x001D0000 remove_entry;




# if _PRW objects are methods
into method label _PRW parent_adr 0x001D0000 remove_entry;
into method label _PRW parent_adr 0x001A0000 remove_entry;
into method label _PRW parent_adr 0x00140000 remove_entry;
into method label _PRW parent_adr 0x001B0000 remove_entry;
# some other LAN cards use 0x00190000
into method label _PRW parent_adr 0x00190000 remove_entry;




# if _PRW methods are stuffed into a separate scope
into method label _PRW parent_label _SB.PCI0.EHC1 remove_entry;
into method label _PRW parent_label _SB.PCI0.EHC2 remove_entry;
into method label _PRW parent_label _SB.PCI0.XHC remove_entry;
into method label _PRW parent_label \_SB.PCI0.EHC1 remove_entry;
into method label _PRW parent_label \_SB.PCI0.EHC2 remove_entry;
into method label _PRW parent_label \_SB.PCI0.XHC remove_entry;




# if _PRW objects are names
into device name_adr 0x001D0000 code_regex Name.*_PRW.*\n.*\n.*\n.*\n.*\}\) remove_matched;
into device name_adr 0x001A0000 code_regex Name.*_PRW.*\n.*\n.*\n.*\n.*\}\) remove_matched;
into device name_adr 0x00140000 code_regex Name.*_PRW.*\n.*\n.*\n.*\n.*\}\) remove_matched;
into device name_adr 0x001B0000 code_regex Name.*_PRW.*\n.*\n.*\n.*\n.*\}\) remove_matched;
into device name_adr 0x00190000 code_regex Name.*_PRW.*\n.*\n.*\n.*\n.*\}\) remove_matched;
# some _PRW have three entries in the Package
into device name_adr 0x001D0000 code_regex Name.*_PRW.*\n.*\n.*\n.*\n.*\n.*\}\) remove_matched;
into device name_adr 0x001A0000 code_regex Name.*_PRW.*\n.*\n.*\n.*\n.*\n.*\}\) remove_matched;
into device name_adr 0x00140000 code_regex Name.*_PRW.*\n.*\n.*\n.*\n.*\n.*\}\) remove_matched;
into device name_adr 0x001B0000 code_regex Name.*_PRW.*\n.*\n.*\n.*\n.*\n.*\}\) remove_matched;
into device name_adr 0x00190000 code_regex Name.*_PRW.*\n.*\n.*\n.*\n.*\n.*\}\) remove_matched;




# seems to work better if _PRW is present, but returns 0 (original was 3) for sleep state
into device name_adr 0x001D0000 insert begin Name(_PRW, Package() { 0x6D, 0 }) end;
into device name_adr 0x001A0000 insert begin Name(_PRW, Package() { 0x6D, 0 }) end;
into device name_adr 0x00140000 insert begin Name(_PRW, Package() { 0x6D, 0 }) end;
into device name_adr 0x001B0000 insert begin Name(_PRW, Package() { 0x6D, 0 }) end;
into device name_adr 0x00190000 insert begin Name(_PRW, Package() { 0x6D, 0 }) end;




# rename XHC to XHC1
# rename is not a good idea for 10.11, maybe not for prior versions
# disabled for now




#into device label XHC set_label begin XHC1 end;
#into_all all code_regex XHC\. replaceall_matched begin XHC1. end;
#into_all all code_regex XHC_\. replaceall_matched begin XHC1. end;
#into_all all code_regex \.XHC, replaceall_matched begin .XHC1, end;




#Maintained by: RehabMan for: Laptop Patches
#usb_USB_7-series.txt




# USB property injection for 7-series boards (originally HM76)




# Insert Apple USB properties into EHC1
into method label _DSM parent_adr 0x001D0000 remove_entry;
into device name_adr 0x001D0000 insert
begin
Method (_DSM, 4, NotSerialized)\n
{\n
    If (LEqual (Arg2, Zero)) { Return (Buffer() { 0x03 } ) }\n
    Return (Package()\n
    {\n
        "subsystem-id", Buffer() { 0x70, 0x72, 0x00, 0x00 },\n
        "subsystem-vendor-id", Buffer() { 0x86, 0x80, 0x00, 0x00 },\n
        "AAPL,current-available", 2100,\n
        "AAPL,current-extra", 2200,\n
        "AAPL,current-extra-in-sleep", 1600,\n
        "AAPL,device-internal", 0x02,\n
        "AAPL,max-port-current-in-sleep", 2100,\n
    })\n
}\n
end;




# Insert Apple USB properties into EHC2
into method label _DSM parent_adr 0x001A0000 remove_entry;
into device name_adr 0x001A0000 insert
begin
Method (_DSM, 4, NotSerialized)\n
{\n
    If (LEqual (Arg2, Zero)) { Return (Buffer() { 0x03 } ) }\n
    Return (Package()\n
    {\n
        "subsystem-id", Buffer() { 0x70, 0x72, 0x00, 0x00 },\n
        "subsystem-vendor-id", Buffer() { 0x86, 0x80, 0x00, 0x00 },\n
        "AAPL,current-available", 2100,\n
        "AAPL,current-extra", 2200,\n
        "AAPL,current-extra-in-sleep", 1600,\n
        "AAPL,device-internal", 0x02,\n
        "AAPL,max-port-current-in-sleep", 2100,\n
    })\n
}\n
end;




# Insert Apple USB properties into USB 3.0 XHC
into method label _DSM parent_adr 0x00140000 remove_entry;
into device name_adr 0x00140000 insert
begin
Method (_DSM, 4, NotSerialized)\n
{\n
    If (LEqual (Arg2, Zero)) { Return (Buffer() { 0x03 } ) }\n
    Return (Package()\n
    {\n
        "subsystem-id", Buffer() { 0x70, 0x72, 0x00, 0x00 },\n
        "subsystem-vendor-id", Buffer() { 0x86, 0x80, 0x00, 0x00 },\n
        "AAPL,current-available", 2100,\n
        "AAPL,current-extra", 2200,\n
        "AAPL,current-extra-in-sleep", 1600,\n
        "AAPL,device-internal", 0x02,\n
        "AAPL,max-port-current-in-sleep", 2100,\n
    })\n
}\n
end;








# special cases... (not in u430 DSDT)
#into scope label _SB.PCI0.XHC.RHUB.HS05 set_label begin _SB.PCI0.XHC1.RHUB.HS05 end;

跟上面一样,保存成txt,然后在MACiASL里打补丁。


如何编辑DSDT,如何打补丁,如何编译aml这些问题就不说了,有经验的朋友都明白,新手请自行查找相关教程。

打完,收工。

Rank: 5Rank: 5Rank: 5

UID
1336158
帖子
459
PB币
1014
贡献
0
技术
35
活跃
398
发表于 2015-10-28 07:16:47 IP属地日本 |显示全部楼层
本帖最后由 z1326 于 2015-10-28 22:01 编辑

占楼备用。

Rank: 2Rank: 2

UID
3904258
帖子
188
PB币
2
贡献
0
技术
0
活跃
619
发表于 2015-10-28 09:30:32 IP属地北京 |显示全部楼层
感谢分享~~

Rank: 2Rank: 2

UID
2192855
帖子
204
PB币
147
贡献
0
技术
30
活跃
201
发表于 2015-10-28 09:34:16 IP属地海南 |显示全部楼层
赞一个,目前被安装盘各种重启困扰中,没法开始体验el capitan,回头上了完善的时候再拜读

Rank: 5Rank: 5Rank: 5

UID
4304901
帖子
449
PB币
72
贡献
0
技术
18
活跃
443
发表于 2015-10-28 09:36:29 IP属地浙江 |显示全部楼层
楼主大大,你提供的所有方法我都试过了,USB2.0还是没有驱动

Rank: 7Rank: 7Rank: 7

UID
4244413
帖子
1519
PB币
2120
贡献
0
技术
18
活跃
1839
发表于 2015-10-28 09:53:00 IP属地广东 |显示全部楼层
留名,技术贴支持,随时查看!

Rank: 5Rank: 5Rank: 5

UID
1336158
帖子
459
PB币
1014
贡献
0
技术
35
活跃
398
发表于 2015-10-28 09:55:04 IP属地日本 |显示全部楼层
yygutn 发表于 2015-10-28 09:36
楼主大大,你提供的所有方法我都试过了,USB2.0还是没有驱动

1 总线改名
2 查找并激活所有有效端口
3 修复可能出现的IRQ冲突
简单点说我就是提供了这些方法,你都搞了吗?你查查你的DSDT,看看里面是不是有UHC总线(机器比较老的话是有可能的,我的机器时ivybridge HM77,所以才只有两个EHC和一个XHC)

折腾无止境

Rank: 9

UID
4214129
帖子
4610
PB币
4849
贡献
0
技术
15
活跃
2927
发表于 2015-10-28 10:02:15 IP属地浙江 |显示全部楼层
yygutn 发表于 2015-10-28 09:36
楼主大大,你提供的所有方法我都试过了,USB2.0还是没有驱动

我与你相反,(笔记本)3.0无法驱动。

Rank: 5Rank: 5Rank: 5

UID
4304901
帖子
449
PB币
72
贡献
0
技术
18
活跃
443
发表于 2015-10-28 10:03:03 IP属地浙江 |显示全部楼层
HM87,改了总线,查了端口,IRQ修复。。。。

Rank: 5Rank: 5Rank: 5

UID
1336158
帖子
459
PB币
1014
贡献
0
技术
35
活跃
398
发表于 2015-10-28 10:08:56 IP属地日本 |显示全部楼层
本帖最后由 z1326 于 2015-10-28 10:12 编辑
yygutn 发表于 2015-10-28 10:03
HM87,改了总线,查了端口,IRQ修复。。。。

HM87还有usb2的接口?感觉8系列的移动版应该全是usb3的接口才对。

Rank: 5Rank: 5Rank: 5

UID
1336158
帖子
459
PB币
1014
贡献
0
技术
35
活跃
398
发表于 2015-10-28 10:12:11 IP属地日本 |显示全部楼层
傲骨虚怀 发表于 2015-10-28 10:02
我与你相反,(笔记本)3.0无法驱动。

如果你说的是你签名的笔记本,那不能驱动是正常的。sandybridge平台 HM65芯片组没有原生的USB3支持,想用USB3只能用第三方转接芯片,而文中的USB3驱动方法只适合intel原生USB3平台。

面目全非,胸有丘壑

Rank: 11Rank: 11Rank: 11

UID
4333710
帖子
4722
PB币
1426
贡献
0
技术
105
活跃
5356

十一周年 I'm Surface用户 十周年 Win10先驱者 我是大学生!

发表于 2015-10-28 10:14:31 IP属地重庆 |显示全部楼层
好贴啊,前排支持

Rank: 5Rank: 5Rank: 5

UID
4304901
帖子
449
PB币
72
贡献
0
技术
18
活跃
443
发表于 2015-10-28 10:16:38 IP属地浙江 |显示全部楼层
z1326 发表于 2015-10-28 10:08
HM87还有usb2的接口?感觉8系列的移动版应该全是usb3的接口才对。

有2个USB2.0总线

Rank: 5Rank: 5Rank: 5

UID
1336158
帖子
459
PB币
1014
贡献
0
技术
35
活跃
398
发表于 2015-10-28 10:19:49 IP属地日本 |显示全部楼层
yygutn 发表于 2015-10-28 10:16
有2个USB2.0总线

是有,但是你两个EHC总线上有设备吗?USB2的接口?摄像头?蓝牙?

Rank: 2Rank: 2

UID
106720
帖子
193
PB币
688
贡献
0
技术
0
活跃
2561
发表于 2015-10-28 10:23:31 IP属地广东 |显示全部楼层
不错我喜欢了

Rank: 5Rank: 5Rank: 5

UID
4304901
帖子
449
PB币
72
贡献
0
技术
18
活跃
443
发表于 2015-10-28 10:32:10 IP属地浙江 来自手机 |显示全部楼层
z1326 发表于 2015-10-28 10:19
是有,但是你两个EHC总线上有设备吗?USB2的接口?摄像头?蓝牙?

ehc1有port5摄像头,port6外置接口,
ehc2有pirt5蓝牙,port4……忘了,1外置接口

Rank: 5Rank: 5Rank: 5

UID
4304901
帖子
449
PB币
72
贡献
0
技术
18
活跃
443
发表于 2015-10-28 10:32:44 IP属地浙江 来自手机 |显示全部楼层
z1326 发表于 2015-10-28 10:19
是有,但是你两个EHC总线上有设备吗?USB2的接口?摄像头?蓝牙?

有的啊,蓝牙摄像头和两个外置的接口

点评

z1326  在“关于本机”-“系统概述”-“USB”一页中出现USB2总线的信息了吗?  发表于 2015-10-28 10:36 IP属地日本

Rank: 5Rank: 5Rank: 5

UID
1336158
帖子
459
PB币
1014
贡献
0
技术
35
活跃
398
发表于 2015-10-28 10:35:11 IP属地日本 |显示全部楼层
在“关于本机”-“系统概述”-“USB”一页中出现USB2总线的信息了吗?
关闭

站长推荐

关注论坛公众号发福利啦
关注论坛公众号即刻可以领取188pb,后续公众号将不定时分享会员优秀文章和作品,以及其他相关内容,并有勋章,威望,pb奖励等发放,快动动小手吧
回顶部
Copyright (C) 2005-2022 pcbeta.com, All rights reserved
Powered by Discuz!  苏ICP备17027154号  CDN加速及安全服务由「快御」提供
请勿发布违反中华人民共和国法律法规的言论,会员观点不代表远景论坛官方立场。
远景在线 | 远景论坛 | 苹果论坛 | Win11论坛 | Win10论坛 | Win8论坛 | Win7论坛 | WP论坛 | Office论坛