Создаем встраиваемую систему на базе Windows
Под встраиваемыми (embedded) системами подразумеваются либо узкоспециальные компьютеры (например, брандмауэр или информационный терминал), либо системы с ограниченной — как правило, обусловленной их малой вычислительной мощностью — функциональностью, например интеллектуальные мобильные телефоны — смартфоны. Это устройства, на которых либо невозможно, либо не нужно поддерживать функционирование полноценной операционной системы.
Компанией Microsoft реализован широкий спектр решений для встраиваемых систем. Это и операционные системы, и соответствующие редакции SQL Server и Office, и программы администрирования. Операционные системы представлены двумя типами — Windows CE и Windows Embedded. Системы семейства Windows CE предназначены для работы на платформах с малой вычислительной мощностью и для управления специализированными программами, ориентированными в первую очередь на предоставление интерфейса конечному пользователю. Это программное обеспечение для карманных компьютеров, телефонов, информационных терминалов и тонких клиентов.
Семейство операционных систем Windows Embedded сочетает в себе всю мощь технологий Windows NT/XP с широкими возможностями гибкой настройки для решения специальных задач. Это системы, предназначенные для выполнения функций либо специализированных серверов, либо интеллектуальных и мощных пользовательских терминалов, для которых недостаточно возможностей, предоставляемых Windows CE.
Сделай сам
Все операционные системы Windows имеют модульную архитектуру, то есть представляют собой не один исполняемый модуль, а состоят из большого количества компонентов, взаимодействующих с железом, друг с другом и пользовательским программным обеспечением. Но значительная часть компонентов и служб не используется для решения тех или иных задач, типичных для конкретного применения. Например, для нормальной работы узкоспециализированного сервера, обслуживающего запросы, полученные по TCP/IP и исполняемого на компьютере, где вместо винчестера применяется, допустим, Flash-диск емкостью 128 Мбайт, не нужен графический пользовательский интерфейс, мультимедийная подсистема и средства взаимодействия с Active Directory. Не требуется и Outlook Express, не нужны экранные шрифты и поддержка принтеров и т. д. Список этих «необязательных элементов» очень велик. Так вот, можно сказать, что Windows Embedded — это подмножество стандартной операционной системы Windows, но созданное для предоставления средств для решения специальных задач.
В состав последней версии пакета, Windows XP Embedded, входят расширенная дополнительными возможностями операционная система Windows XP и Windows XP Embedded Studio — набор инструментальных средств, предназначенных для создания нужной конфигурации операционной системы и установки ее на целевое устройство (target device).
Установка
Рисунок 1. Схема организации Windows XP Embedded Studio |
Расширяемый набор компонентов, из которых строится образ создаваемой специальной операционной системы, находится в репозитариях — файловых хранилищах. А информация об их классификации и связях между компонентами записывается в базу данных, которая поддерживается SQL Server (см. рис. 1). В принципе, конечно, весь пакет может быть установлен на одну рабочую станцию. Но пакет Windows XP Embedded Studio — суть приложение client-server, модули которого можно и разделить, установив базу данных на соответствующий сервер, репозитарии расположить на файл-сервере, а приложения пользователей установить на их рабочие станции. Это обстоятельство нужно учитывать при развертывании пакета. Информация, находящаяся в базе данных и репозитарии компонентов, может совместно использоваться сотрудниками организации, конечно, при наличии соответствующих лицензий.
Нужно понимать, что мы создаем на одном компьютере образ операционной системы, которая, вообще говоря, будет выполняться совсем на другом аппаратном обеспечении. Ситуация, конечно, вполне естественная для встроенных систем, но не совсем привычная для специалистов, которые с системами этого типа ранее не сталкивались.
Пакет Windows XP Embedded Studio поставляется на двух компакт-дисках. При установке на компьютере под управлением Windows 2000 потребуется SP2 или более поздняя версия, а также наличие Windows Installer (второй пункт меню в программе установки, интерфейс которой показан на экране 1). Если же система работает под Windows XP/Server 2003, то дополнительных требований нет. Вставив компакт-диск в компьютер, мы последовательно устанавливаем необходимые утилиты, run-time-версию SQL Server и собственно базу данных.
Экран 1. Программа установки Windows XP Embedded Studio |
Входящий в комплект поставки набор инструментов условно делится на две части. Первая — это утилиты, запускаемые на компьютере, которому предстоит работать под управлением XP Embedded. Здесь мы рассмотрим две утилиты. Программу Target Analyzer, предназначенную для анализа конфигурации аппаратного обеспечения целевого компьютера, и BOOTPREP, которая используется для подготовки загрузочного раздела диска. Ко второй группе относятся собственно инструментальные средства, с помощью которых создается образ операционной системы.
Target Analyzer
Вручную очень сложно определить весь набор драйверов, необходимый для работы системы в выбранной конфигурации. Для сборки информации о компьютере используется утилита tap.exe. Результатом ее работы будет xml-файл, содержащий информацию об обнаруженных устройствах. Расширение у файла не xml, а pmq (пример файла приведен в листинге 1). После создания файла информация из него может быть импортирована в Target Designer.
Параметры командной строки таковы:
TAP.EXE [/o FILENAME] [/r] [/q] [/?]
Все параметры необязательные:
/o — имя выходного файла. Расширение должно быть pmq, иначе оно будет добавлено в конец имени файла. По умолчанию используется имя файла devices.pmq;
/r — изменить имя реестра на ControlSet001 (по умолчанию используется CurrentControlSet);
/q — флаг запрещает вывод информации на экран, а без него информация, записываемая в файл, дублируется на консоли;
/? — вывод на экран подсказки.
Так как XP Embedded поддерживает те же платформы, что и остальные версии Windows (семейство WinCE мы договорились не обсуждать) и не предназначена для запуска обычных приложений типа программы просмотра текстовых файлов, на любой целевой платформе можно запустить какую-нибудь версию Windows, что необходимо для работы Target Analyzer. Разве что придется подсоединить винчестер, монитор и клавиатуру, чтобы создать файл конфигурации. Сам файл конфигурации создается очень быстро.
Создание образа и Target Designer
Теперь, имея информацию о конфигурации устройства, можно приступить непосредственно к созданию образа операционной системы. Это делается с помощью программы Target Designer (см. экран 2). Программа обладает интуитивно понятным интерфейсом. Рабочее поле разделено на четыре панели. На левой выводится иерархическая структура имеющихся компонентов. Далее в середине, также в виде дерева, отображается комплект элементов создаваемой конфигурации. Справа расположено окно свойств. И нижняя, горизонтальная часть экрана отведена для сообщений программ проверки корректности конфигурации и сборки образа системы.
Экран 2. Интерфейс Target Designer |
Доступные компоненты объединяются в группы. При этом один и тот же компонент может входить в разные группы. Это сделано для удобства навигации. Имеются также уже готовые шаблоны, содержащие все необходимые компоненты. Например, элемент TCP/IP with Microsoft Network client and file sharing содержит большое количество компонентов, которые обеспечат нормальное функционирование клиента сети MS Windows.
Для импорта созданного программой Target Analyzer файла *.pmq, описывающего конфигурацию целевого устройства, используется функция Import, доступная из пункта главного меню File. Необходимо выбрать созданный ранее файл и запустить программу импорта. В ходе ее выполнения устройства, для которых не нашлось драйверов, будут помечены значками. Как добавить в систему отсутствующие драйверы, описано ниже.
Компоненты операционной системы так или иначе зависят друг от друга. Созданную конфигурацию необходимо проверить на совместимость выбранных компонентов. Это делается с помощью функции Dependency Check, которая вызывается из пункта главного меню Configuration. В ходе работы Dependency Check проверит созданный образ на непротиворечивость (см. экран 3), после чего автоматически добавляются нужные компоненты. В закладке Tasks, находящейся в нижней части экрана основного окна Target Designer, будут показаны задачи, которые автоматически решить не удалось. Их нужно тщательно изучить и добавить или удалить компоненты вручную. Как правило, это компоненты, не критичные для работы системы. Например, может потребоваться утилита форматирования для разделов NTFS. Но если известно, что операция форматирования разделов осуществляться не будет, этой ошибкой можно пренебречь.
Экран 3. Проверка зависимостей Dependency Check |
Последним шагом разработки является собственно сборка (build) образа системы. Эта функция доступна из пункта главного меню Configuration. Перед сборкой Target Designer предложит еще раз выполнить операцию проверки зависимостей Dependency Check, что никогда не помешает.
Операция сборки может занять продолжительное время, зависящее от ресурсов компьютера, на котором запущена программа, и количества выбранных компонентов (см. экран 4). В результате работы образ системы будет записан в указанную в строке ввода Destination папку.
Экран 4. Создание образа системы |
Разработка собственных компонентов и Component Designer
Целью работы является создание образа системы, установка дополнительного программного обеспечения на которую неудобна, а порой и невозможна. Например, на бестерминальных системах или в конфигурациях, не предусматривающих механизмы запуска программ установки. Следовательно, создаваемый образ системы должен содержать все компоненты, и в том числе не поставляемые в комплекте Windows XP Embedded Studio. Это могут быть драйверы оборудования, не поддерживаемого Microsoft, программное обеспечение независимых производителей или ваши собственные программы.
В основном проблемы возникают при установке драйверов нестандартных устройств. К чему сводится установка драйвера? К записи файлов и созданию записей в системном реестре. Следовательно, для установки непредусмотренного драйвера нужно знать файлы, необходимые для его работы, их расположение в папках целевого компьютера и изменения, которые требуется внести в реестр.
Итак, нам предстоит определить, какие файлы устанавливаются в процессе развертывания программы и как меняется реестр. В этом нам помогут две утилиты — FileMon и RegMon, разработанные в компании System Internals Марком Руссиновичем и Брюсом Когсвелом. Утилиты распространяются бесплатно, их можно загрузить с сайта компании www.sysinternals.com.
Обе программы обладают прекрасным справочным руководством, и описывать здесь работу с ними не имеет смысла. Загрузив утилиты и включив механизм сканирования, нужно произвести установку драйверов. Все записанные файлы и изменения в реестре будут отслеживаться, остается только скопировать их в соответствующие разделы Component Designer.
Замечу, что указанные действия не приводят к нарушению авторских прав производителей драйверов, поскольку программное обеспечение поставляется вместе с купленными устройствами. Изменяется лишь механизм его установки.
Кроме того, в комплект утилит для формирования образа также входит программа eConver.exe, позволяющая создавать компоненты на основании поставляемых с драйверами inf-файлов.
Конечно, кроме драйверов, создаваемые компоненты могут содержать и любые другие программы. Рассмотрим, например, приложение, которое должно загружаться вместо оболочки при запуске системы. Это может потребоваться при разработке специализированного пользовательского терминала. Например, консоли банкомата, справочного терминала и т. д.
Экран 5. Component Designer |
Создадим новый компонент и назовем его, например, MyShell. Как показано на экране 5, каждому компоненту соответствует шесть разделов настроек:
- Group Memberships — здесь указываются группы, в которых будет отображен компонент, в данном случае User Interface;
- Files — очевидно, что в этом разделе указываются файлы, из которых состоит компонент, и каталоги, в которые они должны быть записаны;
- Registry Data — также понятно, что здесь определяются все изменения в реестре, которые необходимо сделать;
- Component or Group Dependences — как уже говорилось выше, корректная работа одних компонентов, как правило, зависит от наличия в системе других. Например, служба поддержки общих файлов (File sharing) не может работать без установленной сетевой инфраструктуры. В данном разделе указываются компоненты, наличие которых необходимо. Эта информация используется функцией Dependency Check в программе Target Designer;
- Build Order Dependency — здесь определяется порядок, в котором зависимые друг от друга компоненты будут создаваться в процессе сборки образа системы;
- Resources — инструмент добавления ресурсов к компоненту. Ресурсами могут быть ярлыки рабочего стола (shortcuts), данные службы и т. д.
В рассматриваемом примере оболочки нужно указать исполняемый файл, который называется MyShell.exe, и лишь один параметр реестра — HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindows NTCurrentVersionWinlogonShell, которому должно быть присвоено значение, соответствующее имени файла — MyShell.exe. Результат работы сохраняется в файле с расширением sld. Остается импортировать созданные компоненты в базу данных, сформировать образ и перенести его на целевое устройство.
Импорт созданных компонентов и Component Database Manager
Результатом работы программы Component Designer является файл с описанием созданных компонентов. Для того чтобы данная информация была доступна из программы Target Designer, в которой создается образ операционной системы, информацию из этого файла необходимо импортировать в базу данных. Перед запуском Component Database Manager требуется выгрузить все программы, работающие с используемой базой, поскольку Component Database Manager работает с базой данных в однопользовательском (монопольном) режиме.
На закладке Database нужно нажать кнопку Import и выбрать файл, который содержит описание созданных в программе Component Designer компонентов. После нажатия кнопки Import (см. экран 6) информация будет импортирована в базу данных.
Далее можно закрыть программу Component Database Manager и загрузить Target Designer. В состав выбранной группы теперь будет входить созданный компонент, и его можно использовать наравне со всеми остальными.
Подготовка диска
Для подготовки диска к работе служит утилита BOOTPREP.EXE. Эта программа подготавливает загрузочный раздел предварительно отформатированного диска. Утилита работает с файловыми системами FAT16, BIGDOS FAT 16 и FAT32.
Параметры командной строки:
BOOTPREP.EXE [/dDrive] [/mMBRBackupFileName] [/b BackupFileName] [/y] [/r] [/iExternalDataFile]
Все параметры являются необязательными:
/dDrive — буква диска без двоеточия, например /dC (по умолчанию диск C);
/mMBRBackupFileName — имя файла, в котором сохраняется резервная копия записи MBR. Если параметр не задан, резервная копия не создается;
/bBackupFileName — имя файла, в котором сохраняется резервная копия загрузочного сектора раздела (PARTITION BOOT SECTOR). Если параметр не задан, резервная копия не создается;
/iExternalDataFile — этот параметр определяет имя файла, из которого берется нестандартное содержание PARTITION BOOT SECTOR;
/r — режим, при котором лишь создаются резервные копии MBR и PARTITION BOOT SECTOR;
/y — отвечать «да» (yes) на все вопросы. Рискованно, но иногда удобно.
Утилита BOOTPREP.EXE записывает код в загрузочный сектор, который читает модуль NTLDR, и передает ему управление.
Отмечу, что XP Embedded можно установить и в раздел NTFS, хотя этого нельзя сделать, используя BOOTPREP.EXE. Такую задачу я решил следующим образом: взял диск и поставил на него обычную систему XP Professional, отформатировав в ней диск в NTFS. Потом отсоединил винчестер, поставил его вторым на другой компьютер и стер все файлы и папки, кроме ntldr и ntdetect. А при копировании образа я не перезаписывал эти два файла. В файле boot.ini, конечно, стоит проверить выбор раздела, из которого будет производиться загрузка, а больше никаких проблем возникнуть не должно.
Установка созданного образа
Теперь остался последний шаг — установка созданного образа операционной системы. Это делается очень просто, непосредственным копированием файлов из выбранной папки (по умолчанию Windows Embedded Images) в корневой каталог выбранного диска.
После того как файлы скопированы, диск подключается к компьютеру и производится первая загрузка, в ходе которой запускается программа First Boot Agent. Она устанавливает драйверы, регистрирует компоненты, формирует системный регистр. Этот процесс много времени занять не должен. После завершения работы First Boot Agent компьютер перезагрузится, и вы окажетесь в том окружении, которое выбрали сами.
Несколько слов в заключение
Я использовал Microsoft Windows XP Embedded Studio для создания образов трех совершенно разных по назначению конфигураций — одной, ориентированной на работу сервера приложений, и двух, предназначенных для выполнения специфического пользовательского приложения. В обоих последних случаях мне пришлось устанавливать драйверы для сложных плат ввода/вывода, не предусмотренных в комплектации Microsoft. Я ни разу не столкнулся с серьезными проблемами, из чего могу сделать лишь один вывод: Microsoft Windows XP Embedded Studio — очень хорошо проработанный, мощный и удобный в работе продукт. Конечно, в этой статье мы рассмотрели далеко не все функции и утилиты Microsoft Windows Embedded Studio. Но был пройден полный технологический цикл, а также представлен ряд приемов, которые, я надеюсь, откроют читателю путь в увлекательный мир встроенных систем.
Александр Эпштейн — независимый консультант и разработчик программного обеспечения. С ним можно связаться по адресу: alex_ep@hotmail.com
Литература
Windows Embedded Studio Architectural Overview.
http://www.microsoft.com/windows/Embedded/xp/
evaluation/tools/overview.asp
Windows XP Embedded
http://www.microsoft.com/windows/Embedded/xp/
WindowsForDevices.com
http://windowsfordevices.com/
Microsoft Windows Embedded Resource Guide.
http://www.mswep.com/resourceguide/