Utilities/ocvalidate/README.md
Utility to validate whether a config.plist matches requirements and conventions imposed by OpenCore.
config.plist to verify it.--version for current supported OpenCore version.OcSerializeLib which performs fundamental checks in terms of syntax and semantics. After that, the following will be checked.<OCS: No schema for xxx> complained by OcSerializeLib indicates unknown keys that can be deprecated in new versions of OpenCore. Such keys should be removed in order to avoid undefined behaviours.ocvalidate --version to check which version of OpenCore is supported, and thus please only use the specific version.String format) throughout the whole config only accept ASCII printable characters at most. Stricter rules may apply. For instance, some fields only accept specified values, as indicated in Configuration.pdf.OC_STORAGE_SAFE_PATH_MAX) in total including '\0' terminator.Find, Replace, Mask (if used), and ReplaceMask (if used) identical size set. Also, Find requires Mask (or Replace requires ReplaceMask) to be active (set to non-zero) for corresponding bits.MinKernel and MaxKernel entries should follow conventions specified in Configuration.pdf. (TODO: Bring decent checks for this)MinKernel cannot be a value that is below macOS 10.4 (Darwin version 8).0-9, A-Z, a-z, '_', '-', '.', '/', and '\'.PciRoot(0x0)/Pci(0x1b,0x0)) only accept strings in canonic string format.0-9, A-Z, a-z, '_', '-', '.', and '/'.ConsoleAttributes, PickerAttributes, or ScanPolicy) only allow known bits stated in Configuration.pdf to be set.NVRAM) must have correct format set..aml and .bin filename suffix are accepted.DevirtualiseMmio in Booter->Quirks should be enabled.Any, i386, or x86_64 are accepted.Any, Apple, or a specified bootloader with .efi sufffix, are accepted.AllowRelocationBlock is enabled, ProvideCustomSlide should be enabled altogether.EnableSafeModeSlide is enabled, ProvideCustomSlide should be enabled altogether.ProvideMaxSlide is set to a number greater than zero, ProvideCustomSlide should be enabled altogether.ResizeAppleGpuBars must be set to 0 or -1.DisableVariableWrite, EnableWriteUnprotector, or ProvideCustomSlide is enabled, OpenRuntime.efi should be loaded in UEFI->Drivers.Any, i386, or x86_64 are accepted..kext suffix..plist suffix.Lilu.kext is used, DisableLinkeditJettison should be enabled in Kernel->Quirks.BrcmFirmwareRepo.kext must not be injected by OpenCore.BundlePath, ExecutablePath, and PlistPath must match against each other. Current list of rules can be found here.Lilu.kext.Any, i386, or x86_64 are accepted..) should exist, because any identifier looks like a domain sequence (vendor.product).CustomSMBIOSGuid requires PlatformInfo->UpdateSMBIOSMode set to Custom.SetApfsTrimTimeout cannot be a value that is greater than MAX_UINT32, or less than -1.Auto, i386, i386-user32, or x86_64 are accepted.Auto, Cacheless, Mkext, or Prelinked are accepted.\EFI\Microsoft\Boot\bootmgfw.efi or \System\Library\CoreServices\boot.efi since OpenCore knows these paths.None, Auto, RTC, or NVRAM are accepted.Builtin, External, or Apple are accepted.PickerAudioAssist requires AudioSupport in UEFI->Audio to be enabled.Disabled, Full, Short, or System are accepted.LauncherPath cannot be empty string.VirtualSMC.kext should be present in Kernel->Add.Disabled, Signed, or Any are accepted.Optional, Basic, or Secure are accepted.Default, Disabled, j137, j680, j132, j174, j140k, j780, j213, j140a, j152f, j160, j230k, j214k, j223, j215, j185, j185f, or x86legacy are accepted.8 or 32 are accepted.921600, 460800, 230400, 115200, 57600, 38400, 19200, 9600, 7200, 4800, 3600, 2400, 2000, 1800, 1200, 600, 300, 150, 134, 110, 75, or 50 are accepted.0xFF.0xFF, the rest must be divisible by 4.7C436110-AB2A-4BBB-A880-FE41995C9F82)nvda_drv must have type Plist Data with the value of 0x30 or 0x31.boot-args must be an ASCII string (thus Plist String) without trailing \0.bootercfg must be an ASCII string (thus Plist String) without trailing \0.csr-active-config must have type Plist Data and have length of 4 bytes.StartupMute must have type Plist Data and have length of 1 byte.SystemAudioVolume must have type Plist Data and have length of 1 byte.4D1EDE05-38C7-4A6A-9CC6-4BCCA8B38C14)UIScale must have type Plist Data with the value of 0x01 or 0x02.FirmwareFeatures must have type Plist Data and have length of 4 bytes.ExtendedFirmwareFeatures must have type Plist Data and have length of 8 bytes.FirmwareFeaturesMask must have type Plist Data and have length of 4 bytes.ExtendedFirmwareFeatures must have type Plist Data and have length of 8 bytes.DefaultBackgroundColor must have type Plist Data and have length of 4 bytes. Also, its last byte must be 0x00.TryOverwrite, Create, Overwrite, or Custom are accepted.Auto, Upgradable, or Soldered are accepted.OEM or valid UUID are accepted.EnableJumpstart is enabled, ScanPolicy in Misc->Security should have OC_SCAN_ALLOW_FS_APFS (bit 8) set, together with OC_SCAN_FILE_SYSTEM_LOCK (bit 0) set. Or ScanPolicy should be 0 (failsafe value).AudioSupport is enabled, AudioDevice must be either empty or a valid path.AudioSupport is enabled, AudioOutMask must be non-zero.RequestBootVarRouting is enabled, OpenRuntime.efi should be loaded in UEFI->Drivers.ResizeGpuBars must be set to an integer value between -1 and 19.OpenUsbKbDxe.efi is in use, KeySupport in UEFI->Input should never be enabled altogether.Ps2KeyboardDxe.efi is in use, KeySupport in UEFI->Input should always be enabled altogether.OpenUsbKbDxe.efi and Ps2KeyboardDxe.efi should never co-exist.AudioDxe.efi is in use, ConnectDrivers should be enabled altogether.OpenCanopy.efi is in use, PickerMode in Misc->Boot should be set to External.OpenVariableRuntimeDxe.efi is in use, its LoadEarly option must be set to TRUE.OpenRuntime.efi must be placed after OpenVariableRuntimeDxe.efi when both are in use.LoadEarly for any other driver but OpenVariableRuntimeDxe.efi and OpenRuntime.efi must be set to FALSE.Auto, V1, V2, or AMI are accepted.PointerSupport is enabled, the value of PointerSupportMode should only be ASUS.ClearScreenOnModeSwitch, IgnoreTextInGraphics, ReplaceTabWithSpace, and SanitiseClearScreen only apply to System TextRendererResolution should match NUMBERxNUMBER or NUMBERxNUMBER@NUMBER sequences (unless it is an Empty string or is set to Max).UIScale must be set to an integer value between -1 and 2.Reserved, LoaderCode, LoaderData, BootServiceCode, BootServiceData, RuntimeCode, RuntimeData, Available, Persistent, UnusableMemory, ACPIReclaimMemory, ACPIMemoryNVS, MemoryMappedIO, MemoryMappedIOPortSpace, or PalCode are accepted.