Как стать автором
Обновить

Разработка и отладка UEFI-драйверов на Intel Galileo, часть первая, вводная

Время на прочтение4 мин
Количество просмотров19K


Здравствуйте, уважаемые хабрачитатели.

Многим из вас может быть интересна тема разработки и отладки кода UEFI-драйверов и приложений, которая пока еще недостаточно широко освещена в сети, но к которой мне посчастливилось иметь непосредственное отношение.

В связи с этим я планирую написать цикл статей о разработке и отладке UEFI-драйверов на аппаратной платформе Intel Galileo Gen 1, т.к. эта платформа обладает, на мой взгляд, наилучшим соотношением цена/качество для вышеуказанной задачи.

Первая часть статьи является вводной, в ней я расскажу о стандарте UEFI, проекте TianoCore и его недостатках, o внезапном решении Intel и их плате Galileo, о причинах выбора именно этой аппаратной платформы в качестве базовой и о планах на следующие части.

Unified Extensible Firmware Interface



Как вам уже известно, UEFI — это разработанный Intel в сотрудничестве с Microsoft и другими членами UEFI Forum стандарт на компоненты и интерфейсы прошивок для различного компьютерного оборудования. Стандарт описывает структуру файлов прошивок, интерфейс между прошивкой и ОС (который собственно и называется UEFI) и между компонентами прошивки (имя которому поскромнее — PI ). Хорошее введение в структуру и механизмы работы UEFI имеется в книге Beyond BIOS, написанной непосредственными участниками разработки и внедрения стандарта, а лучше них я все равно не расскажу, поэтому повторяться не стану, тем более, что процесс UEFI-загрузки уже был описан в одной из моих прошлых статей. Если для вас термины вроде "PEI-фаза" или "DXE-драйвер" пока еще звучат незнакомо — прочтите её и возвращайтесь.

TianoCore и его недостатки



Если есть открытый стандарт, то должна быть и его открытая реализация, иначе такому «открытому» стандарту грош-цена (граждане, проходим, не задерживаемся, нечего тут на Office OpenXML смотреть, нечего). Чтобы такая цена не настигла UEFI, Intel совместно с другими членами UEFI Forum и сообществом занялись развитием открытой реализации «верхней» части стандарта UEFI, т.е. кода фаз DXE и BDS, общего для всех поддерживаемых систем и процессорных архитектур. На нем же основан UEFI Development Kit, который недавно был обновлен до версии 2014 SR1. Любителям ночных сборок и кода из trunk предлагается репозиторий EDK2, «стабильным» срезом которого и являются все версии UDK. «Нижняя» часть стандарта (т.е. фазы SEC и PEI, зависимые от аппаратной части и занятые этой самой аппаратной части инициализацией) была до недавнего времени закрытой для всех систем с архитектурой x86 и предоставлялась либо в виде BLOBов всем желающим (как это и сейчас сделано на Minnowboard V1 и серверных платах из состава Intel UEFI Development Kit), либо в виде исходного кода в комплекте с CRB, NDA, и контрактом с IBV тысяч примерно на 30-40 долларов за годовую лицензию на код, IDE и средства отладки, поэтому энтузиастам практически ничего не оставалось делать, кроме как использовать для отладки UEFI-драйверов собственной разработки виртуальные машины (отладка через QEMU — один из штатных способов для EDK2) или заниматься грязным хакингом, поиском утекших исходных кодов и средств разработки и тому подобным.

Intel спешит на помощь




Спасение из этой непростой ситуации пришло с неожиданной стороны — внезапно Intel выпустила Arduino-совместимую плату Galileo, на которой, кроме запускаемой из SPI-чипа сборки Yocto Linux с эмулятором Arduino для запуска скетчей, оказалась еще и практически полностью (за исключением микрокода) открытая реализация UEFI BIOS, пригодная для сборки в Debug-режиме, добавления в нее компонентов собственной разработки и их отладки как через UART (что раньше уже встречалось на вышеупомянутой Minnowboard V1 и других отладочных платах), так и при помощи интерфейса JTAG, дешевого отладчика на базе FT232H и утилит OpenOCD и GDB (а вот эту возможность пользователи х86-процессоров получили на моей памяти впервые). Теперь для аппаратной отладки кода прошивки не нужны ни Intel BlueBox (~$3000 за штуку), ни Intel System Studio (~$2000 за лицензию на год), а практически весь код прошивки доступен под лицензией BSD.

