Продукты

Все продукты

				20.06.2013
				

Сетевая загрузка 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).  

Ссылки:  

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


				

Возврат к списку