web-dev-qa-db-fra.com

Comment ajouter des paramètres de démarrage au noyau avec BCFG à partir de la coquille EFI?

efibootmgr crée des entrées non valides dans le menu de démarrage EFI. Par exemple efibootmgr -c -d /dev/sdX -p Y -l /EFI/refind/refind_x64.efi -L "rEFInd Boot Manager" Ajoute des caractères japonais inébranlables dans le menu de démarrage.

D'autre part bcfg boot add 3 fs0:\EFI\refind\refind_x64.efi "rEFInd" fonctionne juste bien.

Maintenant, je voudrais démarrer directement sur vmlinuz-linux Au lieu de passer à travers refind. Quelqu'un a-t-il une idée sur la façon de passer des paramètres au noyau? Sans les paramattres, il est: bcfg boot add 3 fs0:\vmlinuz-linux "linux" Mais quelle option dois-je utiliser pour ajouter initrd=\initramfs-linux.img root=/dev/sda2?

Merci

5
ChiseledAbs

J'ai eu des problèmes similaires sur une carte mère (Supermicro), et tandis que la suggestion de Steve d'utiliser un fichier texte fonctionne, il y a un peu plus de nuance. J'ai essayé de documenter le processus ci-dessous:

  1. Si vous n'avez pas bcfg disponible, vous devez d'abord obtenir une copie d'une coquille EFI 2.x. Le firmware de la carte mère a probablement 1.x. Le archi-wiki a plus de détails, mais pour la plupart Systèmes modernes 64 bits que vous voudrez attraper le Shell.efi de ici et renommez-le shellx64.efi et placez-le directement à la racine de votre partition système EFI. Si votre carte mère fournit un Launch EFI Shell from filesystem device, utilise le. Sinon, vous pouvez utiliser la coquille intégrée pour lancer la coque mise à jour. Voir le wiki pour plus d'informations.

  2. Une fois que vous êtes dans le shell 2.x, vous voudrez vous assurer que votre option de démarrage existe. Vous pouvez répertorier des options avec bcfg boot dump -b (la -b Permet le pager, comme more). Si cela n'existe pas, vous devrez en ajouter un, de préférence au sommet de la liste. Vous pouvez parcourir les systèmes de fichiers avec map -b, recherchez les entrées commençant par fs comme fs0:, puis utiliser ls comme ls fs0:\, ls fs0:\EFI\, etc pour explorer les répertoires.

    Une fois que vous avez trouvé le chemin de démarrage (et le périphérique correct fs), ajoutez-le (comme dans la question initiale):

    bcfg boot add 3 fs0:\EFI\refind\refind_x64.efi "rEFInd"
    

    Cela l'ajoute comme la 4ème entrée de démarrage (comptage de 0, 1, 2, 3)

  3. Une fois que vous avez ajouté l'option de démarrage (vérifiez avec bcfg boot dump -b) Vous devez ajouter les données facultatives (paramètres de démarrage). Comme Steve mentionné brièvement, la manière la plus robuste de le faire consiste à enregistrer ces paramètres à un fichier, puis à les importer avec bcfg -opt. Cependant, à partir de ce que je peux dire, cela ajoute les options, de sorte que vous êtes le meilleur de bcfg boot rming l'option de démarrage en premier et la réduisant en la fois selon l'étape 2. Une fois que vous avez une entrée propre, vous pouvez ajouter les données facultatives. Par example:

    edit fs0:\EFI\refind\options.txt
    

    Cela ouvrira un éditeur de fichiers. Tapez vos options (sur une seule ligne) et appuyez sur F2 pour enregistrer. Appuyez sur F3 pour quitter. Vous pouvez également modifier ce fichier à partir d'un système d'exploitation, mais vous doit Sauvegardez-le comme UTF-16 (Le, Little-Endian). L'éditeur de Shell EFI le fait automatiquement.

    La prochaine étape consiste à importer les options:

    bcfg boot -opt 3 fs0:\EFI\refind\options.txt
    

    Encore une fois, le 3 Spécifie l'entrée de démarrage. Cela devrait correspondre à celui que vous avez ajouté comme. N'exécutez pas cette commande plusieurs fois - vous devez rm et re -add L'entrée avant de pouvoir changer d'options.

  4. Vérifiez les options de démarrage et les données facultatives avec bcfg boot dump -v -b.

