Встраиваемые системы / Обзор Windows XP Embedded
Хочу немного рассказать о Windows XP Embedded (XPe), т.к. на Хабре не нашлось статей по теме.
Что же это вообще такое?
Windows XP Embedded — специальная версия Windows XP Professional, предназначенная для применения в тонких клиентах, банкоматах, платёжных терминалах, игровых автоматах и тому подобном.
Под катом — общий обзор системы, описание инструментов разработчика и цикла разработки.
Экологическая ниша системы
Действительно, зачем было создавать очередной велосипед, если для встраиваемых систем есть Windows CE, а для смартфонов — Windows Mobile?
Возможные сценарии применения:
- Целевое устройство должно интегрироваться в существующую инфраструктуру Windows (работа в домене, поддержка групповых политик и т.п.).
- У вас уже есть приложение для Windows XP (да ещё и написанное под .NET), портирование которого под, к примеру, Win CE нерентабельно.
- На целевом устройстве требуется поддержка мультимедийных технологий (полноценные версии DirectX, Internet Explorer, Windows Media Player).
- У вас уже есть аппаратная плаформа (например, промышленный компьютер x86), драйвера для компонентов которой есть только для «большой» Windows.
- Вам нужна загрузка ОС с компакт-дика\USB-flash\CompactFlash или с помощью PXE, прозрачное блокирование записи (см. ниже EWF, FBWF), принудительная загрузка ОС из hibernate (см. ниже HORM), тиражирование образа ОС (по сути — Windows XP OPK, но более автоматизированный), собственный Shell.
Целевому устройства не хватает изюминки.
Очевидно, что этот список не является полным, однако основные моменты в нём присутствуют.
Цикл разработки
В общем виде выглядит так: создание файла с описанием устройств целевой платформы (Target Analyzer) — сканирование БД компонентов на предмет наличия подходящих драйверов (Component Designer, Target Designer) — [опционально] импорт недостающих драйверов в БД компонентов (Component Designer) — создание проекта, разрешение зависимостей (Target Designer) — создание мастер-образа, тиражирование | установка образа на целевую платформу.
А теперь — что же такое все эти дизайнеры и анализаторы:
Общая теория
. Windows XP Embedded — это встраиваемая компонентная операционная система на базе Windows XP Professional Edition…
Что значит — компонентная? Инструментарий разработки образов (fingerprint) ОС XPe представляет собой базу компонентов и IDE для работы с этой базой.
База компонентов состоит из файла БД, содержащий описание компонентов (название, зависимости, настройки реестра и пр.) и репозиторий, содержащий файлы компонентов. Поддерживаются СУБД MSDE и Microsoft SQL Server 2005 (в том числе и Express Edition), Microsoft SQL Server 2008 не поддерживается (актуально для Windows XP Embedded SP3, насчёт Windows XP Embedded Standard сказать не могу).
Компоненты — набор примитивов, каждый из которых может содержать:
- Файлы.
- Настройки реестра.
- Список зависимостей от других или список конфликтующих компонентов.
- Скрипты на VB для настройки параметров компонента (используются, в основном, в системных компонентах, т.к. документацию по написанию скриптов Microsoft держит в секрете, хотя, вполне возможно, что я её просто не там искал).
- «Действия» — произвольные команды (запуск программ, скриптов) выполняемые во время установки компонента.
- Настройки служб, регистрация DLL и т.д. и т.п.
Если не вдаваться в подробности, то довольно похоже на пакеты в Linux (deb, rpm).
Инструментарий
Target Analyzer
Программа, предназначение которой — определить оборудование аппаратной платформы (видеокарту, звуковую карту, процессор, накопитель и т.д.). На выходе — xml-файл (с расширением pmq), содержащий описание каждого из найденных устройств (основные характеристики — название устройства, Vendor ID, Device ID), который будет использован как каркас для построения образа ОС.
Существует в двух версиях:
- TA.exe (Target Analyzer) — программа, работающая под управлением MS-DOS (и, вероятно, FreeDOS, не проверял). Опрашивает BIOS (поправьте меня, если я не прав) на предмет подключённых устройств. Известные проблемы — не всегда может определить всё оборудование, плохо определяет накопители.
- TAP.exe (Target Analyzer Probe) — программа, работающая под управлением Windows (PE, Pro). Для определения устройств сканирует реестр. Справляется заметно лучше TA.
После того, как список устройств получен, нужно сравнить его с содержащимися в БД XPe драйверами и добавить недостающие. Всё это можно сделать с помощью Component Designer:
Component Designer
Component Designer — средство для создания собственных компонентов, в том числе драйверов.
Несколько компонентов в Component Designer
После импорта, устройства, драйвера для которых есть в базе, будут отображены в качестве компонентов, каждый со списком зависимостей (системных компонентов), что позволяет создать базовый образ ОС (ядро+минимальный набор необходимых файлов) автоматическим разрешением зависимостей при конструировании образа в Target Designer.
Если же, устройства в БД компонентов не обнаружено — Component Designer умеет парсить inf-файлы, создавая из них компоненты. Для этого зачастую приходится потрошить инсталлятор драйвера для Windows XP от производителя. Однако, это далеко не всегда срабатывает, например, драйвера интеловской графики, по-видимому содержали не все действия для установки драйвера в inf-файле, соответственно — XPe использовал видеодрайвер по-умолчанию, который не поддерживает разрешение выше 640×480, что очень меня огорчало. Справедливости ради, стоит сказать, что Intel выпустили бесплатную утилиту IEGD, позволяющую генерировать драйвера для встраиваемых систем.
После того, как Component Designer закончил разбор inf, нужно внести свежесозданный компонент в БД компонентов. Для этого используем Component Database Manager:
Component Database Manager
Component Database Manager — средство для управления содержимым базы компонентов. Позволяет импортировать и удалять компоненты.
База компонентов
Когда мы убедимся в том, что драйвера всех устройств целевой платформы содержатся в БД XPe, можно создавать проект образа ОС. Для этого используется Target Designer:
Target Designer
Target Designer — IDE для проектирования образа ОС. Добавляем и удаляем компоненты, можно отредактировать настройки компонента «на лету», без внесения изменений в общую базу, есть возможность автоматического разрешения зависимостей.
Открытый проект в Target Designer
Как уже было сказано выше, построение образа начинается со списка компонентов-описаний устройств. Итак, список загружен, нажимаем кнопку «Разрешение зависимостей». Target Designer сканирует зависимости и выводит список требуемых компонентов (в настройках можно поставить крыжечку «Разрешать зависимости автоматически», это позволяет не добавлять компоненты из зависимостей руками). После того, как все зависимости от оборудования будут разрешены, начинается доводка образа — добавление некритичных компонентов (Internet Explorer, Windows Media Player, .NET Framework и т.п.)
Когда все необходимые компоненты добавлены, запускаем сборку — в заданной директории будет создан установочный образ (обычная директория с файлами и вложенными директориями) — полуфабрикат. После создания этого образа, его нужно скопировать на активный раздел накопителя целевого устройства, после чего будет произведено развёртывание образа, и только после этого установка завершится.
Примечание: в отличие от Windows XP, XPe не содержит встроенных инструментов для разметки диска во время установки. Диск должен быть создан, помечен активным и отформатирован внешними утилитами (мне пришлось использовать LiveCD с Linux, как бы смешно это ни звучало). В установочный комплект входит диск Windows PE, но я так и не выяснил, можно ли изменять его и использовать для развёртывания XPe (лицензии Microsoft это тема для отдельного поста).
На этом я закончу вступление. Не знаю, насколько полезным и информативным оно вышло, в планах написать больше, про технологии, специфичные для встраиваемых систем и опыт внедрения.
P.S.: Нет, это не попытка шантажа, это проба пера. Если эта тема кого-то интересует, я с удовольствием продолжу. Также, буду рад любой конструктивной критике.
Полезные ссылки
Данная статья не подлежит комментированию, поскольку её автор ещё не является полноправным участником сообщества. Вы сможете связаться с автором только после того, как он получит приглашение от кого-либо из участников сообщества. До этого момента его username будет скрыт псевдонимом.
Windows 10 IoT Enterprise — секреты настройки для Embedded-сценариев
Предисловие
Наверно Вы видели банкоматы, информационные киоски, рекламные панели, на которых отображается ошибка или уведомление системы. Если Вы не видели подобные общественные устройства «живьем», то Вы легко сможете найти подобные фотографии в интернете если поищете картинки по словам «банкомат ошибка windows». А однажды уведомление системы появилось в прямом эфире во время прогноза погоды, фото можно найти по словам «уведомление windows в прямом эфире». Ради интереса еще можете поискать «самый большой синий экран».
О чем же все это говорит?
— Вы любите кошек?
— Нет
— Вы просто не умеете их готовить!
Для специализированных устройств Майкрософт предлагает использовать Windows 10 IoT Enterprise, которая отличается от Windows 10 Enterprise только отсутствием универсальных приложений. Соответственно, с технической точки зрения Win 10 IoT Enterprise является настольной операционной системой, которая подразумевает взаимодействие с пользователем. Но на специализированных устройствах взаимодействия с пользователем не должно быть т.к. порой даже нет пользователя в привычном его понимании, особенно это касается рекламных панелей.
При подготовке специализированного устройства некоторые технические специалисты забывают о вышеуказанном нюансе совсем или забывают отключить какую-либо категорию уведомлений. Данная статья написана чтобы напомнить о некоторых особенностях настройки Windows для специализированных решений. В данной статье мы рассмотрим подготовку решения для одной бизнес-задачи.
Все настройки будут описаны для Win 10 IoT Enterprise 2016 LTSB, демо-версию которой можно скачать здесь.
Какую бизнес-задачу решаем?
Как-то раз я приехал в пункт самовывоза одного онлайн магазина. В данном магазине продавцы только выдавали товар или давали его посмотреть, а заказ нужно было оформлять только на сайте магазина. Чтобы можно было оформить заказ прямо в пункте самовывоза, в зале самовывоза было установлено множество ПК. Сами ПК были спрятаны, был только монитор и мышка, на экране была открыта специализированная база магазина, в которой можно было найти товар и оформить заказ и экранная клавиатура.
Рассмотрим подготовку аналогичного решения, которое будет предназначено для навигации по сайту www.quarta-embedded.ru. Предполагаемые условия использования – без источника бесперебойного питания и с минимальным техническим обслуживанием.
Подготовка решения
Шаг 1 – подготовка устройства
В качестве устройства был взят обычный ПК, с жестким диском 120 ГБ, оперативной памятью 4 ГБ. Режим загрузки ОС – Legacy.
Т.к. у нас устройство будет использоваться без источника бесперебойного питания нужно обязательно предусмотреть внеплановое отключение питания. Т.е. устройство должно само включаться при появлении питания, для этого необходимо соответствующим образом настроить BIOS устройства. Необходимые пункты в BIOS’е можно найти по интуитивно-понятным названиям, у меня это «Advanced > Power-On Options > After Power Loss», выставляем «On». Но если Вы хотите, чтобы при включении устройство оставалось выключенным, когда его выключили намеренно, то установите «Previous State».
Шаг 2 – установка Win 10 IoT
Установка Win 10 IoT Enterprise ничем не отличается от установки Win 10 Enterprise, поэтому не вижу особого смысла описывать установку. Я буду устанавливать «Win 10 IoT Enterprise 2016 LTSB x32» без подключения к интернету, чтобы в систему не «прилетело» ничего лишнего. При первой загрузке создал пользователя Admin.
Шаг 3 – сохранение образа системы
Что, не ждали такого поворота? Только установили систему и сразу сохраняем образ. При подготовке решения желательно периодически сохранять образ системы на тот случай если вдруг что-то пойдет не так. Тогда не нужно будет делать настройку системы сначала.
Когда мы говорим о создании образа мы затрагиваем вопрос тиражирования, но он настолько широкий, что ему можно посвятить отдельную статью и не одну, поэтому в данной статье я не буду подробно описывать данный вопрос.
Для создания технологического (промежуточного) образа я запечатаю систему командой
и создам wim образ системного тома с помощью утилиты DISM.
Важно — если Вы пойдете тем же путем, то после разворачивания такого образа не забудьте скопировать содержимое каталога «Windows\System32\Recovery» на первый том в папку «Recovery\WindowsRE». И сделать это нужно до загрузки ОС т.к. после загрузки ОС каталог «Windows\System32\Recovery» уже будет пустым. У меня это реализовано следующим образом:
Обратите внимание, что после запечатывания система будет автоматически входить во встроенную учетную запись администратора. И теперь автоматически будет запускаться sysprep. Чтобы это окно мне не мешало, я добавил в shell:startup скрипт с одной единственной командой
Чтобы не забыть удалить скрипт, я сразу сделаю скрипт для запечатывания, в котором будет прописана команда для очистки автозапуска.
Мне ведь все равно нужно будет запечатывать систему в oobe режиме.
Все технологические файлы я буду размещать в папке C:\Sysprep
Шаг 4 – установка драйверов
Как ни странно, но некоторые жалуются, что после установки Win 10 «драйверы не установились сами». Спешу Вас огорчить, само ничего не бывает, драйверы необходимо устанавливать. В системе идет некий набор стандартных драйверов, но вряд ли со стандартным набором драйверов можно будет использовать все возможности оборудования. Лучше всего если Вы сами установите наиболее подходящие драйверы для Вашего устройства. Windows может автоматически загружать драйверы из специального хранилища Майкрософта и устанавливать их, но не обязательно что там будут все необходимые драйверы или что это будут подходящие драйверы. Драйвер, который система установит автоматически может привести к сбою системы. Что же делать если Вы оказались в ситуации, когда нужно предотвратить такую автоматическую установку драйвера? Есть 2 варианта:
1. Отключить службу обновления
net stop wuauserv – команда остановки службы
sc config wuauserv start=disabled – изменить режим запуска службы на «Отключено»
Но в таком случае система не будет получать какие-либо обновления вообще
2. Отключить установку конкретного драйвера в групповых политиках
Открыть редактор групповых политик командой gpedit
Перейти в раздел «Конфигурация компьютера\Административные шаблоны\Система\Установка устройства\Ограничение на установку устройств». Англоязычный вариант ветки «Computer Configuration\Administrative Templates\System\Device Installation\Device Installation Restrictions»
В данном разделе Вы сможете запретить установку драйвера по конкретному классу или ID оборудования. Для предотвращения установки других драйверов НЕ нужно устанавливать флажок «Также применить для соответствующих устройств, которые уже были установлены» «Also apply to matching devices that are already installed», иначе Вы сделаете использование устройства невозможным.
Т.к. у меня экспериментальное решение и драйверы особого значения не имеют, я не буду целенаправленно устанавливать драйверы. После подключения к интернету система нашла драйвер на некоторые устройства.
Шаг 5 – русификация системы
Думаю, что это действие весьма простое и его не нужно подробно описывать. Скажу, что для корректного отображения кириллицы я указал русский язык для программ, которые не поддерживают Юникод. Указал расположение, хотя в моем случае это не нужно. И попутно можно изменить часовой пояс т.к. по умолчанию UTC -8. Установил русскоязычный языковой пакет, когда я устанавливал языковой пакет через интернет, мне показалось это долгим, поэтому я установил его с помощью предварительно скачанного пакета «Microsoft-Windows-Client-Language-Pack_x86_ru-ru.cab», установил командой
После установки переключил основной язык системы на русский и включил опцию копирования языковых параметров для экрана приветствия и новых учетных записей.
Вот и все, русский язык добавлен, пожалуй, можно сохранить образ системы…
Шаг 6 – настройка питания
Наше устройство не должно засыпать и отключать монитор, поэтому нужно настроить питание соответствующим образом. Питание можно настроить с помощью скрипта:
Шаг 7 – отключение аварийного режима загрузки
Важный момент – если у нашего устройства будет 2-3 раза подряд некорректное завершение работы, то система загрузится в режим восстановления, а этого допускать нельзя. Поэтому отключаем этот режим загрузки. Это можно сделать с помощью команды
Обратите внимание, что данная настройка прописывается в bcd хранилище, которое находится на разделе восстановления. Я не сохраняю раздел восстановления при сохранении образа системы, следовательно после разворачивания системы данная настройка будет в исходном состоянии т.к. будет новое bcd хранилище. Чтобы не забыть про данную настройку я добавлю ее в скрипт запечатывания в oobe режиме.
Шаг 8 – отключение сообщений об ошибках и всплывающих уведомлений
Чтобы система не выдавала сообщения об ошибках, запрос об отправке отчетов об ошибках, сообщения о проблемах с оборудованием, все это нужно отключить. Службу политики диагностики можно настроить в групповых политиках:
Конфигурация компьютера\Административные шаблоны\Система\Диагностика
Диагностика: настройка уровня выполнения сценария — Включить «Только обнаружение и диагностика»
Но мне проще все настроить с помощью одного reg файла.
Всплывающие уведомления можно настроить в групповых политиках «Конфигурация пользователя\Административные шаблоны\Меню «Пуск» и панель задач\Уведомления». Но мне проще включить режим «Не беспокоить», его можно включить в графическом интерфейсе, в центре уведомлений и в реестре. Т.к. эта настройка относится к конкретному пользователю, то и выполнять его нужно под целевым пользователем. Поэтому создаем пользователя, под которым и будет выполняться приложение для общественного использования. Пока этот пользователь будет в группе администраторы, для удобства настройки. Чтобы не было проблем с названием группы русская/английская, то получу название группы по SID’у.
И включаем режим не беспокоить.
Чтобы не забыть исключить пользователя из группы администраторы, добавлю команду на исключение в скрипт запечатывания.
Шаг 9 – настройка обновлений системы
Не помешает установить все актуальные обновления на момент подготовки системы. Настроить обновления Вы можете исходя из специфики работы Вашего устройства. Можно отключить установку всех обновлений или обновлений драйверов, как это сделать мы рассмотрели в шаге 4. А можно отключить установку обновлений системы и оставить обновление драйверов.
Но также возможна ситуация, когда нужно устанавливать обновления системы, но какое-то конкретное обновление выводит систему из строя. В этой ситуации можно запретить установку конкретного обновления. Это можно сделать с помощью утилиты wushowhide.diagcab, которую можно найти здесь.
В групповых политиках Вы можете найти множество детализированных настроек по установке обновлений. «Конфигурация компьютера\Административные шаблоны\Компоненты Windows\Центр обновления Windows»
Т.к. мне обновления не нужны я их отключу полностью:
Здесь я в очередной раз сохраню образ системы.
Шаг 10 – настройка запуска приложения
Навигация по сайту quarta-embedded.ru будет в IE, чтобы убрать доступ к адресной строке и настройкам можно включить полноэкранный режим в групповых политиках. «Конфигурация пользователя > Административные шаблоны > Компоненты Windows > Internet Explorer > Включение полноэкранного режима». И нужно запретить закрытие IE «Конфигурация пользователя > Административные шаблоны > Компоненты Windows > Internet Explorer > Меню браузера > Меню «Файл»: отключить закрытие окон браузера и проводника».
Для запуска приложения вместо оболочки системы будем использовать специальное средство запуска приложений – ShellLauncher. С его помощью можно:
1. Назначать запуск конкретного приложения для конкретного пользователя или группы пользователей
2. Контролировать работу запущенного приложения, при закрытии запущенного приложения можно:
- a. Перезапустить приложение
- b. Перезагрузить систему
- c. Выключить систему
- d. Не предпринимать никаких действий
Сначала нужно добавить ShellLauncher как компонент, это можно сделать в графическом интерфейсе «Панель управления > Программы > Включение и отключение компонентов Window», раздел «Блокировка устройства». Настроить запуск программ можно в ветке реестра «HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows Embedded\Shell Launcher». настройка запуска программ производится по SID’ам пользователей, SID’ы можно узнать с помощью утилиты whoami. Для включения ShellLauncher’а нужно просто заменить в реестре запуск стандартной оболочки на запуск ShellLauncher’а. И еще маленький нюанс, ShellLauncher не влияет на размеры и положение окна запущенной программы, а IE хотелось бы запустить развернутым на весь экран. Поэтому настраиваем режим запуска IE, опять же под пользователем User, заодно запрещаем вызов контекстного меню IE, чтобы пользователь ничего не испортил.
Теперь настраиваем ShellLauncher, опять же мне все удобней делать с помощью консоли…
И, в качестве примера, можно назначить запускаемую оболочку по умолчанию, когда пользователю не назначено никаких приложений.
И включаем Shell Launcher
Шаг 11 – настройка отображения загрузки системы
В предыдущих версиях Windows можно было установить свои логотипы, которые отображались бы при загрузке системы, сейчас есть только две опции вкл. и выкл. Отключить процесс отображения загрузки можно в bcd хранилище, эти команды я выполню сразу и добавлю в скрипт запечатывания.
Также можно скрыть процесс входа пользователя в систему.
Теперь включаем автоматический вход пользователя User, это можно сделать с помощью команды netplwiz. Перезагружаемся и смотрим что получилось, отображения хода загрузки ОС нет, отображения входа пользователя в систему нет. Только, непосредственно перед входом в систему на несколько секунд появляется значок Win и анимация в виде шариков, но это потому, что ОС в режиме аудита, после запечатывания в режиме oobe этого не будет. Автоматически запустился IE с адресом www.quarta-embedded.ru, чуть позже появилась вкладка microsoft.com, ну ничего, нужно будет добавить в файл ответов запечатывания команду на изменение настроек в реестре
Вот здесь я опять сделаю образ системы.
Шаг 12 – установка и удаление ключа Windows
Перед установкой ключа нужно отключить ПК от интернета, чтобы система не активировалась. Можно добавить ключ и сразу же его можно удалить, чтобы никто не смог его вытащить. При этом система все равно сможет активироваться.
Шаг 13 – запечатываем систему
Чтобы система не задавала вопросов при первой загрузке после запечатывания в oobe режиме, я использую файл ответов, предварительно подготовленный в утилите «Windows System Image Manager». Запускаю скрипт для запечатывания, ниже содержание скрипта и файла ответов.