В этой статье речь пойдет об организации процесса загрузки ОС QNX RTP и о возможностях изменения последовательности загрузки.
Два способа загрузки
Существующий релиз RTP допускает два различных способа загрузки QNX: - непосредственно с дискового раздела QNX средствами boot loader. - косвенно через FAT-раздел посредством использования драйвера DOS.
QNX boot loader
QNX boot loader осуществляет загрузку образа из файла /.boot непосредственно из дискового раздела QNX (или /.altboot, если Вы нажимаете клавишу ESC при появлении сообщения о возможности загрузки alternate OS). Если Вы собираетесь создать новый загрузочный образ, то можно будет его скопировать (файл .ifs) в /.altboot и, в этом случае, нажав ESC во время загрузки, можно будет проверить на "загружаемость" новый образ.
драйвер DOS
Загрузка с использованием DOS-драйвера предоставляет гораздо меньше гибких возможностей по сравнению с QNX boot loader, в силу того, что при загрузке использует только набор элементарных функций ввода-вывода, обеспечиваемых DOS. Но зато Вы можете использовать возможности меню, обеспечиваемые config.sys. Ниже приведен пример файла config.sys, сформированного после установки системы:
[menu]
menuitem=WIN, Windows
menudefault=WIN,30
menuitem=QNXDMA, QNX Realtime Platform
menuitem=QNX, QNX Realtime Platform (DMA Disabled)
menucolor=7,0
[QNX]
DEVICE=C:\PROGRA~1\QNX\boot\bin\loadqnx.sys C:\PROGRA~1\QNX\boot\fs\qnxbase.ifs
[QNXDMA]
DEVICE=C:\PROGRA~1\QNX\boot\bin\loadqnx.sys C:\PROGRA~1\QNX\boot\fs\qnxbas~1.ifs
[WIN]
[COMMON]
Чтобы добавить новый загрузочный образ, создайте новую строку меню и сконфигурируйте соответствующий блок команд для этого пункта меню. Например, если Вы хотите организовать загрузку нового образа, названного custom.ifs, расположенного в C:\Program Files\qnx\boot\fs, то Ваш файл config.sys должен выглядеть примерно так:
[menu]
menuitem=WIN, Windows
menudefault=WIN,30
menuitem=QNXDMA, QNX Realtime Platform
menuitem=QNX, QNX Realtime Platform (DMA Disabled)
menuitem=CUST, QNX custom.ifs
menucolor=7,0
[QNX]
DEVICE=C:\PROGRA~1\QNX\boot\bin\loadqnx.sys C:\PROGRA~1\QNX\boot\fs\qnxbase.ifs
[QNXDMA]
DEVICE=C:\PROGRA~1\QNX\boot\bin\loadqnx.sys C:\PROGRA~1\QNX\boot\fs\qnxbas~1.ifs
[CUST]
DEVICE=C:\PROGRA~1\QNX\boot\bin\loadqnx.sys C:\PROGRA~1\QNX\boot\fs\custom.ifs
[WIN]
[COMMON]
Независимо от того, какой метод загрузки используется, главная идея остается неизменной. Как только образ (.ifs) загрузится в память, управление передается стартовому скрипту, содержащемуся также в образе. На этом этапе завершается распаковка образа, собирается информацию о системе, передаваемая ядру, ядро системы размещается в памяти, после чего ему передается управление.
Что такое сценарий загрузки ?
В отличие от большинства операционных систем, загрузочный образ .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 на работающей системе, Вы увидите список файлов, которые изначально были включены в образ, с которого была загружена система.
Как создать загрузочный образ ?
В завершение этой статьи, попробуем внести небольшие изменения в qnxbasedma.build, построить образ и попытаться загрузить его.
Создайте локальную копию сценария в Вашем домашнем каталоге:
cp /boot/build/qnxbasedma.build $HOME
Теперь, используя Ваш любимый редактор, добавьте строку в сценарий. (Будьте осторожны при использовании Photon Editor (ped) - он может быть не настроен и сохранять данные о форматировании в конце файла). В блоке startup-script добавьте строку, обеспечивающую при загрузке вывод сообщения на консоль. После внесения изменений, раздел стартового скрипта должен выглядеть примерно следующим образом:
[+script] startup-script = {
slogger -l /dev/text
seedres
pci-bios
waitfor /dev/pci
display_msg "QNX Realtime Platform - Custom Boot Image #1"
[pri=10o] PATH=/proc/boot diskboot -D1
}
Мы добавили строку с командой display_msg. В результате, перед запуском программы diskboot, на консоль будет выводиться сообщение. Заодно, увидев его, Вы убедитесь, что загружается именно созданный Вами образ.
Теперь нужно запустить программу mkifs и инсталлировать результирующий файл нового образа. Откройте окно терминала (pterm), перейдите в домашний каталог и выполните команду:
% mkifs -v qnxbasedma.build custom.ifs
В процессе работы mkifs, на терминал будет выводиться информация о файлах, включаемых в образ. По завершении работы Вы получите файл образа custom.ifs, который можно будет скопировать в /.altboot или в каталог DOS (обычно в /fs/hd0-dos/Program Files/qnx/boot/fs). Если Вы используете DOS для загрузки Вашего образа, приготовьтесь отредактировать config.sys под DOS, НЕ ПОД QNX - многие редакторы в среде QNX сохранят файл config.sys в формате текстового файла UNIX, который DOS впоследствие "не поймет".
Перезагрузив систему, Вы увидите на экране Ваше сообщение, которое появится в процессе загрузки системы.
На сегодня это пока все.
Желаем Вам успешной загрузки ! :) |