2
Bob

Ma documentation pour efibootmgr montre que -p est pour spécifier le numéro de partition, mais dans votre question, il semble que vous utilisiez Y pour la valeur. Si ce n'était pas une faute de frappe, cela pourrait expliquer pourquoi vous obtenez des caractères étranges dans le menu et que vous avez eu du mal à démarrer.

Quant aux paramètres de passage, il y a un commutateur -@ qui a échappé à mon attention les premiers fois que j'ai lu les docs. Si vous fournissez un nom de fichier, il lit une ligne de paramètres à partir de ce fichier.

Les docs disent également que vous pouvez utiliser - comme nom de fichier, mais quand j'ai essayé cela, je n'ai pas pu le faire passer après avoir saisi du texte; Appuyez sur enter ou ^D semblait n'avoir aucun effet, tandis que ^C a terminé le programme sans modifier.


Si vous souhaitez expérimenter dans un VM avant de jouer avec votre matériel, vous pouvez être utile: bien que vous ayez besoin d'ajuster les chemins OVMF pour votre distribution:

  • Installez QEMU et le package de micrologiciels OVMF.
  • Copie /usr/share/edk2-ovmf/OVMF_VARS.fd Pour le répertoire actuel - QEMU écrira des modifications de configuration EFI dans ce fichier.
  • Créez un répertoire pour QEMU à utiliser comme VFAT virtuel (vvfat). Je vais y réfléchir comme hda à partir de maintenant.
  • Copiez un noyau qui a le talon EFI dans hda.
  • Si ce noyau n'a pas d'injuste intégré avec une coquille et efibootmgr, localisez ou construisez un inaitrd qui le fait et placez-le dans hda. (Un initrd générique peut fonctionner, car ceux-ci vous permettent généralement de saisir un mode d'urgence s'ils ne trouvent pas le volume racine.)
  • démarrer qemu; J'utilise la commande suivante:

    qemu-system-x86_64 -drive if=pflash,format=raw,unit=0,readonly=on,file=/usr/share/edk2-ovmf/OVMF_CODE.fd -drive if=pflash,format=raw,unit=1,readonly=off,file=OVMF_VARS.fd -enable-kvm -cpu Host -m 1024 -usb -device usb-tablet -netdev user,id=mynet -device virtio-net-pci,netdev=mynet -hda fat:rw:hda -boot menu=on
    
    • Une fois démarré, ne modifiez pas le DIR hda dir de l'extérieur du VM - voir l'avertissement ICI .
    • Noter la -boot menu=on partie. Si nécessaire, vous pouvez appuyer sur ESC tandis que c'est le démarrage et vous entrerez dans la configuration UEFI. De là, vous pouvez démarrer des entrées particulières ou créer/supprimer/éditer.
  • Vous allez tomber dans une coquille EFI s'il ne trouve pas de fichier à démarrer.

    • De là, vous pouvez utiliser bcfg pour afficher/modifier les entrées.
    • Ou, vous pouvez démarrer votre noyau Linux:

      fs0:
      bzImage.efi initrd=\absolute\path\to\initrd arg arg arg
      
    • ... à quel point le noyau devrait charger et démarrer avec l'initiateur et les arguments fournis. Notez qu'un chemin absolu est obligatoire lorsque vous utilisez InitRD - voir efi-stub.txt
    • Maintenant, vous pouvez fouiller dans les fichiers EFI sous /sys/firmware/, essayer efibootmgr, etc ... tout sans risquer votre matériel réel. Profitez!
0
Mark

Vous devriez l'utiliser comme ceci au lieu de /dev/sda Vous devez également utiliser partuuid ou uuid comme celui-ci:

--disk /dev/sdX --part Y --create --label "Arch Linux" --loader /vmlinuz-linux --unicode 'root=PARTUUID=XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX rw initrd=\initramfs-linux.img' --verbose
0
user1001684