DSDT疑难杂症解决,包括台式机出现电池选项,不能重启,定制USB,屏蔽串口设备等
好多黑苹果出现某名奇妙的问题,是因为机器的ACPI表不规范或者符合macos的标准,只要将ACPI表定制完美即可解决很多问题,建议每个搞黑苹果的网友手头留一套白果的ioreg和dsdt文件作为参考,下面不多说,都是干货,每层楼解决一个黑果问题 本帖最后由 wangdongfreesky 于 2023-2-15 16:18 编辑问题一、明明是台式机,机型设置的smbios为macmini,imac,macpro,可是在系统中却出现了电池选项
这个问题在于acpi表中的facp表
请看facp表
FACS Address : EC919000
DSDT Address : EC792000
Model : 00
PM Profile : 01
SCI Interrupt : 0009
SMI Command Port : 000000B2
ACPI Enable Value : A0
ACPI Disable Value : A1
这里的PM Profile后面的代码01代表台式机没有电池选项,而有些主板的这里定义的是02代表笔记本,尤其是一些小主机,使用的是笔记本的主板,而厂家没有对该表做修改
修正方法如下:
occ或OCAT在acpi选项中添加补丁
查找:00020900 B2000000 A0A1
替换为:00010900 B2000000 A0A1
acpi表签名:FACP
ocat,TableSignature:46414350 注:46414350就是FACP的十六进
期待中,学习一下,加油 问题二、重启不能,或者重启为软重启,设备没有完全初始化问题同样出在FACP表中
请看facp表
Reset Register :
Space ID : 01
Bit Width : 08
Bit Offset : 00
Encoded Access Width : 00
Address : 00000000000000B2
Value to cause reset : BE
ARM Flags (decoded below) : 0000
PSCI Compliant : 0
Must use HVC for PSCI : 0
注意:Value to cause reset后面的参数即为重启代码:06为重启,0E为硬重启,设备会重新初始化,我的这个机器是AMD的小主机没有出现问题,但是我的另一台7080mff出现问题,问题表现为重启后直接跳过usb的UEFI引导,说明usb设备在弹出后并没有重新初始化
解决办法:
用occ或ocat打开配置文件在acpi设置里添加补丁:
查找:01080001 B2000000 00000000 73 (这是针对7080mff的,如果是上面的facp表应该为01080000 B2000000 00000000 BE)参照自己的facp表来查找,是有规律的,很简单的,注意地址要反过来写
替换为:01080001 F90C0000 00000000 0E (硬重启或叫full reset)或 01080001 F90C0000 00000000 06(软重启)
occ表签名:FACP
OCAT:46414350
原理:告诉操作系统,向0xCF9的IO口,写入6或0E
都是干货,每层楼解决一个黑果问题 问题三、定制USB,一般的USB定制我们可以使用hackintool或者usbmap,但是有些usb端口就是不显示,即使在Windows下定制了,在hackintool下也看不到该端口,请看下面问题代码
Device (PRT4)
{
Name (_ADR, 0x04)// _ADR: Address
Name (UPC1, Package (0x04) //
{
Zero,//
0xFF,
Zero,
Zero
})
Method (_UPC, 0, Serialized)
{
Return (UPC1) /* \_SB_.PCI0.GP17.XHC_.RHUB.PRT4.UPC1 */
}
Name (PLD1, Package (0x01)
{
Buffer (0x14)
{
/* 0000 */0x82, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,// ........
/* 0008 */0x91, 0x1D, 0x00, 0x02, 0x01, 0x00, 0x00, 0x00,// ........
/* 0010 */0xFF, 0xFF, 0xFF, 0xFF // ....
}
})
Method (_PLD, 0, Serialized)// _PLD: Physical Location of Device
{
Return (PLD1) /* \_SB_.PCI0.GP17.XHC_.RHUB.PRT4.PLD1 */
}
原有的acpi XHC设备下的端口4是不显示不启用的,我的这台主机该端口实际上连接了usbaudio,导致没有声音
我详细的说明一下,每个USB端口都有一个_UPC函数,该函数传递了一个参数,该参数对USB的类型做了相关说明
Name (UPC1, Package (0x04) //
{
Zero,//Zero为不启用,0x FF为启用
0xFF, //USB类型:Zero为USB2,0x03为USB3,0x FF为内建,0x09为type-c自动切换正反,0x0A为type- C区分正反
Zero,
Zero
})
这里说明一下typec接口,typec接口分两种,一种自动切换正反,也就是你吧typec接口的u盘正反插都是这个端口,而区分正反的是当你u盘反过来插后会出现在另一个端口上
有了以上的基础,我是这样用DSDT来定制USB端口的,可以解决不识别,免Kext,改机型不需重新定制usb,最大程度接近百果本身的USB定制效果
第一步、屏蔽原有的_UPC函数,利用occ打补丁重命名的办法
occ或ocat打开配置文件在acpi设置里添加补丁
查找:5F555043
替换为:5A555043
表名:DSDT或SSDT (这里强调一下,有些机器的USB端口的UPC函数在DSDT中定义,有些机器的USB端口的UPC函数在SSDT表中,如果在DSDT中,该补丁的表名就为DSDT,如果在SSDT中,该补丁的表名就为SSDT)
这样原有的UPC就通过改名为ZUPC而失效了,下面我们要重写UPC函数
重写完的DSDT我们命名为SSDT-FixUSB.aml大概是如下形式(不同设备的usb端口命名和路径不同参照修改和编写):
DefinitionBlock ("", "SSDT", 2, "hack", "FixUSB", 0x00000000)
{
External (_SB_.PCI0.XHC_.RHUB.HS01, DeviceObj)
一、开头包含你的需要使用的usb端口的路径,把你使用的端口路径写上,不使用的usb端口不添加即可实现了屏蔽,注意数量不能超过15个,要符合macos的规范数量。
二、定义端口类型的参数
Name (UPC3, Package (0x04)。//USB3
{
0xFF,
0x03,
Zero,
Zero
})
Name (UPSW, Package (0x04) //typc自动切换正反
{
0xFF,
0x09,
Zero,
Zero
})
Name (UPCC, Package (0x04) //typec不切换正反
{
0xFF,
0x0A,
Zero,
Zero
})
Name (UPCF, Package (0x04) //内建端口给USBaudio和蓝牙
{
0xFF,
0xFF,
Zero,
Zero
})
注意:XHC下没有USB2,EHCI下才有,即使是XHC下的usb2端口也要定义为USB3而不是USB2,好多教程都是错的,用usb2设备和usb3设备分别插各个端口,usb2设备出现的端口就定义为usb2,这是错的!!XHC的usb3.1控制器下都是USB3!!
三、为不同的端口的UPC函数返回不同类型的参数即可
Scope (\_SB.PCI0.XHC.RHUB.HS01)
{
Method (_UPC, 0, Serialized)// _UPC: USB Port Capabilities
{
Return (UPC3) /* \UPC3 */
}
}
Scope (\_SB.PCI0.XHC.RHUB.HS02)
{
Method (_UPC, 0, Serialized)// _UPC: USB Port Capabilities
{
Return (UPCC) /* \UPCC */
}
}
然后将编译好的SSDT-FixUSB.aml放入EFI中的ACPI目录,OC配置文件加载SSDT-FixUSB.aml文件,注意:之前upc改名的补丁也要勾选加载!
问题四:系统偏好设置里-网络设置中出现了一个电话图标,网络中添加服务中除了以太网和WI-FI还多了一个串口设备解决方法:该设备通过hackintool的pcie设备列表中没有发现,通过ioreg查找发现ACPI下有一个U AR3设备,屏蔽该设备即可
打开dsdt搜索该设备,代码如下:
Device (UAR3)
{
Name (_HID, EisaId ("PNP0501") /* 16550A-compatible COM Serial Port */)// _HID: Hardware ID
Name (_UID, 0x02)// _UID: Unique ID
Name (LDN, 0x0B)
Method (_STA, 0, NotSerialized)// _STA: Status
{
If ((SSPD == Zero))
{
Return (Zero)//注意这两行,将SSPD参数设置为Zero,即可屏蔽该设备
}
Else
{
Return (^^SIO1.ESTA (0x11))
}
}
制作SSDT-DisUAR3.aml
代码如下:
DefinitionBlock ("", "SSDT", 2, "OCLT", "DisUAR3", 0x00000000)
{
External (SSPD, IntObj)
Scope (_SB)
{
If (_OSI ("Darwin"))
{
SSPD = Zero
}
}
}
注意:如果你已经安装了系统,那么要在系统偏好设置里删除该服务,否则你正确加载了该ssdt后由于系统没有这个设备,反而删除不掉了,如果删不了,你就把这个ssdt先禁用一下,删完再启用。如果是新装系统,那么没有问题
加精预备!!! 干货!迫切等待精彩继续。 码字辛苦了,楼主 谢谢分享 这个干货的确不错的哟,谢谢楼主了。 问题五:不实用DSDT,屏蔽不能驱动的核显或独显,对于不能驱动的AMD核显APU或着不能驱动的Nvida独显,可以快捷的用OC属性来屏蔽,方法如下
用OCC打开配置文件,在设备属性一览中的PCI设备列表中选择要屏蔽的设备,在属性中只需添加两行代码
class-code类型DATAFFFFFFFF
name 类型DATA0000000A
问题六:HDMI或DP无音频
解决方法:给appleALC打补丁
用OCC打开配置文件转到内核设置,添加一个补丁,内容如下:
标识符:as.vit9696.AppleALC
查找:0E0000B8 709D0000 EB0690
替换:0E0000B8 48A30000 EB0690
解决hackintool中hdmi音频设备不显示,系统音频设置中无HDMI输出的问题 这个帖子牛逼了,技术大佬呀,顶起来 问题七:没有节能五项,加载PMCR和PPMC两个SSDT,这个大家基本都懂,就是有一项需要插U盘才显示,特此说明,另外好多新装机器,在安装好系统后不显示音频设备,请使用SSDTTime工具为acpi打上IRQ和HPET补丁,该补丁会生成一个配置文件,在该配置文件的acpi选项的补丁一栏中将补丁粘贴过来,如果生成了SSDT文件也要复制到你的efi中并加载 使用DSDT或SSDT定制USB端口不需要U盘插拔? 麻烦问下! OSX 下关闭电脑 无法通过开机键开机!拔掉电源插头,再次插上才能正常开机!这个是什么问题! WIN下就不会有这个问题! 感谢分享,学到真东西 本拉登他爹 发表于 2023-2-15 18:32 https://bbs.pcbeta.com/static/image/common/back.gif
使用DSDT或SSDT定制USB端口不需要U盘插拔?
需要,实际上是正常USB定制后,知道了各个端口的类型后,改为dsdt