
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-grub
gemäß 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:
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 upgrade
oder 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:
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:
Bei Bedarf. Booten, im Bootmenü auf drücken e,
edit
nach unten scrollen bis zur Zeilelinux /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.
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 zwischenmenuentry Debian GNU/Linux...
und dem Ende der Klammern, }. Nach dem Einfügen ändern Sie die Zeilelinux /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_custom
etwas anderes als den Ihres ersten Eintrags zu ändern, da Sie sonst die beiden Einträge nicht unterscheiden können.
Laufen Sie update-grub
und 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_linux
und 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-grub
um die Aktualisierung /boot/grub/grub.cfg
entsprechend 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=bar
bei 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