Как PXE загрузиться с ARM?

2423
Dan

Я пытаюсь настроить бездисковую загрузку UEFI + PXE + NFS для CentOS 7 в ARM. Как правило, процесс выглядит так:

  1. Клиентский процессор загружает прошивку UEFI
  2. Прошивка PEFE UEFI клиента запрашивает DHCP из сети
  3. Сервер предоставляет IP-адрес, IP-адрес TFTP-сервера, PXE NBP (программа начальной загрузки сети)
  4. UEFI клиента загружает NBP с TFTP-сервера
  5. Клиентский UEFI выполняет NBP, который загружает образ ядра с TFTP-сервера
  6. Клиент NBP выполняет образ ядра, который монтирует файловую систему через NFS

Каждое руководство по загрузке PXE, которое я могу найти, в конечном итоге требует pxelinux.0 от Syslinux в качестве NBP (шаги 3, 4, 5). Syslinux не поддерживает ARM (афаик?). С этим в мыслях:

Может кто-нибудь описать, как PXE загружает aarch64?

2
Даже без правок оригинальный вопрос следовал формату, предложенному в вики сообщества: «У меня есть что я не знаю, как решить. Я уже пробовал X, Y, Z, но эти программы не работают из-за того или другого. Как мне это сделать? "Https://meta.superuser.com/a/5373/639139 Dan 7 лет назад 0
Я думаю, что это было по ошибке закрыто, если ваш вопрос действительно не был ранее. Я знаю, что многие платформы ARM используют не UEFI, а U-boot или другой загрузчик - обычно они загружают ядро ​​и initrd напрямую из раздела ext2 или fat32, а затем просто передают управление им. Существуют и другие платформы ARM, например серверы для монтажа в стойку, которые могут отличаться. Я действительно не думаю, что ничто кроме Microsoft Surface RT использует UEFI в ARM, но я могу ошибаться. В любом случае вам нужно узнать / подтвердить, какой загрузчик находится в системе, на которую вы пытаетесь установить его. LawrenceC 7 лет назад 0
Кстати, PXE - это стандарт Intel / x86 - на Guruplug, который представляет собой плату ARM на основе U-boot, вы можете иметь плату, загружающую ядро ​​и initrd с хоста TFTP. Но это не совсем эквивалентно PXE, потому что нет доступных сервисов BIOS или UEFI. LawrenceC 7 лет назад 0
@LawrenceC, спасибо за комментарии. Я внес довольно существенные изменения в надежде на то, что вопрос будет вновь открыт, но даже оригинал был в рамках рекомендаций. Dan 7 лет назад 0
@LawrenceC Этот конкретный проект предназначен для стоечного сервера, поэтому он использует UEFI вместо Uboot. Мне посчастливилось сделать это вручную с ARM-платами на основе Uboot, как вы описали. Просто застрял, пытаясь использовать стандарт PXE. Intel может сильно его поддерживать, но компоненты PXE не зависят от архитектуры (на самом деле это просто DHCP + TFTP). Просто одна из многих проблем, связанных с чем-либо, кроме x86 :) Dan 7 лет назад 0
Вероятно, проблема в том, что файл «pxelinux.0» представляет собой двоичный файл x86. Вам нужно найти или собрать двоичный файл ARM. LawrenceC 7 лет назад 0
В этом-то и заключается проблема - мне нужен pxelinux.0 на основе ARM, но этот файл взят из Syslinux, который не поддерживает ARM. Первоначальный вопрос был закрыт, потому что он включал запрос альтернатив Syslinux, которые предоставляют pxelinux.0 (загрузчик PXE / "NBP" :) Dan 7 лет назад 0
UEFI все равно не использует pxelinux.0. Это для PXE, это бинарный файл в реальном режиме. Вы хотите [UEFI NetBoot] (http://www.syslinux.org/wiki/index.php?title=PXELINUX#UEFI), который не является PXE. Но Syslinux действительно не поддерживает ARM. GRUB 2 может, правда. Daniel B 7 лет назад 2

1 ответ на вопрос

0
Dan

Вот мои возможные выводы и решения, с большой помощью из комментариев!

  • Syslinux не поддерживает ARM
  • Даже если это так, pxelinux.0применяется только к BIOS, а не UEFI
  • Используйте GRUB2 вместо Syslinux

Предполагая, что сервер (ы) PXE (DHCP + TFTP) уже настроены в соответствии со многими руководствами,

  1. Скопируйте ядро ​​и initramfs в корневой каталог TFTP (обычно /var/lib/tftpboot)
  2. Скопируйте grubaa64.efiиз /boot/efi/EFI/centos/вашего корневого каталога TFTP (или ./boot/subdir)
  3. Создайте файл конфигурации grub.cfg, в том же каталоге

    (GRUB работает /как корневой каталог TFTP. Измените 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. Укажите свой DHCP-сервер grubaa64.efiвместоpxelinux.0

  5. Это оно! Попробуйте отредактировать grub.cfgна сервере TFTP, затем выберите «Обновить меню GRUB», чтобы увидеть, что он вытягивает новую конфигурацию
мне нужно собрать grub2 для ARM? elvis.dukaj 6 лет назад 0
Тебе не нужно это делать. Дистрибутив, с которого вы начинаете, уже создан для ARM. Так что, если он установлен, или вы устанавливаете GRUB2, он уже должен быть собран для ARM. Dan 6 лет назад 0

Похожие вопросы