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 выполняет
следующие действия.
-
Запускает утилиту журналирования slogger. Приложения
используют утилиту slogger для регистрации системных сообщений
в журнале. Просмотреть журнал с этими сообщениями можно с
помощью утилиты sloginfo.
-
Затем программа diskboot
запускает утилиту seedres, чтобы считать настройки
BIOS для PnP-устройств и заполнить базу данных
ресурсов модуля procnto.
-
Далее программа diskboot
запускает утилиту pci-bios,
чтобы обеспечить поддержку BIOS для PCI-устройств.
-
После этого программа diskboot
запускает драйвер devb-eide или другие дисковые
драйверы.
Примечание. Параметры для драйвера devb-eide и других
драйверов следует передавать программе diskboot в файле
построения образа.
-
Затем программа diskboot
осуществляет поиск файловых систем для монтирования
(т. е. разделов и компакт-дисков), которое
выполняется в зависимости от типа раздела. Программа
diskboot распознает разделы следующих типов:
-
CD-ROM;
-
типы 1, 4, 6, 11, 12, 14 — операционная
система DOS;
-
тип 131 — файловая система Ext2, если
программе diskboot передан
параметр -e;
-
тип 177, 178, 179: файловая система Power-Safe
— 177 и 178 указывают вторичные разделы;
-
типы 77, 78, 79 — операционная система QNX
4.
Эти разделы
монтируются в каталоги /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, как правило,
пуст, но может содержать команды. Более подробные
сведения см. далее.
-
Запускает расширенный встраиваемый
интерпретатор fesh
(необязательно).
-
Затем программа diskboot
запускает драйвер консоли devc-con-hid
(QNX Momentics 6.3.0 Service Pack 3 или новее)
или devc-con (более старые
версии). Эти драйвера похожи, но devc-con-hid
поддерживает PS2, USB и все другие устройства
человеко-машинного интерфейса.
-
Наконец, программа diskboot
запускает главный сценарий инициализации системы
/etc/system/sysinit.
.diskroot
Программа diskboot использует файл
.diskroot для того, чтобы определить, какой
раздел с операционной системой QNX 4 смонтировать в каталог
/.
Файл .diskroot может
являться:
-
файлом с
нулевой длиной; по умолчанию файл .diskroot
имеет нулевую длину, что означает запрос на точку
монтирования /;
-
однострочным файлом, который задает требуемую
точку монтирования, например:
/home
Строка не
должна начинаться со знака номера (#) или содержать знак
равенства (=). Программа diskboot игнорирует пробельные
символы в начале и в конце строки;
метка = значение
Программа diskboot игнорирует любые
пробельные символы в начале и в конце строки, а также до и
после знака равенства.
Распознаются следующие метки:
mount = /home
options =
ro,noexec
Более подробные
сведения см. в документации по утилите mount и конкретным
драйверам в «Описании программы. Часть 1. Справочник по
утилитам» КПДА.10964-01 13 01, а также в описании
функций mount() и mount_parse_generic_args() в
руководстве по библиотекам Neutrino "Library Reference";
-
desc или description — программа
diskboot распознает и разбирает эти метки, однако в
настоящее время игнорирует информацию, которая
содержится в них;
-
type — программа
diskboot распознает строки qnx4, ext2 и dos, но в
настоящее время игнорирует эту метку. Программа
diskboot определяет тип раздела по его номеру, как
описано в разд. "diskboot" ранее в этом
руководстве.
/etc/system/sysinit
Файл /etc/system/sysinit является
сценарием, который запускает основные системные службы. Для того
чтобы отредактировать этот файл, необходимо войти в систему как
пользователь root.
Примечание. Перед тем как
редактировать сценарий sysinit, рекомендуется
создать резервную копию его последней работоспособной
версии. Следует помнить, что сценарии, которые написаны
пользователем, необходимо делать исполняемыми перед
использованием (см. chmod в «Описании программы. Часть
1. Справочник по утилитам» КПДА.10964-01 13 01).
Сценарий sysinit выполняет
следующие действия.
-
Запускает утилиту slogger, если
она еще не запущена.
-
Запускает администратор каналов pipe.
Этот администратор позволяет передавать выходные
данные одной команды в качестве входных данных
другой команде. Более подробные сведения см. в
подразд. "Перенаправление ввода и вывода"
раздела 4.
-
Затем сценарий sysinit
запускает утилиту mqueue, которая управляет
очередями сообщений и именованными
семафорами (named
semaphores), используя "традиционную" реализацию. Если
вам нужна альтернативная реализация очередей
сообщений, использующая асинхронный обмен сообщениями,
то вам необходимо запустить сервер mq. Дополнительную
информацию см. в справочнике по утилитам.
Примечание.
Начиная с версии 6.3.0 модуль procnto* управляет
именованными семафорами, что обычно делал менеджер mqueue (и
продолжает делать, если обнаруживает, что этого не делает
procnto).
-
Во время первой перезагрузки после установки
операционной системы сценарий sysinit
запускает сценарий /etc/rc.d/rc.setup-once, который
создает различные каталоги и своп-файлы.
-
Далее, присваивает конфигурационной строке _CS_TIMEZONE
значение, которое хранится в файле /etc/TIMEZONE.
Если этот файл не существует, сценарий sysinit
задает часовой пояс UTC (Universal Time
Coordinated — всеобщее скоординированное время,
ранее называвшееся Greenwich Mean Time — время
по Гринвичу). Более подробную информацию см. в
подразд. "Задание часового пояса" раздела 9.
-
Если файл /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.
-
Затем сценарий sysinit
запускает сценарий /etc/rc.d/rc.devices для
распознавания устройств системы (см.
разд. "Распознавание устройств" далее в этом
разделе). В зависимости от обнаруженных устройств
этот сценарий запускает драйвер io-pkt* и другие
различные драйверы.
-
Если файл /etc/system/config/useqnet существует и драйвер io-pkt* работает, сценарий sysinit
инициализирует собственную сеть операционной системы
QNX Neutrino (см. раздел 12 и npm-qnet.so в
«Описании программы. Часть 1. Справочник по
утилитам» КПДА.10964-01 13 01).
-
Далее сценарий sysinit
запускает сценарий инициализации системы
/etc/rc.d/rc.sysinit (см. далее).
-
Если сценарий инициализации системы не
срабатывает, то сценарий sysinit
пытается запустить утилиту sh или fesh (если sh не
срабатывает), чтобы обеспечить работу, как минимум,
командного интерпретатора при отказе остальных
компонентов системы.
Распознавание устройств
Для обнаружения всех известных
аппаратных устройств компьютера и запуска соответствующих
драйверов в операционной системе 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:
-
Установить параметр sernum
равным следующему уникальному серийному номеру
устройства, начиная с 1.
-
Запустить драйвер 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, то первый фрагмент этого кода задает
следующие действия:
-
запустить драйвер io-pkt*.
IONET_CMD представляет собой макрос, который определен в
файле /etc/system/enum/include/net, и задает командную
строку драйвера io-pkt* по умолчанию;
-
записать в параметр netnum следующий по счету
уникальный номер устройства сетевого интерфейса, начиная
с 0;
-
смонтировать драйвер PCNET в
диспетчер устройств io-pkt*.
Второй фрагмент
кода указывает программе распознавания не выполнять никаких
действий при обнаружении устройств 2002 и 2003
производителя 1234.
Примечание. При добавлении записей device, которые
отключают распознавание устройств, следует убедиться в
том, что после этих записей отсутствуют какие-либо
операторы действий. Группы операторов действий, которые
следуют за одной или несколькими записями устройств,
применяются к этим устройствам. Записи устройств,
распознавание которых требуется отключить, следует
помещать в конец конфигурационного файла overrides.
-
Чтобы изменить режим запуска
протокола TCP/IP программой распознавания, необходимо
переопределить основную команду драйвера io-pkt*,
которая задана в файле /etc/system/enum/include/net. По
умолчанию она выглядит следующим образом:
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 выполняет
следующие действия.
-
Запускает безопасный генератор случайных чисел
random, который создает случайные числа
для шифрования и других задач.
-
Если каталог /var/dumps
существует, то сценарий rc.sysinit запускает утилиту
dumper для записи дампов процессов, которые
завершились ненормально, в каталог /var/dumps.
-
Если файл /etc/host_cfg/$HOSTNAME/rc.d/rc.local
существует и является исполняемым, то сценарий
rc.sysinit запускает его. В противном случае
сценарий rc.sysinit запускает файл
/etc/rc.d/rc.local, если он существует и является
исполняемым. У этого файла не существует версии по
умолчанию, поэтому при необходимости ее нужно
создать вручную. Более подробные сведения см. в
подразд. "Файл rc.local" далее в этом разделе.
-
Наконец, сценарий 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 пользователь
может, к примеру:
-
запустить NFS- или CIFS-клиента для
монтирования удаленной файловой системы;
-
запустить утилиту inetd,
чтобы
обеспечить пользователям других компьютеров доступ к
своему компьютеру (см. раздел 13);
-
запустить утилиту lpd и/или отдельный
экземпляр утилиты spooler для
поддержки печати (см. раздел 14);
-
пропустить приглашение для входа в систему при
загрузке графической оболочки Photon, добавив строку:
/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 инициализирует
терминал следующим образом:
-
Если указан параметр -p, она
запускает графическую оболочку Photon.
-
В противном случае программа tinit
считывает файл /etc/config/ttys и запускает утилиту
login или командные интерпретаторы в соответствии
с его содержанием.
Обновление драйверов диска
В процессе начальной загрузки ОСРВ
Neutrino можно динамически добавлять драйверы блочного
ввода/вывода (т. е. драйверы диска), что дает
возможность загружаться в системе с новыми контроллерами.
Сам по себе механизм прост и не является собственной
разработкой компании QNX Software Systems, поэтому сторонние
компании могут предлагать улучшенные блочные драйверы,
которые не вмешиваются в работу нашей части.
Под обновлением драйвера
понимается обновление собственно драйвера (только devb-*) и добавление
простого конфигурационного файла. Конфигурационный файл
состоит из строк обычного текста (с окончаниями строк в
стиле DOS или UNIX) следующего формата:
drvr_name|type|timeout|add_args
Первые три поля являются обязательными. Поля имеют следующее
назначение:
-
drvr_name — имя файла драйвера;
-
type — строка, отображаемая в
процессе загрузки, когда очередь доходит до драйвера;
-
timeout — полное время ожидания
устройств;
-
add_args — любые дополнительные
аргументы, необходимые драйверу (например, blk
cache=512k).
Конфигурационному
файлу может быть дано имя 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:
-
скопируйте новые драйверы devb-*
в каталог /sbin;
-
скопируйте файл drivers.cfg
в какой-нибудь каталог /. Если вы поместите файл в
каталог, который находится на пути поиска mkifs
(например, /sbin, /boot/sys), то mkifs будет
находить его автоматически.
-
Скопируйте файл компоновки (обычно это qnxbasedma.build)
в файл driverupdate.build.
-
Отредактируйте файл компоновки и сделайте
следующее:
-
добавьте имена новых блочных драйверов (devb-*)
после devb-eide;
-
в конце добавьте файл drivers.cfg.
Если файл находится на пути поиска mkifs, то просто
укажите имя файла. В противном случае укажите полный
путь:
drivers.cfg=/path/drivers.cfg
-
Создание нового загрузочного
образа:
• При
использовании файловой системы 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