8. Управление запуском QNX Neutrino

Подробности процесса запуска системы зависят от оборудования компьютера. В этом разделе приводится лишь общее описание запуска операционной системы QNX Neutrino.

Примечание. Чтобы изменить какие-либо файлы, которые система исполняет в процессе запуска, необходимо войти в систему как пользователь root.

Что происходит при загрузке?

При загрузке системы процессор сбрасывается и исполняет команду, на которую указывает его вектор сброса. Вектор сброса процессоров семейства x86 обычно указывает на BIOS, однако на других платформах вектор сброса может указывать на ПЗУ-монитор или команду прямого перехода на код начального загрузчика платы. После запуска ПЗУ-монитор обычно передает управление начальному загрузчику. BIOS делает то же самое либо непосредственно передает управление началу образа операционной системы (рис. 8.1).

Начальный загрузчик (IPL) копирует загрузочный образ в память и переходит на код начальной загрузки. Код запуска инициализирует оборудование, заполняет системную страницу информацией об оборудовании, загружает функции межбиблиотечных вызовов, которые используются ядром для взаимодействия с оборудованием, а затем загружает и запускает микроядро и администратор процессов — модуль procnto (который, начиная с версии 6.3.0, так же поддерживает именованные семафоры). Начальный загрузчик и код начальной загрузки, как правило, входят в состав BSP-пакета для конкретной платы.

После завершения своей инициализации модуль procnto выполняет команды, помещенные в загрузочный сценарий, которые позволяют продолжить настройку среды исполнения с помощью сценария командного интерпретатора или программы, написанной на языке C и/или C++.

Рис. 8.1. Загрузка операционной системы QNX Neutrino


Если система имеет процессор, который не принадлежит к семейству x86, и загружается с диска, то процесс настройки прост: большую его часть выполняет загрузочный сценарий или сценарий командного интерпретатора, который вызывается загрузочным сценарием. Более подробные сведения см. в разделе "Making an OS" руководства "Building Embedded Systems".


Загрузка системы с архитектурой x86 с использованием BIOS выполняется сложнее (рис. 8.2).

Получив управление, BIOS конфигурирует оборудование, а затем проверяет наличие сигнатур расширений BIOS (0x55AA). BIOS вызывает свои расширения (например, сетевая плата с загрузочным ПЗУ или контроллером жесткого диска) до тех пор, пока одно из них не выполнит загрузку системы. Если ни одно расширение не загружает систему, BIOS выводит сообщение об ошибке (как правило, странное).

При сетевой загрузке аппаратный загрузчик (как правило, bootp) загружает образ с сервера, копирует его в память, а затем передает управление началу образа. Поскольку загрузочному образу обычно необходимо использовать стек сетевого протокола, он запускает какую-либо сетевую файловую систему, чтобы загрузить дополнительные программы и файлы или получить к ним доступ.

Рис. 8.2. Загрузка ОС QNX Neutrino в системе с архитектурой x86
с использованием BIOS

Чтобы создать образ операционной системы, можно воспользоваться утилитой mkifs. Пример файла построения образа операционной системы см. в приложении.

Процесс загрузки операционной системы QNX Neutrino с диска более сложен, а инициализация системы — еще сложнее. После того как BIOS выберет загрузку с жесткого диска, вызывается первичный загрузчик (который иногда называют загрузчиком раздела). Этот загрузчик "индифферентен" по отношению к операционной системе, т. е. способен загрузить любую операционную систему. Загрузчик, который устанавливается ОС QNX Neutrino, отображает следующее сообщение:
Press F1-F4 to select drive or select partition 1,2,3? 1
(Нажмите клавишу F1-F4 для выбора диска или раздела 1, 2, 3? 1)
После короткой паузы загружается операционная система, которая расположена в выбранном разделе. Эта загрузка выполняется загрузчиком /boot/sys/ipl-diskpc1. Записать загрузчик на диск можно с помощью утилиты dloader.

Загрузка образа QNX Neutrino

При выборе раздела QNX запускается вторичный загрузчик (который иногда называют загрузчиком операционной системы). Этот загрузчик специфичен для операционной системы QNX Neutrino и располагается в QNX-разделе.

Файловая система Power-Safe

