4 votos

¿Puedo establecer una variable nvram arbitraria utilizando rEFInd?

¿Hay alguna manera de personalizar el gestor de arranque rEFInd para establecer una variable nvram personalizada, ya sea en refind.conf o de cualquier otra manera? En concreto, me gustaría establecer un valor para el boot-args variable.

Parece una cosa obvia/estándar que alguien podría querer hacer, y sé que el gestor de arranque de OpenCore tiene toda una sección de configuración de la NVRAM para soportarlo, pero no parece haber nada en los documentos sobre ello para rEFInd.

2voto

Michael Puntos 193

REFInd no le permitirá establecer una variable NVRAM arbitraria directamente, pero puede utilizar EDK2 para compilar un pequeño controlador EFI. Esto se describe en el documento de WikiLeaks Conceptos básicos de EFI: Variables NVRAM

Los controladores EFI colocados en el directorio de controladores rEFInd se cargan y ejecutan automáticamente - véase El gestor de arranque de rEFInd: Uso de los controladores EFI . Alternativamente podrías escribir un programa EFI en lugar de un driver y luego usar una estrofa manual en rEFInd para llamar a un shell script para llamar a este y luego al bootloader.

Otro método (probablemente más fácil) sería modificar rEFInd. Puedes ver en el código fuente cómo se establece el csr-active-config Variable NVRAM para activar y desactivar el SIP - apple.h define el GUID:

// The constants related to Apple's System Integrity Protection (SIP)....
#define CSR_GUID { 0x7c436110, 0xab2a, 0x4bbb, { 0xa8, 0x80, 0xfe, 0x41, 0x99, 0x5c, 0x9f, 0x82 } };

apple.c llama a la función EfivarSetRaw() en lib.c

Status = EfivarSetRaw(&CsrGuid, L"csr-active-config", (CHAR8 *) &TargetCsr, 4, TRUE);
if (Status == EFI_SUCCESS)
    RecordgCsrStatus(TargetCsr, TRUE);
else
    SPrint(gCsrStatus, 255, L" Error setting System Integrity Protection code.");

Otras actualizaciones de la NVRAM podrían hacerse de la misma manera - hay varios otros GUID enumerados en el enlace de WikiLeaks en el primer párrafo.


Si quiere pasar un argumento de arranque sin actualizar la NVRAM puede crear una entrada de arranque manual en rEFInd y especificar el options en refind.conf. Se pueden añadir opciones adicionales utilizando add_options - ver el Creación de estrofas de arranque manual de la documentación.

Por ejemplo, puede definir las opciones del submenú así y elegir entre ellas usando F2 en el arranque.

menuentry "Catalina" {
    # Get loader GUID from macOS subvolume: diskutil info disk1s5|grep 'Volume UUID'
    icon \EFI\refind\themes\colourful\myicons\os_mac_silver.png
    volume "Preboot"
    loader \3B4B18C9-C57D-4F98-9168-C8D8B9F06EAD\System\Library\CoreServices\boot.efi
    submenuentry "Verbose" {
        add_options "-v"
    }
    submenuentry "Single User" {
        add_options "-v -s"
    }
    submenuentry "Safe Mode" {
        add_options "-v -x"
    }
    submenuentry "Recovery" {
        volume "Recovery"
        loader \3B4B18C9-C57D-4F98-9168-C8D8B9F06EAD\boot.efi
    }
}

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X