Управление запуском ЗОСРВ «Нейтрино»

Управление процессом загрузки вашего компьютера

Статья включает:

Что происходит при загрузке?
Загрузка образа ЗОСРВ «Нейтрино»
Работа с таблицей разделов файловой системы
Таблица разделов MBR
Таблица разделов GPT
Работа с разделами файловой системы
Файловая система Power-Safe
Файловая система QNX4
Программа diskboot
.diskroot
/etc/system/sysinit
Распознавание устройств
Каталог oem
Файл overrides
Специфичные для системы программы распознавания
Файл /etc/rc.d/rc.sysinit
Файл rc.local
Утилита tinit
Обновление драйверов диска
Устранение неполадок

Подробности процесса запуска системы зависят от оборудования компьютера. В этом разделе приводится лишь общее описание запуска операционной системы ЗОСРВ «Нейтрино».


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

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

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

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

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

8_1.png
Рисунок 1. Загрузка операционной системы ЗОСРВ «Нейтрино»

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

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

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

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

8_2.png
Рисунок 2. Загрузка ЗОСРВ «Нейтрино» в системе с архитектурой x86 с использованием BIOS

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

Процесс загрузки операционной системы ЗОСРВ «Нейтрино» с диска более сложен, а инициализация системы – еще сложнее. После того как BIOS выберет загрузку с жесткого диска, вызывается первичный загрузчик (который иногда называют загрузчиком раздела). Этот загрузчик "индифферентен" по отношению к операционной системе, т.е. способен загрузить любую операционную систему. Загрузчик, который устанавливается ЗОСРВ «Нейтрино», отображает следующее сообщение:

Press F1-F4 to select drive or select partition 1,2,3? 1 (Нажмите клавишу F1-F4 для выбора диска или раздела 1, 2, 3? 1)

После короткой паузы загружается операционная система, которая расположена в выбранном разделе. Эта загрузка выполняется вторичным загрузчиком. Записать его на диск можно с помощью утилиты dinit или mkqnx6fs в зависимости от типа файловой системы.

Загрузка образа ЗОСРВ «Нейтрино»

При выборе раздела с ОС запускается вторичный загрузчик (который иногда называют загрузчиком операционной системы). Этот загрузчик специфичен для операционной системы ЗОСРВ «Нейтрино» и располагается в соответствующем разделе жесткого диска. При использовании таблицы MBR (в BIOS-системах) загрузчик размещается в файловой системе fs-qnx6.so или fs-qnx4.so. При использовании таблицы GPT (в UEFI-системах) загрузчик размещается в отдельном разделе с файловой системой FAT32.

Работа с таблицей разделов файловой системы

Далее приводятся общие сведения по созданию таблиц разделов.

Таблица разделов MBR

Таблица разделов Master Boot Record (MBR) используется в BIOS-системах для разметки разделов жестких дисков. Для ее модификации используется утилита fdisk.

Рассмотрим процедуру разметки пустого жесткого диска. Первым делом следует очистить следы предыдущей таблицы разделов. Если имеется GPT таблица, удалить ее можно с помощью команды z интерактивного режима утилиты gdisk:

gdisk /dev/hd0

Следующее сообщение сигнализирует о том, что GPT таблица не была найдена:

Error: bad GPT header size -2094167194 Error: GPT header verification gdisk: gpt_header_read() can't read GPT header information

В этом случае для удаления разделов достаточно воспользоваться утилитой fdisk (в случае, если используется таблица MBR):

fdisk /dev/hd0 delete -a sleep 1 mount -e /dev/hd0

или выполнить команду:

dd if=/dev/zero of=/dev/hd0 bs=1024 count=64

Создание нового раздела размером 24Gb для файловой системы Power-Safe для последующей установки ОС:

fdisk /dev/hd0 add -t 177 24G sleep 1 mount -e /dev/hd0

Форматирование рабочего раздела операционной системы:

mkqnx6fs -q /dev/hd0t177

Установка первичного загрузчика может быть произведена командой:

fdisk /dev/hd0 loader

Таблица разделов GPT

Таблица разделов GUID Partition Table (GPT) является частью стандарта EFI (Extensible Firmware Interface). Для модификации таблицы разделов данного типа используется утилита gdisk.

В таблице GPT каждый разделы идентифицируются уникальными UUID. Рассмотрим процедуру разметки пустого жесткого диска. Первым делом следует очистить следы предыдущей таблицы разделов. Если уже имеется GPT таблица, удалить ее можно с помощью команды z интерактивного режима утилиты gdisk:

gdisk /dev/hd0

Следующее сообщение сигнализирует о том, что GPT таблица не была найдена:

