Теоретические положения. При загрузке ПЭВМ с точки зрения программного обеспечения происходят следующие шаги:При загрузке ПЭВМ с точки зрения программного обеспечения происходят следующие шаги: 1. Центральный процессор начинает выполнять инструкции начального загрузчика, который определяет местоположение образа ОС и передает управление к загрузчику выбранной операционной системы. 2. Загрузчик операционной системы настраивает систему и передает управление микроядру Neutrino и диспетчеру задач (procnto). 3. Модуль procnto загружает дополнительные драйверы и приложения ОС. Первой задачей начального загрузчика является минимальная настройка аппаратного обеспечения для создания окружения, которое позволит выполняться загрузчику ОС и микроядру ОС. Решение данной задачи включает выполнение следующих шагов: · Начать выполнение с нулевого вектора. · Настроить контроллер памяти, что может потребовать настройки выбора режима работы микросхем и/или контроллера шины PCI. · Настроить часы. · Настроить стек для начала выполнения библиотеки начального загрузчика, которая произведет проверку версии и настройку ОС (загрузку образа, позиционирование, настройку и передачу управления). Далее загрузчик ОС настраивает процессор и аппаратуру, определяет доступные ресурсы системы и загружает ядро ОС. Чтобы сохранить широкие возможности конфигурирования QNX, загрузчик ОС имеет возможность программирования следующих компонентов системы: базовый таймером, контроллеров прерываний, контроллеров кэш-памяти и проч. Он также обеспечивает возможность вызова функций из ядра системы для настройки специфических функций аппаратуры. Следует заметить, что загрузчик ОС не настраивает такие параметры как скорости последовательных портов, и не инициализирует внешние устройства, такие как контроллеры Ethernet или контроллеры НЖМД интерфейса EIDE. Как только загрузчик инициализирует систему и помещает информацию о системе в область системной страницы (выделенную область памяти, которую ядро будет исследовать позже), загрузочный код несет ответственность за передачу управления ядру Neutrino и диспетчеру задач procnto, которые производят окончательную загрузку системы. Таким образом, системный загрузчик выполняет следующее: · копирует и, если необходимо, распаковывает образ ОС; · настраивает рад аппаратных компонентов системы; · определяет конфигурацию системы; · начинает выполнение ядра системы. Последний шаг загрузки ОС – загрузка требуемых исполняемых файлов. ОС осуществляет это, читая и обрабатывая информацию, хранимую в загрузочном сценарии – последовательности команд, сохраненных в образе ОС. Формат загрузочного сценария и файла сборки образа его детально приведен в документации по утилите ОС mkifs. Далее приведены некоторые аргументы данной команды и примеры файлов сборки. mkifs – сборка образа встраиваемой ОС по файлу спецификации сборки. mkifs [-l inputline] [-r rootdir] [-v] [buildfile [imagefile]] Аргументы: -l inputline – («эл») обрабатывает строку inputline до того, как начинает интерпретацию файла спецификации сборки. Строку inputline должна быть взята в кавычки. -r rootdir – искать пути по умолчанию в директории rootdir до того как начать их поиск в директории по умолчанию. Если задана переменная окружения MKIFS_PATH, то данный ключ игнорируется. -v – увеличить число сообщений, выдаваемых утилитой в процессе работы (по умолчанию сообщения не выдаются). Пример файла спецификации образа, который предписывает создание простейшей конфигурации ОС с драйвером клавиатуры и командной строкой. [virtual=x86,bios].bootstrap = { startup-bios PATH=/proc/boot procnto } [+script].script = { devc-con -n9 & reopen /dev/con1 [+session] esh } libc.so [data=copy] devc-con esh [type=link] /usr/lib/ldqnx.so.2=/proc/boot/libc.so Пример команды для создания образа системы по данному файлу: «mkifs simple.bld simple.efs». Другой пример – подключение драйвера контроллера EIDE: [virtual="x86,bios +compress"].bootstrap = { startup-bios PATH=/proc/boot procnto } [+script].script = { devc-con -e & devb-eide & reopen /dev/con1 [+session] PATH=/proc/boot esh } libc.so libcam.so cam-disk.so io-blk.so fs-qnx4.so [data=copy] devc-con esh ls devb-eide [type=link] /usr/lib/ldqnx.so.2=/proc/boot/libc.so.2
|