认识功能强大的Clover引导(3)–《手把手教你玩黑苹果》

认识功能强大的Clover引导(3)–《手把手教你玩黑苹果》

目录

Fixing DSDT

  • Technical background
  • DSDT mask
  • AddDTGP_0001 bit(0)
  • FixDarwin_0002 bit(1)
  • FixShutdown_0004 bit(2)
  • AddMCHC_0008 bit(3)
  • FixHPET_0010 bit(4)
  • FakeLPC_0020 bit(5)
  • FixIPIC_0040 bit(6)
  • FixSBUS_0080 bit(7)
  • FixDisplay_0100 bit(8)
  • FixIDE_0200 bit(9)
  • FixSATA_0400 bit(10)
  • FixFirewire_0800 bit(11)
  • FixUSB_1000 bit(12)
  • FixLAN_2000 bit(13)
  • FixAirport_4000 bit(14)
  • FixHDA_8000 bit(15)
  • Setting for NewWay patching
  • NewWay_80000000
  • FIX_RTC_20000
  • FIX_TMR_40000
  • AddIMEI_80000
  • FIX_INTELGFX_100000
  • FIX_WAK_200000
  • DeleteUnused_400000
  • FIX_ADP1_800000
  • AddPNLF_1000000
  • FIX_S3D_2000000
  • FIX_ACST_4000000
  • FixRegions_10000000
  • Choosing the right mask
技术背景

DSDT – 差分系统描述表 – 是最大和最复杂的ACPI表。最小长度为36字节,实际上大约为20kb甚至更多。该表描述了用于访问它们的设备和方法。这些方法可以包含算术和逻辑表达式,表示用C语言编程语言编写的程序。更正此表意味着您需要具备某种编程知识。Clover提供了自动应用更正的选项,但重要的是要了解尚未创建人工智能并且自动方法远未完成。最好手动进行修正。
为什么需要修复它?创建DSDT修补程序的目的是修复设备HPET – 高精度事件计时器。关键是OS X包含一个名为AppleIntelCPUPowerManagement的kext用于电源管理控制(SpeedStep),它无论如何都需要中断IRQ 08。否则会造成内核恐慌。此kext可以被删除或阻止,但您也可以更正DSDT以确保此kext的正常行为。

NR。1:这是必要的。Mac OS X真的需要HPET吗?不是真的,但BIOS供应商往往很慢,他们只是开始编写正确的参数。通常DSDT仍需要纠正。

NR。2:甲DSDT包含操作系统等上的某些依赖性Windows 98Windows 2001Windows 2006Linux。Mac OS X使用Darwin通常缺少的标识符。即使不是,它也是为FreeBSD创建的。Mac OS X充分利用了ACPI系统并最大限度地使用了DSDT,Windows 2001也是如此; 但不是Linux,Windows 98而不是Windows 2006.将系统屏蔽为Windows 2001始终是正确的。即使您在DSDT中找到Darwin,也将其屏蔽为Windows2001。
许多BIOS变体可以使用变量OSYS0x07D2,但不能0x07D60x07D9或者0x2410写入真正的Mac的DSDT。

NR。3:主板的供应商以及DSDT的创建者无法预测您将使用的设备(CPU,视频卡等)。但它们应写入DSDT!反之亦然,应排除内部扬声器,软盘驱动器或并行端口等设备。他们的司机不存在,甚至不需要。此外,通常需要向视频卡或SATA控制器等设备添加或删除帧缓冲器/端口。
DSDT被写入BIOS并由系统以AML二进制代码使用。它可以使用IASL进行解/编译,IASL将二进制代码转换为人类可读的DSL源代码。用户将使用此路径应用更正:AML> DSL>编辑> DSL> AML – 这是下一个要点。

NR。4:由于最初出现在OEM DSDT中的语法和逻辑错误,最后一部分变得不可能。你也需要纠正它们。此外,您还可以修复其他错误,以防止PC睡眠或唤醒,或添加新设备。(有点奇怪,编译/反编译不是严格可逆的操作,会改变表格甚至阻止进一步的编译操作。从我的观点来看,编译器没有错误。但是,不符合规范的,应该被视为警告,而不是错误)。