При использовании файловой системы Power-Safe (fs-qnx6.so) вторичный загрузчик осуществляет валидацию файловой системы и определяет самый новый из ее стабильных срезов (snapshot). Затем он отображает список всех подходящих файлов каталога .boot в прокручивающемся списке, из которого пользователь может выбрать необходимый загружаемый образ.

Если каталог .boot содержит только один файл, то загрузка начинается немедленно; в противном случае загрузчик 3-4 секунды ожидает нажатие кнопки. Для перемещения между файлами используются стрелки вверх и вниз, выбор осуществляется нажатием клавиши «Ввод» (Enter). Для перехода в начало или конец списка так же можно использовать клавиши Home и End. На экране может отображать до 10 файлов; для просмотра остальных необходимо удерживать клавишу со стрелкой вниз или вверх.

Если пользователь не нажимает клавишу, то по истечению таймаута загрузчик продолжит работу, используя образ по умолчанию. Это файл, имеющий самое недавнее время модификации, в списке он всегда отображается первым. В общем случае это будет последний образ, скопированный в каталог .boot; для изменения образа по умолчанию можно использовать утилиту touch. Для определения образа по умолнанию можно выполнить команду:

ls -t /.boot | head -1


Начальный загрузчик может быть обновлен без переформатирования раздела (т.е. без потери данных файловой системы) с помощью команды: mkqnx6fs -B.

Для загрузки могут использоваться только файловые системы «little-endian» (т.е. отформатированные на любом компьютере командой mkqnx6fs -el либо отформатированные на компьютере «little-endian» без указания порядка следования байт).

Начальный загрузчик поддерживает только два уровня иерархии блоков файловой системы. Следовательно при использовании 512-байтных блоков «область видимости» (cutover) составляет 128 Кбайт, поэтому файловая система, отформатированная командой mkqnx6fs -b512 вероятнее всего не будет пригодной для загрузки. При использовании блоков размером 1 Кбайт (это значение по умолчанию) «область видимости» составляет 1 Гбайт.

Начальный загрузчик может выдавать следующие сообщения об ошибках:

Unsupported BIOS


Данная BIOS не поддерживает расширения INT13 LBA.

Missing OS Image


Файловая система не является fs-qnx6 либо каталог .boot пуст.

Invalid OS Image


Выбранный файл не является загружаемым образом x86.

Disk Read Error


При чтении диска возникла физическая ошибка ввода-вывода.

Ram Error


При копировании образа возникла физическая ошибка ОЗУ.


Файловая система QNX 4

При использовании файловой системы QNX4 начальный загрузчик выведет следующее сообщение:

Hit Esc for .altboot

Если интервал ожидания истекает, то загрузчик загружает образ операционной системы из файла /.boot, а при нажатии клавиши <Esc> извлекает образ из файла /.altboot. В процессе считывания образа загрузчик печатает последовательность точек. Если происходит ошибка, загрузчик выводит один из перечисленных далее символов и процесс загрузки останавливается:
Единственное различие между образами, которые устанавливаются по умолчанию, заключается в том, что образ /.boot осуществляет прямой доступ к памяти EIDE-контроллера, а образ /.altboot — нет.

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

mv /.altboot oldaltboot

mv newboot /.altboot

А эти команды выполнятся успешно:

cp /.altboot oldaltboot

cp newboot /.altboot


Примечание. При модификации загрузочного образа рекомендуется скопировать работоспособный образ из файла /.boot в файл /.altboot, а затем поместить новый образ в файл /.boot. В случае ошибки это даст возможность нажать клавишу <Esc> при следующей загрузке и воспользоваться работоспособным загрузочным образом для восстановления.

diskboot

Файл построения образа по умолчанию .boot, qnxbasedma.build включает в себя следующие строки:

[+script] startup-script = {

# To save memory make everyone use the libc in the boot image!

# For speed (less symbolic lookups) we point to libc.so.2 instead

# of libc.so

procmgr symlink ../../proc/boot/libc.so.2 /usr/lib/ldqnx.so.2


# Default user programs to priority 10, other scheduler (pri=10o)

# Tell "diskboot" this is a hard disk boot (-b1)

# Tell "diskboot" to use DMA on IDE drives (-D1)

# Start 4 text consoles buy passing "-n4" to "devc-con" (-o)

# By adding "-e" Linux ext2 filesystem will be mounted as well.

[pri=10o] PATH=/proc/boot diskboot -b1 -D1 -odevc-con,-n4

}


