BSP и встраивание Методология встраивания ОС QNX Трофимов Александр SWD Software Ltd.
QNX - ОС жесткого реального времени Параметр \ CPU Pentium II 233 МГц Pentium II 350 МГц PowerPC MTX МГц Время реакции на прерывание, мкс Время постановки потока на выполнение, мкс Время отработки вызова ядра (sched_yield), мкс Переключение контекста между потоками одного процесса, мкс
QNX – ОС жесткого реального времени
QNX – микроядерная ОС Администратор процессов Администратор файловой системы TCP/IP Администратор сети WWW- сервер Стек протоколов Масштабируемость!
QNX и встраивание Гибко масштабируется Сохраняет ключевые свойства даже в минимальных конфигурациях QNX – многоплатформенная ОС QNX – ОС жесткого реального времени Встраиваемость!
Требования к промышленному оборудованию Особые требования к габаритам и энергопотреблению Особые требования к вибро-, термо-, и удароустойчивости Особые требования к конструктивному исполнению
Особенности промышленного оборудования Базируются на различных процессорных платформах (PowerPC, ARM, x86 и т.д.) Обладают ограниченными ресурсами Обычно оснащены flash- носителями данных (DiskOnChip, Compact Flash, Onboard flash chip)
Пакеты поддержки плат (BSP) Модуль первоначального загрузчика IPL Startup модуль Модуль поддержки файловой системы на флеш-носителе PCI сервер Пакет поддержки плат – продукт, содержащий все необходимые компоненты для установки и работы QNX на определенной процессорной плате
Структура BSP Заголовочные файлы и скомпилированные библиотеки Исходные тексты библиотек Исходные тексты модулей для различных архитектур и плат (рабочий каталог BSP)
Рабочий каталог BSP bsp working dir/src/hardware iplstartupflash
IPL Минимальная инициализация оборудования; Загрузка образа ОС из носителя данных в ОЗУ; Определение адреса ОЗУ, по которому размещается загруженный образ ОС; Копирование startup-модуля в OЗУ; Передача управления startup-модулю; IPL размещается на векторе сброса процессора, при передаче ему управления производит следующие действия:
Структура IPL Ассемблерный код - init_myboard.s main() { - main.c image_download_hw() image_scan() image_setup() image_start() } Большая часть кода IPL – это вызовы библиотечных функций IPL library
Рабочий каталог BSP bsp working dir/src/hardware iplstartupflash
Startup-модуль Доинициализация оборудования; Сбор информации о системе и заполнение специальной структуры данных, так называемой system page; Инициализация callout-ов микроядра; Загрузка следующей программы из образа и передача ей управления; Startup-модуль – это самая первая программа в загружаемом образе Neutrino. Она получает управление от IPL и выполняет следующие действия:
Структура Startup-модуля Global variables main() { Call add_callout_array() Argument parsing (Call handle_common_option()) Call init_raminfo() Remove ram used by modules in the image if (virtual) Call init_mmu() to initialize the MMU Call init_intrinfo() Call init_qtime() Call init_cacheattr() Call init_cpuinfo() Set hardware machine name Call init_system_private() Call print_syspage() to print debugging output } Как и в IPL большая часть кода – вызовы библиотечных функций startup-library для опроса конфигурации оборудования, инициализации system page, загрузки в ОЗУ следующего процесса из образа ОС, переключения процессора в защищенный режим
Рабочий каталог BSP bsp working dir/src/hardware iplstartupflash
Драйвер встроенной файловой системы Как менеджер ресурсов драйвер должен обрабатывать все стандартные сообщения Содержит основную логику flash filesystem. Доступ к оборудованию осуществляется при помощи нижележащих компонентов. Находится в библиотеке libfs-flash.a Инициализация и адресация flash устройств Функции записи и стирания для конкретного flash устройства (MTD) Определение размера flash массива
Структура драйвера файловой системы int main(int argc, char **argv) { int error; static f3s_service_t service[]= { …………………………….. }; static f3s_flash_t flash[]= { …………………………….. } /* init f3s */ F3s_init(argc, argv, flash); /* start f3s */ error=f3s_start(service, flash); return error; } Для ряда flash чипов данный код реализован в MTD (libmtd-flash.a) библиотеке из состава BSP Данный код реализуется исходя из особенностей доступа и адресации flash устройства
Библиотека MTD В библиотеке libmtd-flash.a реализованы функции MTD уровня для некоторых flash чипов различных производителей: AMD Intel Sharp Fujitsu Псевдоустройства (например, оперативная память) В общей сложности более 120 устройств
QNX Momentics PE Пакеты поддержки плат В состав комплекта разработчика QNX Momentics PE входит более 17 BSP для более чем 25 процессорных плат; Список доступных BSP постоянно расширяется;
Fastwel CPU686E - Стартовый комплект Комплект разработчика QNX Momentics PE/SE Процессорная плата с предустановленной средой исполнения QNX, разъемы, кабели Литература и инструкции на русском языке, документация, учебные видеоролики Стартовый комплект = готовый набор инструментов для разработки ПО Бесплатно!
BSP и встраивание Практические приемы Трофимов Александр SWD Software Ltd.
Пример 1 – IBM PPC 405GP Walnut IBM PPC 405GP Walnut В состав QNX Momentics входит BSP для IBM PPC 405GP Walnut
Пример 1 – IBM PPC 405GP Walnut IPL модуль с исходными кодами; Startup модуль с исходными кодами; PCI сервер с исходными кодами; Сценарии загрузочных образов системы; Исчерпывающая документация; BSP для IBM PPC 405GP (Walnut) входит в состав QNX Momentics и состоит из следующих компонентов:
Пример 1 – IBM PPC 405GP Walnut Загрузка по протоколу bootp; Загрузка при помощи IPL; Установив QNX вместе с BSP для Walnut на инструментальной машине, можно выбирать различные варианты дальнейшей работы с целевой системой: Из компонентов BSP собирается загрузочный образ целевой системы. На инструментальной системе настраиваются bootp и tftp сервер для передачи образа целевой системе. Загрузка по протоколу bootp; Загрузка при помощи IPL;
Пример 1 – IBM PPC 405GP Walnut Целевая система Инструментальная система Соединение Ethernet Нуль-модемное соединение COM портов Через последовательное соединение конфигурируется ROM Monitor целевой системы; Передается образ по сети;
Пример 1 – IBM PPC 405GP Walnut
Загрузка по протоколу bootp; Загрузка при помощи IPL; Установив QNX вместе с BSP для Walnut на инструментальной машине, можно выбирать различные варианты дальнейшей работы с целевой системой: Загрузка по протоколу bootp; Загрузка при помощи IPL;
Пример 1 – IBM PPC 405GP Walnut В массив прошивается только код IPL, сконфигурированный таким образом, чтобы загружать образ по последовательному соединению по протоколу sendnto; В массив прошивается как IPL, так и загрузочный образ системы. Размер массива накладывает ограничение на размер загружаемого образа в 504K; Walnut оснащен 29f040 совместимым flash массивом емкостью 512K. Изначально в нем прошит код ROM Monitorа. При помощи СППЗУ программатора в массив можно прошить код для загрузки QNX несколькими способами:
Пример 1 – IBM PPC 405GP Walnut Интегрированная среда разработки – QNX IDE позволяет строить загрузочные образы и передавать их на целевую систему
Пример 2 – Fastwel CPU686E Fastwel CPU686E
Пример 2 – Fastwel CPU686E Специалистами SWD Software Ltd. был разработан пакет поддержки Fastwel CPU686E для QNX Neutrino; SE пользователям пакет предоставляется в виде исполняемых модулей, пользователям PE пакет предоставляется вместе с исходными текстами;
Пример 2 – Fastwel CPU686E Fastwel CPU686E построена на платформе x86; Fastwel CPU686E оснащена BIOS; Fastwel CPU686E оснащена 8 Мб NAND Flash массивом; При разработке пакета поддержки Fastwel CPU686E для QNX Neutrino были проанализированы следующие характеристики целевой системы:
Пример 2 – Fastwel CPU686E За основу пакета можно взять наиболее «близкий» к Fastwel BSP для платы Elan SC400; В качестве PCI сервера можно использовать стандартный pci-bios; Startup модуль из BSP для Elan SC400 полностью подходит для Fastwel CPU686E; Доступ к NAND Flash массиву осуществляется через порты ввода-вывода, а не через окно памяти; MTD функции для NAND Flash массива не реализованы в MTD библиотеке BSP; Результаты анализа
Пример 2 – Fastwel CPU686E Что нужно сделать Добавить в MTD библиотеку функции MTD для работы с NAND Flash; Поскольку доступ к Flash осуществляется через порты ввода-вывода, необходимо переписать функции flash services; В IPL реализовать способ считывания образа QNX Neutrino в оперативную память с Flash массива;
Пример 3 – Некая гипотетическая плата В общем случае программную и аппаратную часть системы создают разные группы разработчиков; При выборе аппаратной части необходимо обратить особое внимание на программно- аппаратную совместимость;
Пример 3 – Некая гипотетическая плата Выбор платформы Алгоритм выбора платы Выбирается готовая или разрабатывается готоваяразрабатывается При выборе составляющих особое внимание обратить на их программно-аппаратную совместимость Внимательно ознакомиться с составляющими компонентами платы по вопросам поддержки их в QNX
Пример 3 – Некая гипотетическая плата Мастер-класс Игоря Мазанова, посвященный вопросам «программно- аппаратной совместимости в ОС QNX», состоится 20 сентября 2003 в 13:30 в зале «CARAMEL»
Пример 3 – Некая гипотетическая плата Когда плата уже выбрана Проверить наличие готового BSP для данной платы; Если нет, сравнить выбранную плату с теми, для которых существует готовый BSP, и найти среди них наиболее «близкую»; Взять BSP для «близкой» платы за основу проекта; Проанализировать различия между данной и «близкой» платой; Доработка модулей «близкого» BSP, требующих модификации;
Пример 3 – Некая гипотетическая плата Анализ различий Алгоритм загрузки; Совместимость PCI контроллера; Наличие onboard flash накопителя; Поддержка данного flash накопителя библиотекой MTD; Метод доступа к onboard flash; Оборудование, которое необходимо инициализировать на различных этапах загрузки;
SWD Software Ltd. Официальный дистрибьютор QNX , Санкт-Петербург, пр. Юрия Гагарина 23 тел.: (812) тел.: (812) факс: (812) web: Спасибо!