Podemos encontrar en Internet artículos con un título similar a este: OpenCore not detected: bootloader isn’t installed or NVRAM isn’t native. Este texto explica la causa más probable de este error y cómo solucionarlo.
Para obtener la versión actual de OpenCore podemos usar el comando:
nvram 4D1FDA02-38C7-4A6A-9CC6-4BCCA8B30102: versión opencore
Pero a veces la versión de Opencore (incluso el propio Opencore) no se puede detectar y la petición de esta variable devuelve un error cuya apariencia es diferente según el método utilizado para esta tarea.
Terminal:
nvram: Error getting variable - '4D1FDA02-38C7-4A6A-9CC6-4BCCA8B30102: opencore-version': (iokit / common) data was not found.
Hackintool:
OpenCore version x.x.x is available - you have 0.0.0. Would you like to download a newer version?
OpenCore Configurator:
The bootloader looks like it is not installed or your NVRAM isn't native.
Este error puede aparecer incluso cuando tenemos NVRAM nativa funcionando correctamente.
La clave que maneja la exposición de las variables UEFI al sistema operativo desde OpenCore es Misc >> Security >> ExposeSensitiveData. De forma predeterminada, OpenCore no anuncia su presencia al sistema operativo. Si ExposeSensitiveData se establece en cero, este es el comportamiento normal.
Nota: esta es la razón por la que la partición EFI que contiene el OpenCore que arranca no es visible en el selector (picker) y en cambio sí se pueden ver particiones EFI de otras instalaciones de OpenCore.
ExposeSensitiveData (number)
En el archivo Configuration.pdf se puede leer:
Sensitive data exposure bitmask (sum) to operating system.
- 0x01 — Expose the printable booter path as an UEFI variable.
- 0x02 — Expose the OpenCore version as an UEFI variable.
- 0x04 — Expose the OpenCore version in the OpenCore picker menu title.
- 0x08 — Expose OEM information as a set of UEFI variables.
Valores que puede adoptar ExposeSensitiveData y qué significan:
- ExposeSensitiveData=0 >> variables UEFI no están disponibles para macOS
- ExposeSensitiveData=1 >> la ruta a bootx64.efi está disponible como variable UEFI
- ExposeSensitiveData=3 >> la ruta a bootx64.efi y la versión de OpenCore están disponibles como variables UEFI
- ExposeSensitiveData=6 >> la versión de OpenCore está disponible como variable UEFI y se muestra en el selector
- ExposeSensitiveData=7 >> la ruta a bootx64.efi y la versión de OpenCore están disponibles como variables UEFI y la versión de OpenCore se muestra en el selector
- ExposeSensitiveData=15 >> la ruta a bootx64.efi y la versión de OpenCore están disponibles como variables UEFI, la versión de OpenCore se muestra en el selector y un grupo de variables UEFI están disponibles con información OEM.
NVRAM nativa
En la versión actual de OpenCore (asumiendo que tenemos NVRAM nativa que funciona bien) el error de OpenCore no detectado (o la versión de OpenCore no detectada) generalmente está relacionado con ExposeSensitiveData=0. Con los valores 3, 6, 7 o 15 en ExposeSensitiveData, este error no debería ocurrir.
NVRAM emulada
Para que funcione la NVRAM emulada, además del valor asignado a ExposeSensitiveData hay que actuar sobre 3 claves de Misc -> Security:
- LegacyEnable (Boolean) >> Permite que las variables NVRAM se almacenen en el archivo nvram.plist en sistemas sin NVRAM nativa. Permite cargar un archivo llamado nvram.plist (con variables NVRAM) desde la raíz del volumen EFI.
- LegacyOverwrite (Boolean) >> Permite sobrescribir variables de firmware en el archivo nvram.plist. Nota: Solo se sobrescribirán las variables accesibles desde el sistema operativo.
- LegacySchema (Dictionary) >> Permite asignar variables nvram en sistemas sin NVRAM nativa. Estas variables se escriben en el archivo nvram.plist.
También hay que verificar una clave en PlatformInfo >> WriteFlash (boolean) >> Permite a las variables añadidas escribir en la memoria flash. Cuando WriteFlash=False la variable se escribe en RAM, no en CMOS, y no se conserva durante los reinicios. Ésta es la diferencia entre variables volátiles y no volátiles.
FAQs
- Si tengo NVRAM nativa no necesito usar ningún valor para NVRAM emulada, ¿es cierto?
Es cierto, si tengo NVRAM nativa puedo olvidar la configuración relativa a NVRAM emulada.
- Si tengo NVRAM nativa ¿puedo eliminar estas entradas en LegacySchema y su contenido? (7C436110-AB2A-4BBB-A880-FE41995C9F82 y 8BE4DF61-93CA-11D2-AA0D-00E098032B8C)
Está claro que LegacySchema es un conjunto de variables NVRAM y que OpenCore las compara con las variables presentes en nvram.plist. En teoría, no sería necesario cuando tenemos NVRAM nativa por lo que en este caso podríamos eliminar la sección LegacySchema.
Si tenemos LegacyEnable=False y LegacyOverwrite=False parece lógico pensar que OpenCore no utiliza LegacySchema. Y esto es cierto en sistemas que tienen NVRAM nativa y arrancan perfectamente sin esas 2 entradas LegacySchema. Lo que siempre se recomienda es tener WriteFlash=True.
Nota: Hay que hacer ResetNVRAM en el primer arranque cada vez que OpenCore cambia a una versión diferente.