Этот сценарий запускает систему с помощью программы diskboot, которая предназначена для загрузки операционной системы QNX Neutrino на дисковых компьютерах. Полное содержимое файла qnxbasedma.build см. в приложении.
Примечание. Можно передавать параметры программе diskboot (для управления загрузкой системы), а также драйверам устройств. В приведенном ранее файле построения образа программа diskboot передает параметр -n4 драйверу devc-con, чтобы задать число виртуальных консолей.

Можно настроить компьютер так, чтобы программа diskboot не использовалась. Пример соответствующего файла построения образа см. в приложении.

Утилита diskboot позволяет обновлять драйвера devb-*. Подробнее см. пункт “Обновление дисковых драйверов” далее в этом разделе.

При запуске программа diskboot отображает следующее приглашение:
Press the space bar to input boot options...
(Нажмите клавишу пробела, чтобы ввести параметры загрузки...)

Большая часть этих параметров предназначена для отладочных целей. Программа diskboot выполняет поиск раздела операционной системы QNX Neutrino, чтобы смонтировать его, а затем запускает последовательность сценариев для инициализации системы (рис. 8.3).

Рис. 8.3. Выполнение инициализации программой diskboot


Основным сценарием инициализации системы является /etc/system/sysinit. Локальные файлы инициализации обычно хранятся в каталоге /etc/rc.d. Чтобы запустить на узле дополнительные команды, например, для монтирования диска с файловой системой NFS, можно создать файл сценария с именем rc.local, сделать его исполняемым и поместить его в каталог /etc/rc.d. Более подробные сведения см. в описании файла rc.local далее в этом разделе.

Программа diskboot выполняет следующие действия.
  1. Запускает утилиту журналирования slogger. Приложения используют утилиту slogger для регистрации системных сообщений в журнале. Просмотреть журнал с этими сообщениями можно с помощью утилиты sloginfo.

  2. Затем программа diskboot запускает утилиту seedres, чтобы считать настройки BIOS для PnP-устройств и заполнить базу данных ресурсов модуля procnto.

  3. Далее программа diskboot запускает утилиту pci-bios, чтобы обеспечить поддержку BIOS для PCI-устройств.

  4. После этого программа diskboot запускает драйвер devb-eide или другие дисковые драйверы.

Примечание. Параметры для драйвера devb-eide и других драйверов следует передавать программе diskboot в файле построения образа.
  1. Затем программа diskboot осуществляет поиск файловых систем для монтирования (т. е. разделов и компакт-дисков), которое выполняется в зависимости от типа раздела. Программа diskboot распознает разделы следующих типов:

Эти разделы монтируются в каталоги /fs/cdx (для CD-ROM) и /fs/hdx-тип-y, где x является номером диска (например, /fs/cd0, /fs/hd1), а y — увеличивающийся параметр, который добавляется для уникальности. Например, вторым DOS-разделом на жестком диске 1 будет /fs/hd1-dos-2.

В нарушение этого правила один раздел операционной системы QNX 4 по умолчанию монтируется в каталог /. Это можно проверить, просмотрев содержимое файла .diskroot на каждом разделе QNX 4. Если существует только один раздел QNX 4, в файле .diskroot которого определена точка монтирования /, этот раздел демонтируется из каталога /fs/hdx-тип-y, а затем монтируется в каталог /. Если имеется несколько таких разделов, программа diskboot предлагает выбрать один из них.

Файл .diskroot, как правило, пуст, но может содержать команды. Более подробные сведения см. далее.
  1. Запускает расширенный встраиваемый интерпретатор fesh (необязательно).

  2. Затем программа diskboot запускает драйвер консоли devc-con-hid (QNX Momentics 6.3.0 Service Pack 3 или новее) или devc-con (более старые версии). Эти драйвера похожи, но devc-con-hid поддерживает PS2, USB и все другие устройства человеко-машинного интерфейса.

  3. Наконец, программа diskboot запускает главный сценарий инициализации системы /etc/system/sysinit.

.diskroot

Программа diskboot использует файл .diskroot для того, чтобы определить, какой раздел с операционной системой QNX 4 смонтировать в каталог /.

Файл .diskroot может являться:

/home