Error: bad GPT header size -2094167194 Error: GPT header verification gdisk: gpt_header_read() can't read GPT header information

В этом случае для удаления разделов достаточно воспользоваться утилитой fdisk (в случае, если используется таблица MBR) или выполнить команду:

dd if=/dev/zero of=/dev/hd0 bs=1024 count=64

Создание новой таблицы разделов в формате GPT (вывод команд ориентировочный):

gdisk /dev/hd0 create gdisk /dev/hd0 show Dev Num Start End Size (Mb) Type Min Sector: 2048 Max Sector: 234441614

Создание загрузочного EFI раздела размером, например, 198 Mb (для файловой системы FAT32):

gdisk /dev/hd0 add -n1 -c 2048,407680 -t efi

Создание раздела для файловой системы Power-Safe для последующей установки ОС:

gdisk /dev/hd0 add -n2 -c 407681,134441614 -t qnx6

Далее следует перечитать таблицу разделов, чтобы отразились только что созданные разделы:

mount -e /dev/hd0 ls /dev/hd0.* /dev/hd0.072f5f61-5287-c84f-8012-d62ff149a254 /dev/hd0.099bbac7-0434-2949-b52d-ac6e2b6ad390

В данный момент нет возможность определить какому разделу соответствует UUID. При форматировании следует обращать внимание на размеры разделов:

gdisk /dev/hd0 show

Форматирование загрузочного и рабочего разделов операционной системы:

mkdosfs -F 32 -L BOOT -c 512 \ /dev/hd0.099bbac7-0434-2949-b52d-ac6e2b6ad390 Format complete: FAT32 (512-byte clusters), 199679 kB available. mkqnx6fs /dev/hd0.072f5f61-5287-c84f-8012-d62ff149a254 Format fs-qnx6: 67016948 blocks, 1047144 inodes, 16 groups

Установите первичный загрузчик ipl-uefi в загрузочный EFI раздел диска, примонтировав соответствующий раздел:

mount -t dos /dev/hd0.099bbac7-0434-2949-b52d-ac6e2b6ad390 /uefi-boot mkdir /uefi-boot/efi mkdir /uefi-boot/efi/boot cp -V ${KPDA_TARGET}/x86/boot/sys/ipl-uefi /uefi-boot/efi/boot/ sync umount /uefi-boot

После этого следует установить в файловую систему Power-Safe операционную систему.

Работа с разделами файловой системы

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

Файловая система 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 -b 512 вероятнее всего не будет пригодной для загрузки. При использовании блоков размером 1 Кбайт (это значение по умолчанию) «область видимости» составляет 1 Гбайт.

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

Unsupported BIOS
Данная BIOS не поддерживает расширения INT13 LBA.
Missing OS Image
Файловая система не является fs-qnx6.so либо каталог .boot пуст.
Invalid OS Image
Выбранный файл не является загружаемым образом x86.
Disk Read Error
При чтении диска возникла физическая ошибка ввода-вывода.
Ram Error
При копировании образа возникла физическая ошибка ОЗУ.

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

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

dinit -h /dev/hd0t77

Вторичный загрузчик выводит следующее сообщение:

Hit Esc for .altboot

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

Если происходит ошибка, вторичный загрузчик выводит один из перечисленных далее символов и процесс загрузки останавливается:

S
сигнатура системы не обнаружена;
D или ?
произошла ошибка при чтении диска.

Единственное различие между образами, которые устанавливаются по умолчанию, заключается в том, что образ /.boot осуществляет прямой доступ к памяти EIDE-контроллера, а образ /.altboot — нет.

В каталоге /boot/build/ находятся следующие файлы построения образа:

qnxbasedma.build
файл построения образа .boot (см. приложение);
qnxbase.build
файл построения образа .altboot.

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

mv /.altboot oldaltboot mv newboot /.altboot

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

cp /.altboot oldaltboot cp newboot /.altboot


Note: При модификации загрузочного образа рекомендуется скопировать работоспособный образ из файла /.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, которая предназначена для загрузки операционной системы ЗОСРВ «Нейтрино» на дисковых компьютерах. Полное содержимое файла qnxbasedma.build см. в приложении.


Note:
  • Можно передавать параметры программе diskboot (для управления загрузкой системы), а также драйверам устройств. В приведенном ранее файле построения образа программа diskboot передает параметр -n4 драйверу devc-con, чтобы задать число виртуальных консолей.
  • Можно настроить компьютер так, чтобы программа diskboot не использовалась. Пример соответствующего файла построения образа см. в приложении.
  • Утилита diskboot позволяет обновлять драйвера devb-*. Подробнее см. пункт "Обновление дисковых драйверов" далее в этой статье.