当您到达此步骤时,您可以指示Clover使用您修改的DSDT,方法是将其放入EFI / CLOVER / OEM / xxx / ACPI / patched目录或 – 当计算机名称尚未知道时 – 放入EFI / CLOVER / ACPI / patched 。或者,OS可以在系统分区的根目录中拥有自己的DSDT。
在哪里可以获得需要修补的初始DSDT?有不同的方式涉及Windows,Linux或OS X.如果您能够以某种方式启动Clover,您可以输入其GUI并按F4。如果Clover安装在FAT32分区上,那么它将能够保存所有ORM ACPI表,包括DSDT和FADT。此过程可能需要一段时间,尤其是在将许多表保存到USB闪存驱动器时。当您无法访问其他提取表集的方法(例如使用AIDA64)时,此功能尤其有用。您还可以保存修补的DSDT变体:在CloverGUI中输入选项,更改DSDT掩码,退出选项并按F5。将保存具有指定修补程序的DSDT,它们以文件名表示,例如:DSDT-F597.aml。您可以保存多个变体以进行比较。
现在你可以编辑DSDT,如果你不是很自在,Clover会提供一些自动补丁:

DSDT掩码

AddDTGP_0001位(0)

对于注入设备属性,除了DeviceProperties之外,您还可以使用包含方法_DSM(设备特定方法)的变量,该方法写入DSDT表。自OS X 10.5以来,_DSM被广泛使用。它包含设备的属性并使用该方法DTGP,该方法适用于所有设备。此修复程序只是添加DTGP方法以供以后与其他修复程序一起使用。它本身没有意义。

FixDarwin_0002位(1)

为DSDT提供一组更正,使您的系统“Darwin”被识别为“Windows 2001”,就像最ACPI系统一样。更多ACPI设备将在此模式下工作。旧方法此位还提供修复:FIX_WAK_200000,DeleteUnused_400000,FIX_ACST_4000000,FIX_S3D_2000000,AddPNLF_1000000,FIX_ADP1_800000

FixShutdown_0004位(2)

方法添加一个条件_PTS:如果参数是5(shutdown),则不执行其他操作。许多报告证实了这个选项可以解决华硕主板的关机问题,甚至可能与其他供应商合作。某些DSDT表已经包含这样的条件,建议在这种情况下关闭修复程序。

AddMCHC_0008 bit(3)

将设备MCHC添加到DSDT。对于我的老古董H61M,这是强制性的,否则KP。旧方法还包括AddIMEI_80000。

FixHPET_0010位(4)

将IRQ(0,8,11)添加到设备HPET。OSX的强制性<= 10.8。但是我看到小牛队可以在没有它的情况下工作。旧方式还包括FIX_RTC_20000,FIX_TMR_40000。

FakeLPC_0020位(5)

更改LPC控制器的DeviceID以允许加载kext AppleLPC。当OS X无法识别芯片组时,此修复是必要的。但是,支持的Intel和NForce芯片组列表非常大,很少需要修复。验证AppleLPC是否已加载并使用此修复程序(如果不是)。此外,即使支持芯片组,kext也可以自行卸载。

FixIPIC_0040位(6)

从设备IPIC中删除中断。有用的电源按钮将工作。

FixSBUS_0080位(7)

将SMBusController添加到设备树,该树修复了系统日志中缺少的警告。有助于睡眠/醒来。

FixDisplay_0100位(8)

如果仍然不存在,则创建设备GFX0。正确的电源管理需要它,但DSDT中通常不存在该设备,因为它不是主板的一部分。还添加了设备HDAU,即视频卡上的HDMI声音设备。如果我们在config.plist中设置FakeID,它将被插入此处。旧方式此补丁将影响所有显卡,包括嵌入式英特尔GFX。英特尔将以新方式单独修补。

FixIDE_0200位(9)

10.6.1引入了与AppleIntelPIIXATA相关的内核恐慌。有两种方法可以解决问题:使用修补的kext或修补DSDT。最近的系统可能不需要。

FixSATA_0400位(10)

通过将控制器屏蔽为ICH6,修复了几个SATA问题并删除了黄色硬盘驱动器图标。这种方法是有争议的,但它可以修复DVD驱动器,在这种情况下简单地更换硬盘驱动器图标是不够的。另一种方法是修补kext AppleAHCIPort.kext,参见KextsToPatch。

FixFirewire_0800位(11)

