Что такое сценарий загрузки

В отличие от большинства операционных систем, загрузочный образ .ifs — это нечто большее, чем ядро и стартовый код. Образ также может содержать как приложения и библиотеки, так и простой стартовый shell-скрипт.

Новый образ можно построить, используя утилиту mkifs (Make Image FlieSystem), считывающую из текстового файла сценарий загрузки, описывающий содержимое образа, а также последовательность действий, описанную в стартовом shell-скрипте.

В установленной системе, в каталоге /boot/build, уже есть примеры готовых сценариев загрузки. Мы попробуем сейчас проанализировать содержимое файла qnxbasedma.build, одного из стандартных сценариев, который находится в этом же каталоге. Ниже приведен полный листинг этого файла:

[virtual=x86,bios +compress] boot = {
startup-bios -s 64k
PATH=/proc/boot:/bin:/usr/bin LD_LIBRARY_PATH=/proc/boot:/lib:/usr/lib:/lib/dll procnto
}

[+script] startup-script = {
slogger -l /dev/text
seedres
pci-bios
waitfor /dev/pci

[pri=10o] PATH=/proc/boot diskboot -D1
}

[type=link] /dev/console=/dev/con1

libc.so
[type=link] /usr/lib/ldqnx.so.1=/proc/boot/libc.so

libcam.so
io-blk.so
cam-disk.so
fs-qnx4.so
fs-dos.so
cam-cdrom.so
fs-cd.so

[data=c]
seedres
pci-bios
devb-eide
devb-ncr8
devb-aha8
diskboot
slogger

Подробную информацию о синтаксисе, используемом в сценариях загрузки, можно найти в онлайновой документации по mkifs (в разделе Neutrino Utilities Reference).

Первая часть этого файла предоставляет mkifs информацию о том, для какого процессора (архитектуры) строится образ (x86) и какой IPL (Initial Program Loader) используется (bios). Далее описывается, какая стартовая программа используется (startup-bios) и какое микроядро+менеджер процессов (procnto). При создании нового загрузочного образа для стандартного ПК x86, Вам не придется изменять содержимое этой части сценария загрузки. Зато следующий раздел представляет определенный интерес.

Раздел сценария, начинающийся с описания [+script] — стартовый скрипт, который запускается после передачи управления ядру системы. Этот скрипт содержит последовательность команд или программ, которые должны быть выполнены в процессе загрузки системы.

В случае нашего сценария, первое приложение — slogger, программа, осуществляющая ведение протоколов (логов) событий и сообщений, возникающих во время работы системы. После slogger запускается seedres — приложение, осуществляющее сбор информации об оборудовании, «железе» (аппаратные прерывания, адреса портов ввода-вывода и т.д.) для базы данных системных ресурсов. Затем следует pci-bios. Сервер pci-bios обеспечивает доступ к сервисам PCI-шины для приложений и драйверов устройств. Это очень критичное по отношению к «железу» приложение, и, чтобы обеспечить его нормальное функционирование, оно должно выполняться на современном ПК, имеющем PCI-шину. Чтобы оставшиеся приложения не начали выполняться ранее, нежели чем сервер PCI будет готов к работе, сюда же включена команда waitfor, ожидающая появление в файловой системе устройства /dev/pci.

В завершение работы стартового скрипта выполняется программа diskboot. diskboot определяет тип контроллера жестких дисков и проверяет все разделы жесткого диска на наличие способной к загрузке ОС QNX.

В следующих строках сценария, идущих после скобки } , завершающей стартовый скрипт, перечислены библиотеки и бинарные файлы, включаемые в загрузочный образ. Вначале перечисляются библиотеки, т.к. они являются разделяемыми (shared) элементами. Строка [data=c] означает, что описанные ниже нее бинарные файлы требуют уникальные сегменты данных, но код может быть разделяемым (shared). Если Вы выполните команду ls -l /proc/boot на работающей системе, Вы увидите список файлов, которые изначально были включены в образ, с которого была загружена система.