2020年12月20日
修改OpenCore,在引导windows时不修改ACPI
OpenCore
不需要在引导除macos以外的操作系统会按 config.plist
中的配置修改ACPI、nvram。黑苹果的BIOS本来就是适配windows、linux的,按macos的标准改了以后反而适得其反,出现各种问题。如oc会修改 system-id
,会导致windows的license失效。或者windows启动在不停转圈、蓝屏。
在 OpenCore 0.2
的版本是有一个 Quirk
,在引导windows时不修改ACPI的,但是后续的版本取消了这个Quirk。只能通过修改源代码来解决了。
代码基于 OpenCore 0.6.5
版本,主要是在引导其他操作系统时,不修改ACPI,具体如下:
$git diff 5c8f diff --git a/Include/Acidanthera/Library/OcConfigurationLib.h b/Include/Acidanthera/Library/OcConfigurationLib.h index f2a71123..91385265 100644 --- a/Include/Acidanthera/Library/OcConfigurationLib.h +++ b/Include/Acidanthera/Library/OcConfigurationLib.h @@ -80,6 +80,7 @@ #define OC_ACPI_QUIRKS_FIELDS(_, __) \ _(BOOLEAN , FadtEnableReset , , FALSE , ()) \ _(BOOLEAN , NormalizeHeaders , , FALSE , ()) \ + _(BOOLEAN , OnlyForMacOS , , FALSE , ()) \ _(BOOLEAN , RebaseRegions , , FALSE , ()) \ _(BOOLEAN , ResetHwSig , , FALSE , ()) \ _(BOOLEAN , ResetLogoStatus , , FALSE , ()) diff --git a/Library/OcConfigurationLib/OcConfigurationLib.c b/Library/OcConfigurationLib/OcConfigurationLib.c index 001197d7..99fcb16c 100644 --- a/Library/OcConfigurationLib/OcConfigurationLib.c +++ b/Library/OcConfigurationLib/OcConfigurationLib.c @@ -141,6 +141,7 @@ OC_SCHEMA mAcpiQuirksSchema[] = { OC_SCHEMA_BOOLEAN_IN ("FadtEnableReset", OC_GLOBAL_CONFIG, Acpi.Quirks.FadtEnableReset), OC_SCHEMA_BOOLEAN_IN ("NormalizeHeaders", OC_GLOBAL_CONFIG, Acpi.Quirks.NormalizeHeaders), + OC_SCHEMA_BOOLEAN_IN ("OnlyForMacOS", OC_GLOBAL_CONFIG, Acpi.Quirks.OnlyForMacOS), OC_SCHEMA_BOOLEAN_IN ("RebaseRegions", OC_GLOBAL_CONFIG, Acpi.Quirks.RebaseRegions), OC_SCHEMA_BOOLEAN_IN ("ResetHwSig", OC_GLOBAL_CONFIG, Acpi.Quirks.ResetHwSig), OC_SCHEMA_BOOLEAN_IN ("ResetLogoStatus", OC_GLOBAL_CONFIG, Acpi.Quirks.ResetLogoStatus), diff --git a/Platform/OpenCore/OpenCore.c b/Platform/OpenCore/OpenCore.c index 9f992ba4..eb716c42 100644 --- a/Platform/OpenCore/OpenCore.c +++ b/Platform/OpenCore/OpenCore.c @@ -90,6 +90,23 @@ OcStartImage ( LaunchInText ? EfiConsoleControlScreenText : EfiConsoleControlScreenGraphics ); + if((Chosen->Type & OC_BOOT_APPLE_ANY) && mOpenCoreConfiguration.Acpi.Quirks.OnlyForMacOS){ + DEBUG ((DEBUG_INFO, "OC: OcLoadAcpiSupport only for macOS...\n")); + OcLoadAcpiSupport (&mOpenCoreStorage, &mOpenCoreConfiguration); + + DEBUG ((DEBUG_INFO, "OC: OcLoadPlatformSupport...\n")); + OcLoadPlatformSupport (&mOpenCoreConfiguration, &mOpenCoreCpuInfo); + + DEBUG ((DEBUG_INFO, "OC: OcLoadDevPropsSupport...\n")); + OcLoadDevPropsSupport (&mOpenCoreConfiguration); + + /* DEBUG ((DEBUG_INFO, "OC: OcMiscLateInit...\n")); */ + /* OcMiscLateInit (Storage, &mOpenCoreConfiguration); */ + + /* DEBUG ((DEBUG_INFO, "OC: OcLoadKernelSupport...\n")); */ + /* OcLoadKernelSupport (&mOpenCoreStorage, &mOpenCoreConfiguration, &mOpenCoreCpuInfo); */ + } + Status = gBS->StartImage ( ImageHandle, ExitDataSize, @@ -134,14 +151,21 @@ OcMain ( OcMiscMiddleInit (Storage, &mOpenCoreConfiguration, mStorageRoot, LoadPath, mStorageHandle); DEBUG ((DEBUG_INFO, "OC: OcLoadUefiSupport...\n")); OcLoadUefiSupport (Storage, &mOpenCoreConfiguration, &mOpenCoreCpuInfo); - DEBUG ((DEBUG_INFO, "OC: OcLoadAcpiSupport...\n")); - OcLoadAcpiSupport (&mOpenCoreStorage, &mOpenCoreConfiguration); - DEBUG ((DEBUG_INFO, "OC: OcLoadPlatformSupport...\n")); - OcLoadPlatformSupport (&mOpenCoreConfiguration, &mOpenCoreCpuInfo); - DEBUG ((DEBUG_INFO, "OC: OcLoadDevPropsSupport...\n")); - OcLoadDevPropsSupport (&mOpenCoreConfiguration); + + if(!mOpenCoreConfiguration.Acpi.Quirks.OnlyForMacOS){ + DEBUG ((DEBUG_INFO, "OC: OcLoadAcpiSupport of any OS...\n")); + OcLoadAcpiSupport (&mOpenCoreStorage, &mOpenCoreConfiguration); + + DEBUG ((DEBUG_INFO, "OC: OcLoadPlatformSupport...\n")); + OcLoadPlatformSupport (&mOpenCoreConfiguration, &mOpenCoreCpuInfo); + + DEBUG ((DEBUG_INFO, "OC: OcLoadDevPropsSupport...\n")); + OcLoadDevPropsSupport (&mOpenCoreConfiguration); + } + DEBUG ((DEBUG_INFO, "OC: OcMiscLateInit...\n")); OcMiscLateInit (Storage, &mOpenCoreConfiguration); + DEBUG ((DEBUG_INFO, "OC: OcLoadKernelSupport...\n")); OcLoadKernelSupport (&mOpenCoreStorage, &mOpenCoreConfiguration, &mOpenCoreCpuInfo);