При запуске программа diskboot отображает следующее приглашение:

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

Большая часть этих параметров предназначена для отладочных целей. Программа diskboot выполняет поиск раздела операционной системы ЗОСРВ «Нейтрино», чтобы смонтировать его, а затем запускает последовательность сценариев для инициализации системы (рис. 3).

8_3.png
Рисунок 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 или другие дисковые драйверы.

    Note: Параметры для драйвера devb-eide и других драйверов следует передавать программе diskboot в файле построения образа.

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

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

  6. запускает расширенный встраиваемый интерпретатор fesh (необязательно).
  7. затем программа diskboot запускает драйвер консоли devc-con-hid;
  8. наконец, программа diskboot запускает главный сценарий инициализации системы /etc/system/sysinit.

.diskroot

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

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

"mount или mountpt"
каталог, в который выполняется монтирование. Пример:

mount = /home
"opt или options"
параметры монтирования, общие или специфичные для конкретной точки монтирования. Параметры отделяются друг от друга запятыми. Пример:

options = ro,noexec

Более подробные сведения см. в документации по утилите mount, а также в описании функций mount() и mount_parse_generic_args();
"desc или description"
программа diskboot распознает и разбирает эти метки, однако в настоящее время игнорирует информацию, которая содержится в них;
"type"
программа diskboot распознает строки qnx4, ext2 и dos, но в настоящее время игнорирует эту метку. Программа diskboot определяет тип раздела по его номеру, как описано в разделе "diskboot" ранее в этой статье.

/etc/system/sysinit

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


Note: Перед тем как редактировать сценарий sysinit, рекомендуется создать резервную копию его последней работоспособной версии. Следует помнить, что сценарии, которые написаны пользователем, необходимо делать исполняемыми перед использованием (см. chmod).

Сценарий sysinit выполняет следующие действия.

  1. запускает утилиту slogger, если она еще не запущена;

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

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

  4. во время первой перезагрузки после установки операционной системы сценарий sysinit запускает сценарий /etc/rc.d/rc.setup-once, который создает различные каталоги и своп-файлы.

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

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

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

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

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

    rtc -l hw

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

  7. после установки часов сценарий sysinit записывает в переменную окружения HOSTNAME имя хоста системы. Сценарий sysinit определяет это имя с помощью команды hostname или считывает его из файла /etc/HOSTNAME, если команда hostname не срабатывает;

    Note: Имя хоста может состоять только из букв, цифр и символов дефиса, а также не должно начинаться и заканчиваться символом дефиса. Более подробные сведения см. в RFC 952.

  8. затем сценарий sysinit запускает сценарий /etc/rc.d/rc.devices для распознавания устройств системы (см. раздел "Распознавание устройств" далее в этой статье). В зависимости от обнаруженных устройств этот сценарий запускает драйвер io-pkt-* и другие различные драйверы.
  9. если файл /etc/system/config/useqnet существует и драйвер io-pkt-* работает, сценарий sysinit инициализирует собственную сеть операционной системы ЗОСРВ «Нейтрино».

  10. далее сценарий sysinit запускает сценарий инициализации системы /etc/rc.d/rc.sysinit (см. далее в этой статье).

  11. если сценарий инициализации системы не срабатывает, то сценарий sysinit пытается запустить утилиту sh или fesh (если sh не срабатывает), чтобы обеспечить работу, как минимум, командного интерпретатора при отказе остальных компонентов системы.

Распознавание устройств

Для обнаружения всех известных аппаратных устройств компьютера и запуска соответствующих драйверов в операционной системе ЗОСРВ «Нейтрино» используется программа распознавания устройств (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.

Каталог oem

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

Файл overrides

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

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

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


Note: Даже если каталог /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 для локальной инициализации системы (рис. 4).

8_4.png
Рисунок 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 пользователь может, к примеру:

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


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

Утилита tinit

Программа tinit инициализирует терминал следующим образом:

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

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

В процессе начальной загрузки ЗОСРВ «Нейтрино» можно динамически добавлять драйверы блочного ввода/вывода (т.е. драйверы диска), что дает возможность загружаться в системе с новыми контроллерами.

Под обновлением драйвера понимается обновление собственно драйвера (только 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>. После этого завершится этап начальной загрузки в систему стандартных блочных драйверов, и в исходную файловую систему могут быть загружены обновления. Вам будет выдана подсказка о выборе файловой системы и будет предложено вставить носитель с обновлениями.


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

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

Использование такого механизма дает возможность обновить существующие драйверы или просто модифицировать их аргументы (например, спецификацию 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.


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

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

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

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




Предыдущий раздел: перейти