Сейчас к выходу готовится второе поколение плат Minnowboard — MAX (уже доступен предзаказ), для которых в сентябре этого года тоже обещают представить открытую реализацию UEFI, но в данный момент её еще нет, и Galileo остается единственной платой на x86 с открытым кодом UEFI, доступной простым смертным. Вот её то мы и возьмем в качестве базовой платформы для наших опытов.

Galileo



Когда Intel выпустила этот неоднозначный продукт, многие вполне искренне недоумевали, зачем нужна отладочная плата на SoC с «новой» (на самом деле креативно вспомненной старой) архитектурой i586+, без GPU, без Audio, зато с miniPCIe, USB host'ом, JTAG-портом, UEFI и Linux'ом, которая при этом ограниченно совместима с Arduino (т.к. использует собственную версию Arduino IDE), ограниченно совместима с x86 (т.к. «взрослые» дистрибутивы Linux ставятся на нее с немалым бубном, а после обнаружения бага в работе инструкции lock еще и нуждаются в дополнительной доводке напильником для его обхода, а большинство программ давно уже собраны для i686 и потому работать на Galileo без пересборки не будут), при всем этом проигрывающая по производительности CPU Raspberry Pi, будучи минимум вдвое дороже неё. Надо сказать, в тот момент недоумевал вместе с ними.

Ребята из Intel, конечно, рассказывали нам про светлое будущее Интернета Вещей, и предрекали десятикратный рост продаж Quark'ов, при этом тактично уклоняясь от ответа на простой вопрос «чем этот Quark лучше ARM'ов или MIPS'ов за те же деньги».

И теперь, наконец-то, применение этой странной плате нашлось, и $70 за нее уже не кажутся совсем уж необоснованной тратой.

Планы и опрос



Во второй части я планирую освятить подготовку к платы к работе: скачивание и сборку BSP, подключение программатора к разъему ISP на плате, сборку и прошивку Debug-версии UEFI.
В третьей части планируется осветить отладку кода DXE-драйвера при помощи Debug-сообщений через UART, а также отладку через JTAG с помощью OpenOCD, GDB и, возможно, trial-версии Intel System Studio.

Но прежде чем писать продолжение, меня интересует ваше мнение, уважаемые хабрачитатели. Спасибо заранее за ваш голос.
Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.
Стоит ли продолжать, будет ли продолжение кому-то интересным, кроме двух с половиной UEFI-энтузиастов?
60.9% Несомненно.204
4.48% Не надо такого на моем уютном Хабре.15
34.63% Я бэтман!116
Проголосовали 335 пользователей. Воздержались 56 пользователей.
Теги:
Хабы:
Всего голосов 33: ↑30 и ↓3+27
Комментарии3

Публикации

Истории

Ближайшие события

19 августа – 20 октября
RuCode.Финал. Чемпионат по алгоритмическому программированию и ИИ
МоскваНижний НовгородЕкатеринбургСтавропольНовосибрискКалининградПермьВладивостокЧитаКраснорскТомскИжевскПетрозаводскКазаньКурскТюменьВолгоградУфаМурманскБишкекСочиУльяновскСаратовИркутскДолгопрудныйОнлайн
24 – 25 октября
One Day Offer для AQA Engineer и Developers
Онлайн
25 октября
Конференция по росту продуктов EGC’24
МоскваОнлайн
26 октября
ProIT Network Fest
Санкт-Петербург
7 – 8 ноября
Конференция byteoilgas_conf 2024
МоскваОнлайн
7 – 8 ноября
Конференция «Матемаркетинг»
МоскваОнлайн
15 – 16 ноября
IT-конференция Merge Skolkovo
Москва
25 – 26 апреля
IT-конференция Merge Tatarstan 2025
Казань