Технология быстрой загрузки QNX Fastboot для процессорных модулей на базе Intel Atom


PDF версия

В статье рассматривается технология QNX Fastboot — загрузка операционной системы жесткого реального времени QNX на платах на базе Intel Atom без использования BIOS.

Загрузка с помощью BIOS

Как правило, компьютеры, построенные на базе процессоров с архитектурой x86, используют при загрузке BIOS (Basic Input/Output System — базовая система ввода/вывода) — набор программ, которые выполняются при включении питания. BIOS отвечает за начальную инициализацию оборудования, поиск ресурсов и, в конечном итоге, передаёт управление на загрузочное устройство, например — жесткий диск. Кроме этого, BIOS выполняет дополнительный код расширений (BIOS extensions), хранящихся на различных устройствах, например на сетевой или видеоплате.
Использование BIOS позволяет достигать гибкости при изменении аппаратных составляющих системы — можно безболезненно добавить (или убавить) количество оперативной памяти, установить другую сетевую или видеоплату и т.д. Однако такая гибкость достигается за счет времени, которое тратится на поиск, настройку и выделение ресурсов оборудованию. Встраиваемые системы обычно имеют чётко определённый и заранее известный набор аппаратных ресурсов, и достаточно большая часть кода BIOS, выполняемого при загрузке, оказывается избыточной, приводя к потере драгоценных секунд.
Конечно, для встраиваемых систем производят различные оптимизации BIOS для сокращения времени загрузки. Например, в статье [1] приводится ряд рекомендаций разработчикам BIOS, выполнение которых позволяет сократить время работы BIOS с 11,66 до 1,65 с на отладочной плате на базе Intel Atom. Однако за редким исключением (проект coreboot и т.д.), исходный код BIOS закрыт и принадлежит различным компаниям, и такие доработки выглядят малореальными без заинтересованности со стороны этих компаний.

QNX Fastboot

QNX предлагает принципиально другой подход к загрузке плат на базе процессора Intel Atom и чипсета US15W Poulsbo — без использования BIOS. Такой вариант загрузки QNX получил название Fastboot (быстрая загрузка). В случае использования технологии Fastboot при включении питания управление получает не BIOS, а первичный загрузчик QNX — IPL (Initial Program Loader), который не выполняет объемного кода по поиску и инициализации всего оборудования, а осуществляет только самые минимальные, необходимые для загрузки действия (например, настройку контроллера памяти), делая таким образом загрузку системы x86 в чём-то похожей на загрузку системы с процессорами, например ARM или MIPS, без применения сторонних загрузчиков. Таким образом, технология QNX Fastboot позволяет значительно сократить время загрузки благодаря тому, что не используется BIOS. Этот метод очень хорошо подходит для встраиваемых систем, которые выполняют одну или нескольких задач [2].
При использовании Fastboot образ QNX, включающий ядро ОС, набор драйверов, пользовательских утилит и совмещённый с первичным загрузчиком IPL, замещает собой BIOS во флэш-памяти.
Для хранения BIOS на платах Intel Atom используется флэш-память NOR с интерфейсом Intel FWH. Хранение образа QNX в такой линейно-адресуемой флэш-памяти имеет следующий ряд особенностей.
– С одной стороны, это ограничение на размер образа, который не может быть больше объёма памяти микросхемы. Впрочем, QNX как модульная и встраиваемая ОС прекрасно справляется с таким ограничением — 1 Мбайт достаточно для базового минимального набора драйверов. При необходимости можно запустить недостающие драйверы с носителя большего объёма или по сети.
– С другой стороны, использование флэш-памяти NOR для хранения образа позволяет быстрее и проще получить доступ к образу QNX, по сравнению, например, с хранением образа на жёстком или USB-диске.

Процесс загрузки QNX Fastboot

Рассмотрим процесс загрузки системы при использовании технологии QNX Fastboot (см. рис. 1). При включении питания или перезагрузке и передаче управления по вектору сброса процессора выполняется код первичного загрузчика QNX IPL.

Рис. 1. Процесс загрузки Fastboot