如果没有设备Firewire并且设备确实存在,则将其添加到DSDT中。将属性添加fwhub到设备。

FixUSB_1000位(12)

尝试修复USB USB1.0,USB2.0和USB3.0的无数USB问题。

FixLAN_2000位(13)

将属性注入built-in以太网卡,这是正确操作所必需的。另外注入卡的名称以获得更好看的System Profiler。还为一些已知的替换制作了FakeID。

FixAirport_4000位(14)

与上面的WiFi相同。此外,创建实际设备并将其写入DSDT。将自动为已知卡写入DeviceID以启用机场功能。

FixHDA_8000位(15)

更正声卡属性以启用本机AppleHDA驱动程序。名称从更改AZALHDEFlayout-id并被PinConfiguration注入。如果不存在则添加HMDI设备。

设置NewWay修补程序

NewWay_80000000

定义所有位将以新的方式工作。

FIX_RTC_20000

从RTC设备中排除IRQ(0)。

FIX_TMR_40000

从TMR设备中排除IRQ(8)。这是古老的DOS设备,在现代计算机中不需要。只是想知道它存在。

AddIMEI_80000

此设备用于IntelHDxxx图形。如果非常理想的操作添加它们。这个位也需要使用FakeID-> IMEI。对Core 2系统不做任何事情。

FIX_INTELGFX_100000

如果没有这个位,IntelGFX设备将无法修补。

FIX_WAK_200000

如果不存在,则将Return(Package(0))添加到方法_WAK中。此补丁用于消除警告。我不知道工作影响力。

DeleteUnused_400000

没有像软盘驱动器,LPT端口等其他设备可以从DSDT中删除。

FIX_ADP1_800000

将AC0设备重命名为ADP1设备。

AddPNLF_1000000

添加设备PNLF非常有用:只有它可以有亮度控制。此补丁也会影响系统的良好睡眠/唤醒。

FIX_S3D_2000000

还可以通过更正_S3D方法解决一些睡眠/唤醒问题。

FIX_ACST_4000000

名称ACST对Apple和ASUS有不同的用途。对于华硕来说,它是AC适配器状态。对于Apple来说,它是_CST,c-states表的替代品。为了不冲突,需要将这些名称重命名为其他名称。

FixRegions_10000000

DSDT中某些地区的地址取决于许多因素,可能会不时变化

OperationRegion (GNVS, SystemMemory, 0xDE6A4E18, 0x01CD)

浮动区域的存在使得不可能使用自定义DSDT,因为该区域可能被移位并且将不对应于当前状态。此修补程序旨在查找BIOS中的所有此类区域,并在自定义DSDT中进行更正。现在,您可以使用错误的区域生成自定义DSDT并设置此修补程序。

选择合适的掩码

你如何选择必要的补丁,你怎么知道哪些是无害的或危险的?计算机不会受到任何伤害。所有更改仅存储在内存中,重新启动后将被删除。
您可以尝试在CloverGUI中设置不同的组合,并通过按F5“ 选项”菜单进行保存。
要确保当前修补的DSDT没有产生冲突,可以在菜单中更改DSDT名称 – DSDT名称:NO.aml。将找不到此文件,Clover将从BIOS中提取原始OEM DSDT并应用DSDT掩码部分中设置的修订。如果操作系统未成功加载,将使用您之前设置的(工作)值。
0xFFFF启用所有修复程序,如果操作系统以这种方式成功加载,您将知道我们的努力并非一无所获。鉴于上面的描述,您已经意识到系统不需要一些修复(例如WiFi),它们甚至可以使事情变得更糟。
大多数系统既不旧也不太新,0xA7D7已经证明可以生成一个运行良好的操作系统。

使用完全掩码进行一次修补DSDT的新方法。然后手动更正修补的DSDT。然后使用此手动修补的DSDT.aml加载但设置FixRegions_10000000掩码将为0x90000000 = NewWay_80000000 + FixRegions_10000000

原生 speedstep

电源管理CPU频率控制或简单的EIST – 增强型英特尔SpeedStep技术更为正确。

本主题更多的是关于设置hackintosh而不是关于引导加载程序,但是当Clover执行几个步骤时,它们将单独描述。Clover没有完全自动化这个过程,你仍然需要手动调整一些事情。

