4 votes

Puis-je définir une variable nvram arbitraire en utilisant rEFInd?

Y a-t-il un moyen de personnaliser le chargeur d'amorçage rEFInd pour définir une variable nvram personnalisée, soit dans refind.conf ou d'une autre manière? Plus précisément, j'aimerais définir une valeur pour la variable boot-args.

Il semble que ce soit une chose évidente/standard que quelqu'un pourrait vouloir faire, et je sais que le chargeur d'amorçage OpenCore a toute une section de configuration NVRAM pour le prendre en charge, mais il ne semble pas y avoir d'informations à ce sujet pour rEFInd.

2voto

lx07 Points 2680

REFInd ne vous permettra pas de définir directement une variable NVRAM arbitraire, mais vous pouvez utiliser EDK2 pour compiler un petit pilote EFI. Cela est décrit dans le document de WikiLeaks EFI Basics: NVRAM Variables

Les pilotes EFI placés dans le répertoire des pilotes de rEFInd sont chargés et exécutés automatiquement - voir Le gestionnaire d'amorçage rEFInd : Utilisation des pilotes EFI. Vous pourriez également écrire un programme EFI au lieu d'un pilote, puis utiliser une section manuelle dans rEFInd pour appeler un script shell pour appeler ceci, puis le chargeur d'amorçage.

Une autre méthode (probablement plus facile) serait de modifier rEFInd. Vous pouvez voir dans la source comment il définit la variable NVRAM csr-active-config pour activer et désactiver SIP - apple.h définit le GUID :

// Les constantes liées à la Protection de l'Intégrité du Système (SIP) d'Apple...
#define CSR_GUID { 0x7c436110, 0xab2a, 0x4bbb, { 0xa8, 0x80, 0xfe, 0x41, 0x99, 0x5c, 0x9f, 0x82 } };

apple.c appelle la fonction EfivarSetRaw() dans lib.c

Statut = EfivarSetRaw(&CsrGuid, L"csr-active-config", (CHAR8 *) &TargetCsr, 4, VRAI);
if (Statut == EFI_SUCCESS)
    EnregistrerStatutCsr(TargetCsr, VRAI);
sinon
    SPrint(gCsrStatus, 255, L" Erreur lors de la définition du code de Protection de l'Intégrité du Système.");

D'autres mises à jour NVRAM pourraient être effectuées de la même manière - il y a divers autres GUID répertoriés dans le lien WikiLeaks du premier paragraphe.


Si vous souhaitez transmettre un argument de démarrage sans mettre à jour NVRAM, vous pouvez créer une entrée de démarrage manuelle dans rEFInd et spécifier les options dans refind.conf. Des options supplémentaires peuvent être ajoutées en utilisant add_options - voir la page Créer des strophes de démarrage manuelles de la documentation.

Par exemple, vous pouvez définir des options de menu comme ceci et choisir entre elles en utilisant F2 au démarrage.

menuentry "Catalina" {
    # Obtenez le GUID du chargeur à partir du sous-volume macOS : diskutil info disk1s5|grep 'Volume UUID'
    icône \EFI\refind\themes\colourful\myicons\os_mac_silver.png
    volume "Preboot"
    chargeur \3B4B18C9-C57D-4F98-9168-C8D8B9F06EAD\System\Library\CoreServices\boot.efi
    submenuentry "Verbeux" {
        add_options "-v"
    }
    submenuentry "Utilisateur Unique" {
        add_options "-v -s"
    }
    submenuentry "Mode sans échec" {
        add_options "-v -x"
    }
    submenuentry "Récupération" {
        volume "Recovery"
        loader \3B4B18C9-C57D-4F98-9168-C8D8B9F06EAD\boot.efi
    }
}

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X