sblook 发表于 2016-5-11 16:47

解决usb3.0的另外一个方法,适合usb端口少的情况,顺带合并usb的ssdt

我的主板h170tn,简约风,仅用到了主板后面的4个usb3.0。我来说下我用纯dsdt方式驱动usb的过程:
1. 获取usb端口信息
准备usb2.0和usb3.0 u盘各一个,因为一个usb接口是对应2.0端口和3.0端口各一个的。在windows下一个一个端口都插一遍,先用usb2.0的盘插,再用usb3.0的盘插。
上一张截图


可以看到端口3,4,11都插着我的东西,端口11是我的BCM94352,此卡的蓝牙是需要占用一个内置的usb2.0端口的。

按照我上面说的 方法,依次插一遍,得到自己主板的端口对应方式:



顺利得到我自己主板的usb端口及对应方式:4个usb插口(暂且定义为:左上,左下,右上,右下)
左上USB对应的2.0端口号是4,3.0端口号是20
左下USB对应的2.0端口号是3,3.0端口号是19
右上USB对应的2.0端口号是2,3.0端口号是18
右下USB对应的2.0端口号是1,3.0端口号是17

2. 观察dsdt
先看下我的dsdt对于usb的定义部分


HS是指的usb2.0端口,SS指的是usb3.0端口,加起来一共是24个端口,正好和我第一张图在windows下显示的端口数量一致。
那么24个端口只有几个有用的,也就是1,2,3,4,11,17,18,19,20这么几个端口。因为我的机箱即便插满usb,用到的端口也就这么9个,甚至都达不到苹果的15个端口限制,所以根本不用去什么解破限制之类的工作,只需要保留有用的端口(共9个),剩下的留空即可,不留空也行,我反正没留空。

3 动手编辑
上面提到有用的端口一共有9个,我保留了10个端口。见图


这里需要注意的是:现在的HS01-05,SS01-05,并不是开始未编辑的端口了,因为端口号没改,但是端口地址或许会发生变化。
举例说,我的usb2.0端口是1-4, 所以HS01-HS04的端口号不用修改,但是我的蓝牙用的是端口11,那么需要把端口11的地址拷贝粘贴到HS05的地址上去,希望下面图片可以帮助你理解。

修改完成后,重启,再拿usb2.0和usb3.0插一遍,总之我的是正常工作了。

上一张usb3.0的拷贝图,速度应该是3.0的速度。




补充一下:这里捎带把ssdt的usb定义部分也合并到了dsdt下。
提取原始的dsdt下,对于端口的定义如下:
Device (HS11)
            {
                Name (_ADR, 0x0B)// _ADR: Address
            }
也就是说仅定义了地址

翻一翻同时提取到的ssdt文件,发现我的ssdt5.aml是对于usb的定义,于是捎带把ssdt合并到dsdt下:
1. 把External放在dsdt的External声明部分
2. 把涉及的方法按照scope的声明范围,对应放到dsdt下面
3. 把对于devide(设备)的定义,拷贝到dsdt对于此device(设备)的定义下,如:
在ssdt下对HS01这个端口有如下定义:
Scope (\_SB.PCI0.XHC.RHUB.HS01)
    {
      Method (_UPC, 0, NotSerialized)// _UPC: USB Port Capabilities
      {
            Return (GUPC (One))
      }

      Method (_PLD, 0, NotSerialized)// _PLD: Physical Location of Device
      {
            Return (GPLD (One, One))
      }
    }
在dsdt下我的 HS01端口是这样定义的:
Device (HS11)
            {
                Name (_ADR, 0x0B)// _ADR: Address
            }那么合并到一起就变成了这样子:
Device (HS01)
                {
      Name (_ADR, One)// _ADR: Address
      Method (_UPC, 0, NotSerialized)// _UPC: USB Port Capabilities
      {
            Return (GUPC (One))
      }

      Method (_PLD, 0, NotSerialized)// _PLD: Physical Location of Device
      {
            Return (GPLD (One, One))
       }
                }


jelly0925 发表于 2016-5-11 17:32

太好了,回家试试。

a48014266 发表于 2016-5-11 18:23

https://bbs.pcbeta.com/viewthread-1690071-1-1.html 大神帮我看看好吗

641302649 发表于 2016-5-11 19:45

641302649 发表于 2016-5-11 20:04

ydyanglq 发表于 2016-5-12 00:22

收藏参考一下,谢谢分享.

xiaoxiatwo 发表于 2016-5-12 01:17

https://bbs.pcbeta.com/viewthread-1690124-1-1.html
楼主帮忙看看{:9_353:}
usb真的好折磨人

