Wie PXE mit ARM booten?

2489
Dan

Ich versuche, das plattenlose UEFI + PXE + NFS-Booten für CentOS 7 auf ARM einzurichten. Im Allgemeinen sieht der Prozess so aus:

  1. Die Client-CPU startet die UEFI-Firmware
  2. Die PXE-Firmware des Clients UEFI fordert DHCP vom Netzwerk an
  3. Der Server stellt die IP-, TFTP-Server-IP-, PXE NBP- (Netzwerk-Bootstrap-Programm) -Datei bereit
  4. Client-UEFI lädt NBP vom TFTP-Server
  5. Client-UEFI führt NBP aus, wodurch das Kernel-Image vom TFTP-Server geladen wird
  6. Der Client NBP führt ein Kernel-Image aus, das das Dateisystem über NFS bereitstellt

Jede PXE-Boot-Anleitung, die ich finden kann, erfordert schließlich pxelinux.0 von Syslinux als NBP (Schritte 3, 4, 5). Syslinux unterstützt kein ARM (afaik?). In diesem Sinne:

Kann jemand beschreiben, wie PXE aarch64 bootet?

2
Auch ohne Bearbeitungen entsprach die ursprüngliche Frage direkt dem im Community-Wiki vorgeschlagenen Format: "Ich habe dass ich nicht weiß, wie ich es lösen soll. Ich habe schon X, Y, Z ausprobiert, aber diese Programme funktionieren wegen dieses oder jenes nicht. Wie mache ich das? "Https://meta.superuser.com/a/5373/639139 Dan vor 7 Jahren 0
Ich glaube, das wurde fälschlicherweise geschlossen, es sei denn, Ihre Frage war zuvor wirklich anders. Ich weiß, dass viele ARM-Plattformen keine UEFI verwenden, sondern U-Boot oder einen anderen Bootloader. Normalerweise laden diese den Kernel und Initrd direkt von einer ext2- oder fat32-Partition und übertragen dann die Steuerung darauf. Es gibt einige andere ARM-Plattformen wie Rackmount-Server, die sich unterscheiden können. Ich glaube nicht, dass etwas anderes als Microsofts Surface RT UEFI in ARM verwendet, aber ich könnte mich irren. Auf jeden Fall müssen Sie wissen, was der Bootloader in dem System ist, auf dem Sie dies installieren möchten. LawrenceC vor 7 Jahren 0
PXE ist übrigens ein Intel / x86-Standard. Beim Guruplug, einem U-Boot-basierten ARM-Board, können Sie das Board einen Kernel und eine Initrd von einem TFTP-Host laden. Dies ist jedoch nicht ganz mit PXE vergleichbar, da keine BIOS- oder UEFI-Dienste verfügbar sind. LawrenceC vor 7 Jahren 0
@LawrenceC, danke für die Kommentare. Ich machte ziemlich wichtige Änderungen in der Hoffnung, die Frage erneut zu öffnen, aber selbst die ursprüngliche war innerhalb der Richtlinien. Dan vor 7 Jahren 0
@LawrenceC Dieses spezielle Projekt ist für einen Rack-Mount-Server gedacht, weshalb UEFI anstelle von Uboot verwendet wird. Ich hatte Glück, dies manuell mit Uboot-basierten ARM-Boards zu tun, wie Sie beschrieben haben. Ich versuche einfach, den PXE-Standard zu verwenden. Es wird möglicherweise stark von Intel unterstützt, aber die PXE-Komponenten sind architekturunabhängig (eigentlich nur DHCP + TFTP). Nur eine der vielen Herausforderungen, die mit etwas anderem als x86 arbeiten :) Dan vor 7 Jahren 0
Das Problem ist wahrscheinlich, dass die `pxelinux.0`-Datei eine x86-Binärdatei ist. Sie müssen eine ARM-Binärdatei davon finden oder erstellen. LawrenceC vor 7 Jahren 0
Das ist genau das Problem - ich brauche eine ARM-basierte pxelinux.0, aber diese Datei stammt von Syslinux, die ARM nicht unterstützt. Die Original-Frage wurde geschlossen, da sie die Frage nach Syslinux-Alternativen, die pxelinux.0 (der PXE-Bootloader / "NBP") bereitstellen, enthalten. Dan vor 7 Jahren 0
UEFI verwendet pxelinux.0 sowieso nicht. Das ist für PXE, es ist ein Real-Mode-Binary. Sie möchten [UEFI NetBoot] (http://www.syslinux.org/wiki/index.php?title=PXELINUX#UEFI), bei dem es sich nicht um PXE handelt. Aber eigentlich unterstützt Syslinux ARM wirklich nicht. GRUB 2 kann jedoch. Daniel B vor 7 Jahren 2

1 Antwort auf die Frage

0
Dan

Hier sind meine eventuellen Erkenntnisse und Lösungen, mit viel Hilfe aus den Kommentaren!

  • Syslinux unterstützt ARM nicht
  • Auch wenn dies der Fall war, pxelinux.0nur für das BIOS, nicht für UEFI
  • Verwenden Sie GRUB2 anstelle von Syslinux

Angenommen, die PXE-Server (DHCP + TFTP) sind bereits gemäß vielen Handbüchern eingerichtet.

  1. Kopieren Sie Ihren Kernel und Ihr Initramfs in Ihr TFTP-Stammverzeichnis (normalerweise /var/lib/tftpboot).
  2. Kopieren grubaa64.efivon /boot/efi/EFI/centos/in Ihr TFTP-Stammverzeichnis (oder ./boot/Unterverzeichnis)
  3. Erstellen Sie eine Konfigurationsdatei grub.cfgim selben Verzeichnis

    (GRUB behandelt /Ihr TFTP-Stammverzeichnis. Ändern Sie nach Bedarf linux& initrd).

    menuentry 'Shared CentOS (4.5.0-23.el7.aarch64)' { linux /vmlinuz-4.5.0-23.el7.aarch64 rw root=/dev/nfs ip=dhcp nfsroot=/netboot/CentOS_7.3 enforcing=0 initrd /initramfs-nfs-only.img } menuentry 'Refresh GRUB menu' { configfile /boot/grub.cfg } 
  4. Richten Sie Ihren DHCP-Server auf grubaa64.efistattpxelinux.0

  5. Das ist es! Versuchen Sie, die Bearbeitung grub.cfgauf dem TFTP-Server durchzuführen, und wählen Sie dann "Refresh GRUB menu" (Aktualisieren des GRUB-Menüs)
muss ich grub2 für ARM bauen? elvis.dukaj vor 6 Jahren 0
Du solltest nicht müssen. Die Distribution, mit der Sie beginnen, ist bereits für ARM gebaut. Wenn Sie GRUB2 installiert haben oder installieren, sollte es bereits für ARM erstellt werden. Dan vor 6 Jahren 0