Сначала загрузчик IPL переводит процессор в защищённый режим, инициализирует контроллер памяти, настраивает кэш. Безусловно, он не может сделать это быстрее, чем BIOS, поэтому на данном этапе значимой разницы нет.
На следующем этапе IPL устанавливает таблицу прерываний и производит первичную инициализацию PCI-шины. В отличие от BIOS, которая назначает прерывания автоматически, для Fastboot номера прерываний для различных источников заранее известны и прописываются в исходном коде. Такой подход накладывает ответственность на разработчика по созданию таблицы прерываний, но позволяет значительно сократить время, которое было бы потрачено при автоматическом поиске и назначении прерываний.
Для PCI-шины при быстрой загрузке производится только минимально необходимое конфигурирование. Выделение ресурсов происходит по мере обращения драйвера к устройствам на PCI-шине при уже запущенной и работающей ОС QNX. Реализация такой схемы позволяет сэкономить время на этапе загрузки, но для этого требуется специальный PCI-сервер — PCI-Poulsbo, который поставляется в составе BSP (Board Support Package — пакет поддержки плат) для плат на базе Intel Atom. PCI-сервер берет на себя всю ответственность за выделение ресурсов, поэтому взаимодействие с PCI для разработчика не изменяется и доработки существующих драйверов не требу­ется.
В IPL также произведён ряд оптимизаций: во-первых, раннее включение технологии Intel SpeedStep, позволяющее немного сократить общее время загрузки. Убраны дополнительные проверки контрольных сумм образа QNX, поскольку он хранится в надежной NOR-памяти и в этих проверках нет острой необходимости. Кроме того, минимизирован вывод отладочный информации, IPL не инициализирует графический контроллер, и для вывода применяется COM-порт.
На следующем этапе IPL копирует системный модуль startup из флэш-памяти в оперативную и передаёт на него управление. Системный модуль startup отвечает за дальнейшую настройку аппаратуры, он продолжает инициализацию системы: устанавливает объём используемой оперативной памяти, задаёт прерывания, установленные в таблице IPL, задаёт регион памяти, который будет использован интегрированным графическим контроллером и т.д. От разработчика требуется только правильно указать объём и конфигурацию используемой оперативной памяти, если эти значения отличаются от уже заданных в BSP.
Дальнейшая последовательность загрузки стандартна для QNX — модуль startup копирует образ QNX, включающий ядро и пользовательские программы, в оперативную память и передает управление на ядро. После запуска ядра выполняется системный загрузочный сценарий, запускаются все необходимые драйверы и пользовательские программы.
Итак, во время загрузки системы не используется объёмный и длительный по времени исполнения код поиска и настройки оборудования, а выполняется только минимально необходимая конфигурация. Часть настройки аппаратуры, которая может быть выполнена позже, например инициализация графического контроллера и выделение ресурсов PCI, осуществляется по мере обращения к аппаратуре. За счёт такого подхода удаётся сократить время загрузки системы на QNX до считанных секунд, а критичные по времени доступа приложения могут получить управление уже через миллисекунды после включения питания. В интернете доступна видеодемонстрация технологии Fastboot на плате Kontron nanoETXexpress-SP с запуском простого графического приложения OpenGL, которая позволяет наглядно оценить значительное сокращение времени загрузки ОС.

Поддержка оборудования

В настоящее время доступны пакеты BSP с поддержкой технологии быстрой загрузки QNX Fastboot для следующих плат на базе Intel Atom (см. рис. 2):
– Kontron nanoETXexpress-SP;
– LiPPERT CoreExpress;
– Advantech SOM-6760.

Рис. 2. Процессорные платы на базе Intel Atom, поддерживающие технологию QNX Fastboot

Расширение спектра оборудования с поддержкой Fastboot — комплексная задача, которая решается при взаимодействии производителей оборудования и разработчиков программного обеспечения.
Пакеты BSP обеспечивают полную проверенную совместимость оборудования и ПО операционной системы. В состав BSP входит первичный загрузчик Fastboot IPL, модуль startup, драйверы для сетевого, графического, звукового, последовательного (UART) и USB-контроллеров, PCI-сервер, драйвер для карт памяти SD и флэш-памяти, утилиты для работы с SMBus. Кроме того, пользователям ОСРВ QNX доступны все имеющиеся в QNX драйверы, программы и технологические расширения операционной системы.
Указанные платы можно также использовать с привычной системой BIOS без технологии Fastboot. Для этого в составе BSP имеются примеры файлов построения образа, в которых используются стандартные для x86 модули — startup-bios и pci-bios.

Литература
1. Mike Kartoz, Pete Dice, and Gabe Hattaway, Intel Corporation. Fastboot BIOS: An Investigation of BIOS Speed Enhancement Featuring the Intel Atom Processor (September 2008)//http://download.intel.com/design/intarch/papers/320497.pdf.
2. Ben Biron. Fastboot Techniques for the x86 Architecture//www.qnx.com/download/feature.html?programid=19382.
3. Википедия.

Оставьте отзыв

Ваш емейл адрес не будет опубликован. Обязательные поля отмечены *