sblook 发表于 2016-5-12 10:00

xiaoxiatwo 发表于 2016-5-12 01:17 https://www.pcbeta.com/static/image/common/back.gif
https://bbs.pcbeta.com/viewthread-1690124-1-1.html
楼主帮忙看看
usb真的好折磨人

你的主板应该usb口很多,不推荐我的方式,用个injectall的那个usb驱动也行,放在clover驱动下

loveqp 发表于 2016-5-12 11:25

这个方法好呢

xuhupeng 发表于 2016-5-12 13:06

pci0 rhub下面的h11-ss10直接删除么

xuhupeng 发表于 2016-5-12 13:21

本帖最后由 xuhupeng 于 2016-5-12 13:24 编辑

usb 3.0 对应的port 19 port20,这个怎么对应dsdt哪个ss,按照usb遮盖的做法是19就是13000000 20就是 14000000,但是dsdt里面的ss最多就是0x09

sblook 发表于 2016-5-12 13:31

xuhupeng 发表于 2016-5-12 13:21 https://www.pcbeta.com/static/image/common/back.gif
usb 3.0 对应的port 19 port20,这个怎么对应dsdt哪个ss,按照usb遮盖的做法是19就是13000000 20就是 14000 ...

在机型(你选的smbios)限制范围内,HS和SS的名称不重要,里面的address以及相关内容才重要,比如:
原来usb3的HS10(端口20,地址111111)HS05(端口15,地址222222),因为HS05其实是空的,没用的,所以可以拿来给HS10用

变化后叫HS05(地址111111),也就是拿HS10的地址给HS05用

xuhupeng 发表于 2016-5-12 13:55

本帖最后由 xuhupeng 于 2016-5-12 13:58 编辑

sblook 发表于 2016-5-12 13:31 https://www.pcbeta.com/static/image/common/back.gif
在机型(你选的smbios)限制范围内,HS和SS的名称不重要,里面的address以及相关内容才重要,比如:
原来 ...
我现在知道usb3.0是port17 19 20 但是AID64里没看到这三个端口的地址哎,不知道对应dsdt哪个SS的address地址

xuhupeng 发表于 2016-5-12 15:02

本帖最后由 xuhupeng 于 2016-5-12 15:11 编辑

sblook 发表于 2016-5-12 13:31 https://www.pcbeta.com/static/image/common/back.gif
在机型(你选的smbios)限制范围内,HS和SS的名称不重要,里面的address以及相关内容才重要,比如:
原来 ...
..换种说法吧。。就是不知道HS10的地址111111 为啥对应的是端口20,看不见port20的地址。。。如果是硬件ID的话 那个id三个port都是一样的

梦水乡 发表于 2016-5-12 15:17

本帖最后由 梦水乡 于 2016-5-12 15:20 编辑

楼主你CPU用的哪款?显示器用的什么接口?核显如何驱动的?

sblook 发表于 2016-5-12 15:39

梦水乡 发表于 2016-5-12 15:17 https://www.pcbeta.com/static/image/common/back.gif
楼主你CPU用的哪款?显示器用的什么接口?核显如何驱动的?

67ooT, DP和HDMI都可以,10.11.4已经很好驱动了,bios把什么显存调到64M,直接就可以驱动了

sblook 发表于 2016-5-12 16:01

xuhupeng 发表于 2016-5-12 13:55 https://www.pcbeta.com/static/image/common/back.gif
我现在知道usb3.0是port17 19 20 但是AID64里没看到这三个端口的地址哎,不知道对应dsdt哪个SS的address地 ...

先usb2再usb3依次排列

sblook 发表于 2016-5-12 16:03

xuhupeng 发表于 2016-5-12 15:02 https://www.pcbeta.com/static/image/common/back.gif
..换种说法吧。。就是不知道HS10的地址111111 为啥对应的是端口20,看不见port20的地址。。。如果是硬件I ...

按照我回复图,把HS,SS和端口对应起来,再到dsdt去找,devide (HS0X){}这个大括号里面肯定有address的

@jl 发表于 2016-5-12 16:05

小白在此学习   感谢楼主这贴

xuhupeng 发表于 2016-5-12 16:15

sblook 发表于 2016-5-12 16:01 https://www.pcbeta.com/static/image/common/back.gif
先usb2再usb3依次排列

多谢指教,我不懂的就是这个图,我不明白port19对应的是哪个地址,看了你这图就明白了,谢谢
页: [1] 2 3
查看完整版本: 解决usb3.0的另外一个方法,适合usb端口少的情况,顺带合并usb的ssdt