Zusätzliche Boot-Option zu Grub für X32-Erweiterungen hinzufügen?

Zusätzliche Boot-Option zu Grub für X32-Erweiterungen hinzufügen?

Ich arbeite mit einem Free/Open-Source-Projekt. Ein Debian-Betreuer hat einen Fehler unter X32 gemeldet (kein Tippfehler; es ist nicht X86) und ich versuche, eine Testumgebung einzurichten, um ihn zu reproduzieren.

Laut DebiansX32 Ports-Wiki, ich muss die X32-Erweiterungen im Kernel aktivieren. Dazu muss ich den Grub-Eintrag hinzufügen. Unten steht, was ich hinzugefügt habe /etc/default/grub, und es stammt von der Wiki-Seite (außer dass ich den Standardeintrag kommentiert habe).

# GRUB_CMDLINE_LINUX_DEFAULT="syscall.x32=y quiet"
GRUB_CMDLINE_LINUX="syscall.x32=y"

Anschließend habe ich einen Check update-grubgemäß der Wiki-Seite durchgeführt und die Einträge im kompilierten Menü überprüft (siehe unten).

Wenn ich das System starte, scheint die Option im Hauptmenü oder in den erweiterten Optionen nicht verfügbar zu sein:

Fehlender Grub-Eintrag für X32

DebiansGrub2Die Dokumentation lässt einiges zu wünschen übrig. Es wird nur erläutert, wie Menüeinträge farblich hervorgehoben werden (so etwas kann man sich nicht ausdenken ...).

Nachdem ich die Anweisungen des Arztes befolgt hatte, erwartete ich Folgendes:

  • Debian GNU/Linux
  • Debian GNU/Linux (X32)
  • Erweiterte Optionen
  • Speichertest (memtest86+)
  • Speichertest (memtest86+, seriell)
  • ...

Wie füge ich X32-Bootoptionen zu Grub hinzu, gebe ihm einen Namen wie „Debian GNU/Linux (X32)“, stelle sicher, dass es während des Bootvorgangs eine Bootoption für den Kernel ist, und stelle sicher, dass die Änderungen nach einem upgradeoder erhalten bleiben dist-upgrade?


Gemäß der Antwort von Marius unten habe ich Folgendes hinzugefügt /etc/grub.d/40_custom:

menuentry 'Debian GNU/Linux (X32)' --class debian --class gnu-linux --class gnu --class os
  $menuentry_id_option 'gnulinux-simple-a4af7dfc-640c-4aa8-bf0b-068af3d72b01' {
    linux/boot/vmlinuz-4.2.0-1-amd64 root=UUID=a4af7dfc-640c-4aa8-bf0b-068af3d72b01 ro syscall.x32=y quiet
}

Es stellt den benannten Eintrag wie erwartet bereit, führt jedoch zu einem Boot-Fehler:

error: can't find command: `linux/boot/vmlinuz-4`

Ich denke, das lag am Kopieren/Einfügen in Emacs (es entfernt anscheinend Leerzeichen???). Also habe ich es in geändert linux /boot/vmlinuz-4.2.0-1-amd64.... Es führte zu einem Kernel-Panic:

Bildbeschreibung hier eingeben

Antwort1

Wenn ich Sie richtig verstanden habe, möchten Sie eine Möglichkeit finden, auszuwählen, ob mit oder ohne X32 gebootet werden soll. Sie können dies auf zwei verschiedene Arten tun:

  1. Bei Bedarf. Booten, im Bootmenü auf drücken e, editnach unten scrollen bis zur Zeile

    linux /boot/vmlinuz-linux root=UUID=978e3e81-8048-4ae1-8a06-aa727458e8ff quiet splash
    

und ändern Sie es in

  linux /boot/vmlinuz-linux root=UUID=978e3e81-8048-4ae1-8a06-aa727458e8ff syscall.x32=y quiet 

Fahren Sie nun mit dem Booten fort.

  1. Systematisch. Im Verzeichnis /etc/grub.d/gibt es einen Eintrag, 40_custom, der genau dafür verwendet wird. Sie müssen dort einen Abschnitt der Datei kopieren /boot/grub/grub.cfg: den Teil zwischen menuentry Debian GNU/Linux...und dem Ende der Klammern, }. Nach dem Einfügen ändern Sie die Zeile

     linux /boot/vmlinuz-linux root=UUID=978e3e81-8048-4ae1-8a06-aa727458e8ff quiet splash
    

hinein

     linux /boot/vmlinuz-linux root=UUID=978e3e81-8048-4ae1-8a06-aa727458e8ff syscall.x32=y quiet

Denken Sie auch daran, den Namen des Menüeintrags in 40_custometwas anderes als den Ihres ersten Eintrags zu ändern, da Sie sonst die beiden Einträge nicht unterscheiden können.

Laufen Sie update-grubund Sie sind fertig.

Antwort2

Wenn Sie die Option nur für den neuesten Kernel im Menü der obersten Ebene wünschen, geben Sie nicht "syscall.x32=y" ein /etc/default/grub. Suchen Sie stattdessen

linux_entry "${OS}" "${version}" simple \
"${GRUB_CMDLINE_LINUX} ${GRUB_CMDLINE_LINUX_DEFAULT}"

/etc/grub.d/10_linuxund fügen Sie Folgendes dahinter hinzu :

linux_entry "${OS} (X32)" "${version}" simple \
"${GRUB_CMDLINE_LINUX} ${GRUB_CMDLINE_LINUX_DEFAULT} syscall.x32=y"

Führen Sie es dann aus, update-grubum die Aktualisierung /boot/grub/grub.cfgentsprechend durchzuführen.

Auf diese Weise konnte ich den neuesten Kernel mit der Option „syscall.x32=y“ booten, aber ich merke keinen Unterschied zum Booten ohne diese Option. Das ist in Xubuntu 15.10 64-Bit der Fall. Was die Konfiguration betrifft, die nach dem Upgrade des Grub-Pakets erhalten bleibt, weiß ich nicht; vielleicht bemerkt die Installation eine angepasste Konfigurationsdatei und gibt Ihnen die Option, sie beizubehalten. Zumindest übersteht dies Kernel-Updates.

Antwort3

Sie könnten foo=barbei grub hinzufügen

Führen Sie von einem Terminal aus Folgendes aus:

gksudo gedit /etc/default/grub

und geben Sie Ihr Passwort ein.

Suchen Sie die Zeile, die mit GRUB_CMDLINE_LINUX_DEFAULT beginnt, und hängen Sie foo=bar an ihr Ende an. Beispiel:

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash foo=bar"

Speichern Sie die Datei und schließen Sie den Editor.

Starten Sie abschließend ein Terminal und führen Sie Folgendes aus:

sudo update-grub

um die Konfigurationsdatei von GRUB zu aktualisieren (wahrscheinlich müssen Sie Ihr Passwort eingeben).

Beim nächsten Neustart sollte der Kernel mit dem Bootparameter gestartet werden

Quelle: Grub-Foren

verwandte Informationen