Строка не должна начинаться со знака номера (#) или содержать знак равенства (=). Программа diskboot игнорирует пробельные символы в начале и в конце строки;

метка = значение


Программа diskboot игнорирует любые пробельные символы в начале и в конце строки, а также до и после знака равенства.

Распознаются следующие метки:

mount = /home

options = ro,noexec


Более подробные сведения см. в документации по утилите mount и конкретным драйверам в «Описании программы. Часть 1. Справочник по утилитам» КПДА.10964-01 13 01, а также в описании функций mount() и mount_parse_generic_args() в руководстве по библиотекам Neutrino "Library Reference";

/etc/system/sysinit

Файл /etc/system/sysinit является сценарием, который запускает основные системные службы. Для того чтобы отредактировать этот файл, необходимо войти в систему как пользователь root.

Примечание. Перед тем как редактировать сценарий sysinit, рекомендуется создать резервную копию его последней работоспособной версии. Следует помнить, что сценарии, которые написаны пользователем, необходимо делать исполняемыми перед использованием (см. chmod в «Описании программы. Часть 1. Справочник по утилитам» КПДА.10964-01 13 01).

Сценарий sysinit выполняет следующие действия.
  1. Запускает утилиту slogger, если она еще не запущена.

  2. Запускает администратор каналов pipe. Этот администратор позволяет передавать выходные данные одной команды в качестве входных данных другой команде. Более подробные сведения см. в подразд. "Перенаправление ввода и вывода" раздела 4.

  3. Затем сценарий sysinit запускает утилиту mqueue, которая управляет очередями сообщений и именованными семафорами (named semaphores), используя "традиционную" реализацию. Если вам нужна альтернативная реализация очередей сообщений, использующая асинхронный обмен сообщениями, то вам необходимо запустить сервер mq. Дополнительную информацию см. в справочнике по утилитам.

Примечание. Начиная с версии 6.3.0 модуль procnto* управляет именованными семафорами, что обычно делал менеджер mqueue (и продолжает делать, если обнаруживает, что этого не делает procnto).
  1. Во время первой перезагрузки после установки операционной системы сценарий sysinit запускает сценарий /etc/rc.d/rc.setup-once, который создает различные каталоги и своп-файлы.

  2. Далее, присваивает конфигурационной строке _CS_TIMEZONE значение, которое хранится в файле /etc/TIMEZONE. Если этот файл не существует, сценарий sysinit задает часовой пояс UTC (Universal Time Coordinated — всеобщее скоординированное время, ранее называвшееся Greenwich Mean Time — время по Гринвичу). Более подробную информацию см. в подразд. "Задание часового пояса" раздела 9.

  3. Если файл /etc/rc.d/rc.rtc существует и является исполняемым, сценарий sysinit запускает его для настройки часов реального времени.

Рекомендуется устанавливать аппаратные часы по часовому поясу UTC, а временную зону задавать с помощью конфигурационной строки _CS_TIMEZONE или переменной окружения TZ. Система отображает и рассчитывает местное время, а также автоматически определяет начало и окончание летнего и зимнего времени.

Этот подход к управлению системным временем дает возможность пользователям, которые находятся в разных часовых поясах и подключаются к одному компьютеру, видеть правильное местное время. Кроме того, настройка аппаратных часов на время UTC удобна при передаче данных между разными часовыми поясами. К данным добавляется штамп времени по часовому поясу UTC, и все компьютеры с легкостью сравнивают штампы времени, которые установлены в разных часовых поясах.

Некоторые операционные системы, например Windows, устанавливают местное время на аппаратных часах. Если операционные системы Windows и QNX Neutrino устанавливаются на один компьютер, то следует задать на аппаратных часах местное время, выполнив следующую команду от имени пользователя root и поместив ее в файл /etc/rc.d/rc.rtc:

rtc -l hw

В графической оболочке Photon достаточно снять флажок The hardware clock uses UTC/GMT в программе phlocale. В этом случае утилита phlocale создаст файл rc.rtc, который содержит указанную выше команду.
Примечание. Имя хоста может состоять только из букв, цифр и символов дефиса, а также не должно начинаться и заканчиваться символом дефиса. Более подробные сведения см. в RFC 952.
Распознавание устройств

Для обнаружения всех известных аппаратных устройств компьютера и запуска соответствующих драйверов в операционной системе QNX Neutrino используется программа распознавания устройств (device enumerator) — администратор enum-devices. Он вызывается сценарием /etc/rc.d/rc.devices, который запускается программой /etc/system/sysinit.

Чтобы определить действия, которые должны быть выполнены при обнаружении конкретных аппаратных устройств, администратор enum-devices использует набор конфигурационных файлов. После считывания конфигурационных файлов утилита enum-devices вызывает различные программы распознавания, чтобы определить, какие устройства имеются в системе. Затем идентификаторы устройств сравниваются с идентификаторами, которые указаны в конфигурационных файлах. Если устройство обнаруживается, то
исполняются операторы, которые связаны с этим устройством. Конфигурационные файлы программ распознавания расположены в каталоге /etc/system/enum.

Далее приведен пример кода конфигурационного файла:

device(pci, ven=2222, dev=1111)

uniq(sernum, devc-ser, 1)

driver(devc-ser8250, "-u$(sernum) $(ioport1),$(irq)")


Этот код указывает программе распознавания выполнить следующие действия при обнаружении устройства 1111 производителя 2222:
  1. Установить параметр sernum равным следующему уникальному серийному номеру устройства, начиная с 1.

  2. Запустить драйвер devc-ser8250 с указанными параметрами (программа распознавания устройств задает переменные ioport и irq).

Чтобы распознать новое оборудование или задать дополнительные параметры, можно расширить набор конфигурационных файлов следующими способами:
Перед обработкой программа распознавания считывает и объединяет содержимое всех конфигурационных файлов, которые расположены в выбранном каталоге.

Более подробные сведения о других командно-строковых параметрах и описание синтаксиса конфигурационных файлов см. в enum-devices руководства «Описание программы. Часть 1. Справочник по утилитам» КПДА.10964-01 13 01.

Каталог oem

Производитель комплектного оборудования, который написал собственные драйверы для устройств, может создать каталог oem в каталоге /etc/system/enum для хранения конфигурационных файлов устройств.

Файл overrides

Если необходимо настроить устройства или параметры, которые специфичны для конкретной системной конфигурации, следует создать файл overrides в каталоге /etc/system/enum. Программа распознавания включает этот файл в множество конфигурационных файлов последним и добавляет определения, которые содержатся в нем, в набор, с которым работает администратор enum-devices. Если файл overrides содержит определение, которое имеется в ранее включенном файле, то используется более позднее определение.

Рассмотрим примеры.

device(pci, ven=1234, dev=2000)

device(pci, ven=1234, dev=2001)

requires( $(IONET CMD), )

uniq(netnum, devn-en, 0)

mount(-Tio-net /lib/dll/devn-pcnet.so, "/dev/io-net/en$(netnum)")


device(pci, ven=1234, dev=2002)

device(pci, ven=1234, dev=2003)

Если программа распознавания обнаруживает устройства 2000 и 2001 производителя 1234, то первый фрагмент этого кода задает следующие действия:
Второй фрагмент кода указывает программе распознавания не выполнять никаких действий при обнаружении устройств 2002 и 2003 производителя 1234.

Примечание. При добавлении записей device, которые отключают распознавание устройств, следует убедиться в том, что после этих записей отсутствуют какие-либо операторы действий. Группы операторов действий, которые следуют за одной или несколькими записями устройств, применяются к этим устройствам. Записи устройств, распознавание которых требуется отключить, следует помещать в конец конфигурационного файла overrides.

io-pkt-v4-hc -ptcpip


Если требуется включить протокол IPSec, в файл overrides нужно добавить следующий код:

all

set(IOPKT_CMD, io-pkt-v4-hc -ptcpip ipsec)


Специфичные для системы программы распознавания

Для того чтобы точнее настроить программы распознавания в соответствии с конфигурацией системы, можно создать каталог /etc/host_cfg/$HOSTNAME/system/enum. Если эта структура каталогов существует, сценарий rc.devices указывает программе распознавания считывать конфигурационные файлы из нее, а не из каталога /etc/system/enum.

Примечание. Даже если каталог /etc/host_cfg/$HOSTNAME/system/enum существует, программа распознавания выполняет поиск каталога oem и файла overrides в каталоге /etc/system/enum.

Каталог /etc/host_cfg/$HOSTNAME/system/enum можно легко сконфигурировать следующим образом: скопировать каталог /etc/system/enum (в том числе все его подкаталоги) в каталог /etc/host_cfg/$HOSTNAME/system, а затем приступить к настройке.

Файл /etc/rc.d/rc.sysinit

Сценарий /etc/system/sysinit запускает сценарий /etc/rc.d/rc.sysinit для локальной инициализации системы (рис. 8.4).

Рис. 8.4. Выполнение инициализации с помощью сценария /etc/rc.d/rc.sysinit

Сценарий rc.sysinit выполняет следующие действия.
  1. Запускает безопасный генератор случайных чисел random, который создает случайные числа для шифрования и других задач.

  2. Если каталог /var/dumps существует, то сценарий rc.sysinit запускает утилиту dumper для записи дампов процессов, которые завершились ненормально, в каталог /var/dumps.

  3. Если файл /etc/host_cfg/$HOSTNAME/rc.d/rc.local существует и является исполняемым, то сценарий rc.sysinit запускает его. В противном случае сценарий rc.sysinit запускает файл /etc/rc.d/rc.local, если он существует и является исполняемым. У этого файла не существует версии по умолчанию, поэтому при необходимости ее нужно создать вручную. Более подробные сведения см. в подразд. "Файл rc.local" далее в этом разделе.

  4. Наконец, сценарий rc.sysinit запускает программу tinit. По умолчанию система запускает графическую оболочку Photon, но в случае если создан файл /etc/system/config/nophoton, сценарий rc.sysinit указывает утилите tinit использовать текстовый режим. Более подробные сведения см. в разд. "Утилита tinit" далее в этом разделе.

Файл rc.local

Как описано ранее, сценарий rc.sysinit запускает файл /etc/host_cfg/$HOSTNAME/rc.d/rc.local или /etc/rc.d/rc.local, если он существует и является исполняемым.

С помощью файла rc.local можно конфигурировать запуск системы:
Файл rc.local также позволяет уничтожать работающие процессы с помощью утилиты slay и перезапускать их с другими параметрами, однако такой подход является громоздким. Вместо него для запуска процессов с требуемыми параметрами следует изменить распознавание устройств. Более подробные сведения см. в разд. "Распознавание устройств" ранее в этом разделе.

С помощью файла rc.local пользователь может, к примеру:

/usr/photon/bin/Photon -l '/usr/photon/bin/phlogin -O -Uпользователь:пароль'


Следует иметь в виду, что пароль необходимо поместить в файл rc.local в виде простого текста, однако нужно сказать, что пользователь, который желает пропустить приглашение для входа в систему, вероятно, не заботится о ее безопасности.

Параметр -O утилиты phlogin переводит систему в текстовый режим после завершения сеанса графической оболочки Photon. При отсутствии параметра -O нажатие комбинации клавиш <Ctrl>+<Shift>+<Alt>+<Backspace> приводит к повторному входу в систему.

В качестве альтернативы можно задать запуск графической оболочки Photon командой ph в файле .profile, а затем добавить в файл rc.local следующую команду:

login -f имя_пользователя


Более подробные сведения см. в описании login руководства "Описание программы. Часть 1. Справочник по утилитам" КПДА.10964-01 13 01.

Не следует задавать переменные окружения в сценарии rc.local, поскольку после его выполнения запускается другой командный интерпретатор, и к моменту, когда пользователю предлагается войти в систему, все переменные окружения, которые определены в файле rc.local, перестают существовать.

Примечание. После создания файла rc.local следует с помощью команды chmod +x rc.local установить его атрибут разрешения на исполнение (executable bit).

Утилита tinit

Программа tinit инициализирует терминал следующим образом:
  1. Если указан параметр -p, она запускает графическую оболочку Photon.

  2. В противном случае программа tinit считывает файл /etc/config/ttys и запускает утилиту login или командные интерпретаторы в соответствии с его содержанием.

Обновление драйверов диска

В процессе начальной загрузки ОСРВ Neutrino можно динамически добавлять драйверы блочного ввода/вывода (т. е. драйверы диска), что дает возможность загружаться в системе с новыми контроллерами. Сам по себе механизм прост и не является собственной разработкой компании QNX Software Systems, поэтому сторонние компании могут предлагать улучшенные блочные драйверы, которые не вмешиваются в работу нашей части.

Под обновлением драйвера понимается обновление собственно драйвера (только devb-*) и добавление простого конфигурационного файла. Конфигурационный файл состоит из строк обычного текста (с окончаниями строк в стиле DOS или UNIX) следующего формата:

drvr_name|type|timeout|add_args


Первые три поля являются обязательными. Поля имеют следующее назначение:
Конфигурационному файлу может быть дано имя drivers.cfg, и вы должны добавить обновления на физический носитель, в настоящее время это CD-ROM или USB-диск. В процессе начальной загрузки вначале просматривается корневая область файловой системы, а затем каталог с именем qnxdrvr. Это может помочь уменьшению перегруженности корневой зоны файловой системы.

Исходной может быть любая из поддерживаемых файловых систем. Известно, что работают такие файловые системы:
Если обновление размещено где-то в Интернете в формате zip или tar с сохраненной структурой qnxdrvr, то конечный пользователь просто должен загрузить архив, развернуть его на USB-диск и вставить USB-диск на этапе загрузки.

Применить обновленные версии драйверов можно, нажав клавишу <Пробел> в процессе загрузки, а затем клавишу <F2>. После этого завершится этап начальной загрузки в систему стандартных блочных драйверов, и в исходную файловую систему могут быть загружены обновления. Вам будет выдана подсказка о выборе файловой системы и будет предложено вставить носитель с обновлениями.

Примечание. Если необходимо повторно просканировать разделы (например, для поиска USB-диска, который вы вставили после начала процесса загрузки), нажмите клавишу <F12>.

Когда завершится копирование файлов, появится подсказка о необходимости повторной установки инсталляционного компакт-диска QNX Momentics (если он используется). Тогда произойдет перезапуск блочных драйверов.

Использование такого механизма дает возможность обновить существующие драйверы или просто модифицировать их аргументы (например, спецификацию PCI ID).

Если идет процесс инсталляции, то программа производит копирование обновленных драйверов в каталог /sbin, а конфигурационного файла — в каталог /boot/sys. Одновременно производится также копирование стандартных файлов компоновки в каталог /boot/build (кроме файлов, имеющих отношение к многоядерности), файлам присваиваются имена qnxbase-drvrup.build и qnxbasedma-drvrup.build. Эти файлы затем используются для создания новых файлов образа с именами qnxbase-drvrup.ifs и qnxbasedma-drvrup.ifs в папке /boot/fs. DMA-версия нового файла копируется в каталог /.boot, не-DMA-версия — в каталог /.altboot.

Примечание. Программа инсталляции не выполняет перекомпоновку многоядерных (SMP) образов.

Применение патча обновления драйвера после инсталляции ОСРВ QNX Neutrino

Если вы обновляете или добавляете драйверы к уже существующей системе QNX Neutrino, используя такой механизм, то необходимо вручную скопировать драйверы в правильный каталог, после чего нужно изменить загрузочный образ, чтобы новый драйвер начал работать.

Для изменения загрузочного образа необходимо:
  1. Загрузить компьютер и применить обновления для драйверов.

  2. После окончания загрузки компьютера нужно выполнить указанные далее операции копирования с диска с обновлениями драйверов шага 1:

  1. Скопируйте файл компоновки (обычно это qnxbasedma.build) в файл driverupdate.build.

  2. Отредактируйте файл компоновки и сделайте следующее:

drivers.cfg=/path/drivers.cfg

  1. Создание нового загрузочного образа:

При использовании файловой системы QNX4 выполняются следующие действия:

5.1. В качестве меры предосторожности (чтобы быть уверенным, что загрузится, по крайней мере, один образ) выполните команду:

cp /.boot /.altboot

5.2. Выполните команду mkifs driverupdate.build /.boot

При использовании файловой системы Power-Safe (fs-qnx6.so) выполняется команда: mkifs driverupdate.build /.boot/driverupdate.ifs


При возникновении проблем можно воспользоваться qnxbasedma.ifs или одним из других исходных образов.

Устранение неполадок

Рассмотрим некоторые проблемы, связанные с конфигурированием запуска системы.
Следует убедиться в том, что:

chmod +x /etc/rc.d/rc.local

Вам необходимо: или: Когда вы войдете в отладочную оболочку (fesh), введите команду exit, а затем дождитесь второй подсказки от оболочки. Далее введите команду:

export PATH=/bin:/usr/bin:/sbin:/usr/sbin


Вы можете откорректировать ваш файл
rc.local или убрать его с пути загрузки, чтобы загрузка шла без его участия:

cd /etc/rc.d

cp rc.local rc.local.bad

rm rc.local