为什么需要它呢?其目的是允许CPU在空转时(以减少功率和热量)以最低频率和电压工作,并再次增加负载。

可以使用以下几个选项激活EIST:使用CoolBookController或GenericCPUPM等特殊实用程序,或启用本机原生SpeedStep,需要执行以下步骤:

  1. HPET需要修复,可以使用掩码完成 0x0010
  2. ACPI(SSDT)中必须存在正确的CPU部分。请参见CPU部分。
  3. 需要选择正确的Mac模型。EIST不适用于所有型号。例如 – 它可以与MacBook5,1一起使用,不适用于MacBook1,1

或者,您可以保留任何模型,但更改平台配置文件以启用SpeedStep。每个模型都有自己的文件。看着:

/System/Library/Extensions/IOPlatformPluginFamily.kext/Contents/PlugIns/ACPI_SMC_PlatformPlugin.kext/Contents/Resources/

比较不同的型号并选择正确的值。

ConfigArray

<key>ConfigArray</key>
<array>
    <dict>
        <key>WWEN</key>
        <true/>
        <key>model</key>
        <string>MacBook4,1</string>
        <key>restart-action</key>
        <dict>
            <key>cpu-p-state</key>
            <integer>0</integer>
        </dict>
    </dict>
</array>

该密钥restart-action指定CPU的P-State值,该值将在重新启动时设置。添加此值后,睡眠和关机才开始工作!

CtrlLoopArray

<key>CtrlLoopArray</key>
<array>
    <dict>
        <key>Description</key>
        <string>SMC_CPU_Control_Loop</string>
        <key>PLimitDict</key>
        <dict>
            <key>MacBook4,1</key>
            <integer>0</integer>
        </dict>

密钥PLimitDict在GeneratePStates中提到。它代表最大频率的极限。如果丢失,CPU将停留在最低频率。

CStateDict

<key>CStateDict</key>
<dict>
    <key>MacBook4,1</key>
    <string>CSD3</string>
    <key>CSD3</key>
    <dict>
        <key>C6</key>
        <dict>
            <key>enable</key>
            <true/>

建议删除此部分以允许通过P状态而不是通过C状态进行功率控制。

睡眠问题

哪些睡眠问题?如果你按照这些说明操作,你的电脑会像一个孩子一样乖乖睡觉,当然也会像一个孩子一样乖乖醒来。为了解决问题,三叶草已经做了两个主要工作,纠正FADT和FACS。你只要修复DSDT,开启SpeedStep动态节能以及使用正确的驱动,所有问题就可以解决了。

哪个睡眠问题?如果您按照指示进行操作,您的电脑就会像婴儿一样睡觉并像婴儿一样醒来。主要部分已由Clover完成:纠正FADT和FACS。您只需要修复DSDT,启用SpeedStep并使用正确的kexts。然后每个人都会很开心。

机器睡眠可以被任何设备终止,特别是被一个可能未初始化的PCI设备终止,比如:AppleHDA.NullCPUPowerMagement.kext会彻底禁用的SpeedStep即使你不需要使用SpeedStep技术,你也应该做相应的修改以避免使用NullCPUPM 。

任何设备都可以中断良好的睡眠,尤其是未正确初始化的PCI设备。例如:AppleHDA。NullCPUPowerMagement.kext将完全禁用SpeedStep。即使您不需要SpeedStep,也应该进行相应的修改以避免使用NullCPUPM。

DSDT有一些_GPE方法来通知设备在睡眠后醒来。机器自己可以睡醒,但是有些设备,像显示设备,以太网设备,音频设备可能不会自己醒来。你需要研读DSDT的相关文档来修复它。

DSDT有一组_GPE方法,用于通知需要在睡眠后唤醒的设备。计算机本身会唤醒,但有些设备(如视频/以太网/音频或鼠标)可能无法唤醒。研究你的DSDT,阅读理论并尝试解决它。

最近另外一些睡眠问题在使用UEFI启动的10.8情况下出现。当使用CloverEFI时,10.7和10.8都可以正常睡眠.10.8和UEFI可以正常睡眠,但是不能正常醒来。已经有几个方案可以解决这个问题,比如移除CsmVideoDxe驱动。但是UEFI模式下10.7和10.8启动的区别还未搞清楚。这些问题还目前还没有解决(ASLR的问题吗?)。

