Загрузка Raspberry по сети

Raspberry Pi 3 умеет загружаться по сети без SD.

Инструкция для Raspberry Pi 3

  1. Установить WTware из .exe дистрибутива. Установить WTware TFTP.
  2. Запустить конфигуратор.
  3. Нажать кнопку с малиной вверху слева.
  4. Сделать "Программирующую SD" и один раз загрузить малину с нее.

Это все. Дальше должно загружаться по сети без SD. В начале загрузки пауза секунд десять.

Иногда не работает. Возможные причины ниже, решение одно: вставить специальную SD для загрузки по сети.

Инструкция для Raspberry Pi 2. И для Pi 3, если без SD не получилось

  1. Установить WTware из .exe дистрибутива. Установить WTware TFTP.
  2. Запустить конфигуратор.
  3. Нажать кнопку с малиной вверху слева.
  4. Сделать "SD для загрузки по сети".

На загрузочной карте один файл bootcode.bin. Есть надежда, что этот файл будет совместим с будущими ядрами и фирмварью Raspberry, т.е. эту SD уже не придется переписывать. Если так оно и будет, то загрузка Pi по сети наконец получит смысл.

Файл config.txt

Чтобы внести изменения в файл config.txt, необходимо скопировать его из каталога (вместо 5.4.84 укажите версию WTware, с который вы работаете):

C:\Program Files (x86)\WTware\TFTPDROOT\5.4.84\pi2\localboot\
в каталог терминала:
C:\ProgramData\WTware\Terminals\{MAC-адрес вашей Pi}\
И в каталоге терминала уже вносите изменения, нужные только для этого терминала.

Как это работает

Загрузка по сети на Raspberry Pi реализована чрезвычайно упрощенно. PXE BIOS для x86 машин 20-летней давности умнее, чем прошивка Raspberry Pi. Поэтому никакого HTTP, когда мы говорим о загрузке. Только TFTP.

Какой-то код вшит в процессор Raspberry Pi 3. Этот код позволяет загружать Pi 3 без SD. У этого кода особенно много проблем, и заменить его невозможно. Если без SD у вас не загружается, надо использовать "SD для загрузки по сети". На ней тот же код, но некоторые проблемы исправлены.

В Raspberry Pi 2 никакого кода для загрузки по сети не прошито. Поэтому "SD для загрузки по сети" необходима в любом случае.

В начале загрузки прошивка Pi 3 скачивает по TFTP свои бинарные файлы (bcm2709-rpi-2-b.dtb или bcm2710-rpi-3-b.dtb, fixup.dat, start.elf), свои конфигурационные файлы (config.txt, cmdline.txt) и загрузочный файл WTware (kernel7.img). Если используется WTware TFTP, то эти файлы берутся из каталога нужной версии WTware:

C:\Program Files (x86)\WTware\TFTPDROOT\5.4.84\pi2\localboot\
Если используется любой другой TFTP, то файлы берутся из корня TFTP. Cкачайте дистрибутив WTware в zip и смотрите документацию разработчиков Raspberry Pi.

Update: начиная с версии 5.4.86, 067 параметр dhcp больше не используется ПРИ ЗАГРУЗКЕ RASPBERRY ПО СЕТИ (однако для загрузки x86 этот параметр нужен и может использоваться для локальной загрузки Raspberry). WTware будет игнорировать 067 параметр при загрузке Raspberry по сети, точно так же как игнорирует его Raspberry firmware.

Подборка возможных проблем с сетью (проблем прошивки Raspberry Pi 3, WTware не виновата)

Ошибки общей реализации DHCP/PXE:

  • Although the Pi sets the vendor class option 60 to "PXEClient:Arch:00000:UNDI:002001", this is not PXE compliant.
  • The pi does not send a DHCPREQUEST packet before it starts to use the IP addr in the DHCPOFFER packet.
  • DHCP option next-server is ignored, use DHCP Option 66 to specify a different TFTP server address.
  • ARCH Option 93 is set to an unexpected value in the DHCPDISCOVER packet. It is set to 0 (Standard PC BIOS).
  • DHCP option filename is ignored. start.elf (with or without the serial number as a prefix) is used as a filename instead.

Ошибки в бутроме при загрузке без SD карты:

  • When the boot ROM enables the Ethernet link, it first waits for the link to come up, then sends its first DHCP request packet. This is sometimes too quick for the switch to which the Raspberry Pi is connected: we believe that the switch may throw away packets it receives very soon after the link first comes up.
  • The DHCP packet retransmission loop is not timing out correctly, so the DHCP packet will not be retransmitted.
  • DHCP Option 3 (routers) is not requested (so the Pi cannot contact a server that is located in a different subnet). Even if the DHCP server is forced to provide this option, the Pi seems to ignore it.

Появились комментарии, поправки к этой статье? Пожалуйста, напишите в форум!