Поделиться в Facebook Поделиться ВКонтакте Поделиться в LinkedIn Опубликовать в Twitter

Сетевая загрузка QNX 4 с помощью PXE

PXE (англ. Preboot Execution Environment) — среда для загрузки компьютеров с помощью сетевой карты без использования жёстких дисков, компакт-дисков и других устройств, применяемых при загрузке операционной системы. (Материал из Википедии.)

PXE представляет собой небольшой загрузчик который хранится в Option ROM сетевой платы и вызывается BIOS’ом. PXE использует протокол DHCP (BOOTP) для рассылки широковещательного запроса и получения IP адреса, и протокол TFTP для загрузки различных программ по сети. Загрузчик PXE имеет ограничение на размер загружаемого файла и, поэтому обычно PXE используют для загрузки дополнительного загрузчика, который не имеет подобных ограничений, с расширенным функционалом, например, etherboot.

Построение образа QNX 4

Итак, первое, с чем сталкиваешься это ограничение на размер передаваемого файла. Загрузчик PXE без проблем принимает файлы размером порядка 500 Кб, что, идеально подходит для QNX 4, размер образов которой редко превышает это значение, а для сетевой загрузки может быть даже меньше 400 Кб. Приведу пример файла построения, который используется для сетевой загрузки QNX 4 на бездисковой станции:

 /boot/sys/boot
 $ boot -v -I -b 115200 -i 0x3F8

 /boot/sys/Proc32
 $ Proc32 -l 5

 /boot/sys/Slib32
 $ Slib32

 /bin/Net
 $ Net -d1 -n100 -m"14 1 000C29 3F7C0A"

 ../../../bin/Net.r6040
 $ Net.r6040

 /bin/sinit
 $ sinit -r //14/ -i //14/etc/config/sysinit.5 TERM=qansi

Подобный образ имеет размер порядка 364 Кб и отлично подходит для загрузки по PXE. Как хорошо видно из файла построения – 14 узел (MAC адрес которого явно указан в параметрах Net) используется в качестве сервера и монтируется как корень загружаемой станцией.

Следующая тонкость, с которой приходится столкнуться это то, что загрузчик PXE, после того как загрузит файл по сети, передаёт управление по смещению 0x7C00 в то время как стартовый адрес QNX 4 должен быть кратен 0x1000. Компромиссом будет смещение 0x8000, т.е. образ необходимо собрать, указав опцию “-b 0x8000” утилите buildqnx:

 # buildqnx -b 0x8000 -c -v qnx4.build qnx4.img

Теперь мы имеем файл с подходящим стартовым адресом и размером, но кто передаст управление с 0x7С00 на 0x8000? Для этого придётся использовать маленький загрузчик, основной задачей которого будет передача управления по нужному смещению, а второй задачей будет выравнивание размера образа. Не сложно подсчитать, что размер такого загрузчика должен быть равен 1 Кб ( 0x8000 – 0x7C00 ). Образ QNX необходимо соединить с загрузчиком:

 # cat qpxe qnx4.img > pxe-qnx4.img

На этом этапе образ готов к использованию, но для того, чтобы его передать PXE загрузчику потребуется DHCP/BOOTP и TFTP сервер.

QNX 4 в роли сервера для загрузки

В составе пакета TCP/IP для QNX 4 есть необходимые для загрузки по PXE сервисы: bootpd и tftpd. Но существующая версия bootpd некорректно отрабатывает широковещательный запрос PXE загрузчика, заполняя множество лишних полей в vendor specific полях BOOTP пакета, в то время как PXE ожидает в ответ только так называемое magic cookie (VM_RFC1048).

Для исправления этого недочёта в bootpd была добавлена опция –p.

Со стороны QNX необходимо запустить соответствующие сервисы. Для этого в файле конфигурации inetd.conf для inetd необходимо прописать запуск bootpd и tftpd:

 # Start bootpd server with packet
 # fixing for pxe booting
 bootp	dgram	udp   wait   root   /usr/ucb/bootpd  bootpd -i -p

 tftp	dgram	udp   wait   root   /usr/ucb/tftpd   in.tftpd

Кроме этого, необходимо корректно сформировать файл конфигурации для bootpd (обычно это /etc/ bootptab), прописав в него необходимые для загрузки параметры. Например, следующим образом:

 nanoetx:ht=ethernet:ha=00E04B269E00:ip=192.168.1.35:\
 bf=/tftpboot/pxe-qnx4.img:

Заключение

Таким образом, корректно сформированный образ QNX 4 с небольшим загрузчиком и правильно настроенные и работающие сетевые сервисы позволяют загружать QNX 4 с помощью PXE, используя другой узел сети с QNX 4 в качестве сервера. Подобная схема загрузки была успешно проверена, как на виртуальном оборудовании (VMware), так и на реальном и в том числе достаточно современном (Kontron nanoETXexpress-SP).

Ссылки:

  1. Ссылка на утилиту qpxe.
  2. Ссылка на версию bootpd с поддержкой загрузки по PXE.
  3. Обсуждение сетевого драйвера Net.r6040.

Автор: Владимир Махилёв
Метки: QNX4 | Руководство

Задать вопрос on-line Обсудить на форуме Написать электронное письмо