最近出现了10.8和UEFI启动的另一个睡眠问题。当与CloverEFI一起使用时,10.7睡得好,10.8也能很好地工作。然而,10.8和UEFI睡得很好,但未能正常唤醒。存在几种解决此问题的解决方案,例如删除驱动程序CsmVideoDxe,但UEFI模式下启动10.7和10.8之间的区别仍然不明确(ASLR?)。这个问题还没有解决。

翻译者:NickDong
原文:http://clover-wiki.zetam.org/Sleep-problems

常见问题与解答

  • 常见问题与解答
  • 问:我想尝试使用Clover,但我应该从哪儿开始呢?
  • 问:这破玩意不工作了!
  • 问:我安装好了Clover但是引导的时候黑屏了。
  • 问:屏幕上出现错误boot0:error或者b1f:error
  • 问:我的屏幕上出现了7_,然后就没有然后了。。。
  • 问:出现了一个类似BIOS的界面。
  • 问:Clover已经安装,我从U盘里的Clover启动,但是没看到我的硬盘。
  • 问:我使用UEFI启动但是没有看到Mac分区。
  • 问:我使用UEFI启动但是Windows分区看起来是普通分区,EFI分区也是一样。
  • 问:启动操作系统时出现了以rEFIt开头的蓝色的字,然后就没有响应了。
  • 问:内核开始加载了但是在第十行之后出现了严重错误(panic)。
  • 问:系统卡在Error allocating…页面
  • 问:系统开始加载了,卡在Still waiting for root device.
  • 问:系统开始加载了,卡在Waiting for DSMOS.
  • 问: 系统开始加载了,卡在Waiting for DSMOS,但是我的硬盘还在工作。
  • 问:系统启动完成,但是关于本机里显示错误的信息。

问:我想尝试使用Clover,但我应该从哪儿开始呢?

答: 从阅读Wiki开始吧。

问:这破玩意不工作了!

答: 呵呵。

PS: 你还能说些什么呢!?

问:我安装好了Clover但是引导的时候黑屏了。

答: 操作系统的启动分为8步,可以看看 技术支持。尝试确定具体是哪一步出问题了,以及安装的时候你选择了哪些选项,这样然后我们才能交流。通常的错误有:

  • config.plist中的theme部分指定了主题文件夹为black-green,但是它并不存在。在这种情况下,会采用备用主题。
  • 一些BIOS不能和CsmVideoDxe配合工作,试试删除CsmVideoDxe。
  • 有时候 PatchVBios会导致黑屏,尝试把它关掉。

如果你想更好地分析出现了什么问题,开启GUI区域的DebugLog。像这样:

<key>DebugLog</key>
<true/>

加载Clover将会非常的慢,因为EFI/CLOVER/misc/debug.log在运行的每一步都要更新。在这之后你级就可以获得出现问题的信息,知道究竟发生了什么。

问:屏幕上出现错误boot0:error或者b1f:error

答: 一个可能的原因是错误的分区文件系统。PBR选区boot1f32需要FAT32而不是FAT16或ExFAT。如果你不确定,推荐你用命令重新格式化EFI分区(注:格式化EFI分区可能会导致引导丢失,请谨慎操作):

newfs_msdos -v EFI -F 32 /dev/rdisk0s1

问:我的屏幕上出现了7_,然后就没有然后了。。。

答: 最坏的情况是硬件不兼容,但是现在这种情况不会再出现了。只有开发者通过调试启动过程才能解决这个问题。普通的用户无能为力,只能尝试改变BIOS设置或者使用boot7代替boot

问:出现了一个类似BIOS的界面。

答: 这说明引导文件成功加载并工作了,但没有找到文件CloverX64.efi。要么是相应的分区没有找到,要么是整个设备都没有找到。查查安装Clover时候的选项,试着找出哪里有问题。

问:Clover已经安装,我从U盘里的Clover启动,但是没看到我的硬盘。

答: 由于使用的早期版本的Intel SATA驱动,硬盘需要连接到第一个SATA接口(SATA0)。而且,我们可以理解,如果你已经使用了一个正常工作的Chameleon,Chimera或者XPC,但是想试试Clover但不想删除原有的引导器。这种情况下,同时安装旧的引导器和Clover是没有问题的。如果你有一个不常见的SATA/SAS/RAID控制器,尝试boot7代替boot

