DSDT定制修正USB端口,使用UPC函数法
本帖最后由 wangdongfreesky 于 2023-3-12 19:52 编辑请看说明:
首先进入到windows或者PE系统,打开AiDA64,或 其他可查看USB端口的工具
用USB2.0设备 、USB3.0设备,如果有typec接口,请购买一个Typec的转接头支持USB3.0的
然后分别插入USB接口,并按如下格式记下位置:
前面板上:USB2.0 所在端口在3.1控制器下 编号 Pot1 有的机器是HS01 HS02
前面板下:USB2.0 所在端口在3.1控制器下 编号 Pot2
前面板左:USB2.0 所在端口在3.1控制器下 编号 Pot3
前面板右:USB2.0 所在端口在3.1控制器下 编号 Pot4
后面板上:USB3.0 所在端口 3.0控制器 编号Pot1 有的机器是SS01 及SS02等
后面板下:USB3.0 所在端口 3.0控制器 编号Pot5
后面板左:USB3.0 所在端口 3.0控制器 编号Pot9
后面板右:USB3.0 所在端口 3.0控制器 编号Po10
后面板上:typeCSW所在端口 3.0控制器 编号Po10
后面板下:TypeCC所在端口 3.1控制器 编号Po11
蓝牙内建端口:所在端口在3.1控制器下 编号Pot8
以上是例子,你需要按上面的格式记下你自己实际的
注:TypeCSW和TypeCC的区别,如果你的TypeC端口反向插的时候不会出现在另一个端口那么就是TypeCSW,否则就是TypeCC
记下端口号后,数一下数量是否超过15个,如果超过15个,那么你就要有所取舍,把常用的保留,把不常用的抛弃
还要注意,要保留你蓝牙所在的USB,这个千万别忘了,否则蓝牙就没了
———————————————分割线——————————————
然后打开模版
这个模板分为三部分
第一部分是引用
External (_SB_.PCI0.GP17.XHC_.RHUB.PO10, DeviceObj)这里的路径要改成你电脑中的路径GP17可能是RP01等,XHC可能是XHCI,PCI0可能是PC00等,PO10也可能是HS01或SS01
第二部分是类型定义
Name (UPC3, Package (0x04)
{
0xFF, 0xff 表示开启,有的主板之所以有的usb端口不显示就是因为这个参数为Zero,表示没有启用
0x03, 0x03 表示类型为USB3,0x09 和 0x0A分别表示typec的两种类型,Zero表示系统默认的usb2
Zero,
Zero
})
如果你没有typec接口那么可以删掉UPCW和UPCC
第三个部分是指定类型
Scope (\_SB.PCI0.GP17.XHC.RHUB.POT1)
{
Method (_UPC, 0, Serialized)// _UPC: USB Port Capabilities
{
Return (UPC3) /* \UPC3 */
}
}
接下来通过你之前的测试,首先删掉你不用的第一部分引用,和第二部分类型,以及第三部分指定
然后是修正指定的端口类型,
如果是USB2或USB3,那么Return(UPC3),
如果是蓝牙,那么Return (UPCF)
如果是TypeCC,那么Return (UPCC)
如果是TypeCW,那么Return(UPSW)
——————分割线————————
最后一步,将编辑好的SSDT-FixUSB放入到OC的ACPI目录,修改OC配置文件加载SSDT-FixUSB,同时将补丁添加进ACPI补丁中勾选并生效
使用UPC函数法定制USB的好处:
1.修改机型不必重新定制USB
2.可以解决系统不识别USB个别端口的问题
3.适用性广兼容性好AMD平台和Intel平台通用,可在PE下或其他系统下制作,只需用usb端口查看软件如Aida64 RW HE等。端口可以不是HSXX SSXX
4.个别USB控制器仅需多加一个XHCI-unsupported.kext来识别即可 好教程谢谢分享 高级教程啊 多谢分享啊辛苦了~~ 写得不错,感谢楼主分享 收藏备用。 感谢分享教程
收藏备用。 感谢分享,空了好好研究研究,现在用kext方式定制,USB3.1和TypeC不能正常工作, 不错 挺好的教程 感谢分享,收藏备用 红字部分都记下了 感谢分享 External (_SB_.PCI0.GP17.XHC_.RHUB.PO10, DeviceObj)
这个路径要怎么找出来,提取的dsdt里面是这样的
External (_SB_.PC00.XHCI.RHUB.INIR, MethodObj) // 0 Arguments
External (_SB_.PC00.XHCI.RHUB.PS0X, MethodObj) // 0 Arguments
External (_SB_.PC00.XHCI.RHUB.PS2X, MethodObj) // 0 Arguments
External (_SB_.PC00.XHCI.RHUB.PS3X, MethodObj) // 0 Arguments 这个路径怎么找出来啊External (_SB_.PCI0.GP17.XHC_.RHUB.PO10, DeviceObj)
我的dsdt和你这差的有点大,只找到
External (_SB_.PC00.XHCI.RHUB.INIR, MethodObj) // 0 Arguments
External (_SB_.PC00.XHCI.RHUB.PS0X, MethodObj) // 0 Arguments
External (_SB_.PC00.XHCI.RHUB.PS2X, MethodObj) // 0 Arguments
External (_SB_.PC00.XHCI.RHUB.PS3X, MethodObj) // 0 Arguments
红字部分都记下了 感谢分享 谢谢楼主 收藏了 本帖最后由 Dynamix 于 2023-3-13 12:07 编辑
给AMD的用还行 Intel的 路径不一样 Intel的看看这方法 兼容性更强 改动更少如果AMD的OEM表也有GUPC那就同理了, 我用的也这方法 https://github.com/daliansky/OC-little/issues/18 Dynamix 发表于 2023-3-13 11:48 https://bbs.pcbeta.com/static/image/common/back.gif
给AMD的用还行 Intel的 路径不一样 Intel的看看这方法 兼容性更强 改动更少如果AMD的OEM表也有GUPC那就同理 ...
路径不同,端口不同,该改名的改名啊,谁叫你拿来就用啊!拿来就用还叫定制吗? zyangc 发表于 2023-3-13 09:44 https://bbs.pcbeta.com/static/image/common/back.gif
External (_SB_.PCI0.GP17.XHC_.RHUB.PO10, DeviceObj)
这个路径要怎么找出来,提取的dsdt里面是这样的 ...
机器不一样,路径和端口名都不一样的
Dynamix 发表于 2023-3-13 11:48 https://bbs.pcbeta.com/static/image/common/back.gif
给AMD的用还行 Intel的 路径不一样 Intel的看看这方法 兼容性更强 改动更少如果AMD的OEM表也有GUPC那就同理 ...
改动少,看不懂有啥用?最起码我这种好理解吧?其实就是重写UPC函数,让它返回你要告诉系统这个端口的类型