问:我使用UEFI启动但是没有看到Mac分区。

答: 那是因为你没有安装HFS+驱动HFSPlus.efi或者它的替代品VBoxHFS.efi

问:我使用UEFI启动但是Windows分区看起来是普通分区,EFI分区也是一样。

答: 和上一个问题原因差不多。你缺少NTFS.efi

PS: 由于软件许可的原因,这两个驱动在Clover的repository里找不到。如果你不使用Clover的安装器,以上问题可能就会出现。

问:启动操作系统时出现了以rEFIt开头的蓝色的字,然后就没有响应了。

答: 这个时候你应当使用了Clover给DSDT打补丁的功能。理想的情况下它不应该卡在这里。问题在于电脑生产商没有遵循设计规范,DSDT编写得不正确,或者不满足OS X的要求。可以通过一个简单方法验证:反编译后再编译DSDT。如果你不能完成这一过程,那就是DSDT的问题了。Clover在修正错误的过程中,但是由于错误太多,并不是所有的错误都能被发现和修复。你需要设置一个DSDT掩码来加载系统,之后再设置一个不使系统崩溃的掩码,最后再设置一个使系统正常工作的掩码。或者设置DSDT掩码为0x0000禁用自动打补丁,然后自行修改DSDT。(注:这种情况感觉还是自己修改比较靠谱了)

问:内核开始加载了但是在第十行之后出现了严重错误(panic)。

答: 这可能是缺失DSDT或者不正确的DSDT。如果Clover自动打补丁失败,就加入你自己修改的DSDT。

问:系统卡在Error allocating…页面

答: 你的UEFI不能直接和Clover配合工作。使用一个驱动来修复EFI内存映射。

问:系统开始加载了,卡在Still waiting for root device.

答: 在BIOS里开启AHCI模式,如果无法开启,寻找一个适合你的IDE控制器的驱动。或者你可以试试以NoCaches的方式启动,这样的话加载就会慢一些,因为控制器需要更多的时间初始化。这种情况只有当Clover和操作系统处于不同的设备上才会出现。

问:系统开始加载了,卡在Waiting for DSMOS.

答: 缺少FakeSMC。如果你用Chameleon(变色龙),FakeSMC应该放在Extra文件夹里。但Clover不知道这个文件夹。你应该把FakeSMC放在EFI/Clover/kexts/10.x.

问: 系统开始加载了,卡在Waiting for DSMOS,但是我的硬盘还在工作。

答: 这是显卡没有初始化的典型情况。试着打开或关闭config.plist中Graphics部分的Inject

Inject被禁用,AMD Radeon显卡可以原生被初始化,但这样会让系统中出现一些限制,比如DVD播放器不工作。为了完全驱动显卡,你需要修改你的AMD Radeon显卡的帧缓冲(FrameBuffer)。

另外你可以尝试用安全模式启动来使用VESA模式。

问:系统启动完成,但是关于本机里显示错误的信息。

答: 关于本机里的信息只是用来展示的,并不影响功能。

  • PCI设备:如果你想要你的设备列在这里,修改DSDT并添加 Name (_SUN, 0x2A)SUNSlot User Number,可以任意选择。使用0x2A 就可以让其显示在关于本机里。
  • 内存频率:如果存在两种频率,显示的频率和实际的频率,往往不一样。但哪一个应该显示出来呢?前者会让人抱怨它是错误的,后者又会让其他的人抱怨。所以随它去吧。最近Clover开发者团队的一员apianti已经对算法进行了许多改进,我也不知道到底显示的是哪个值。简而言之,显示的是“更加正确”的值。

## 
翻译者:JogleLew原文:http://clover-wiki.zetam.org/FAQ

结束语

不积跬步无以至千里,不积小流无以成江海。当然,Clover尚不完美,它仍旧需要我们修复错误,增添新的功能。但我仿佛看到,在土壤肥沃的草地上,一颗四叶草正向着阳光茁壮成长,绽放着耀眼的光芒。

翻译者:JogleLew
原文:http://clover-wiki.zetam.org/Conclusion

Written by

Mison

发表评论

电子邮件地址不会被公开。 必填项已用*标注