- PVSM.RU - https://www.pvsm.ru -

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

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

Unified Extensible Firmware Interface

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

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

Разработка и отладка UEFI драйверов на Intel Galileo, часть первая, вводная
Если есть открытый стандарт, то должна быть и его открытая реализация, иначе такому «открытому» стандарту грош-цена (граждане, проходим, не задерживаемся, нечего тут на Office OpenXML смотреть, нечего). Чтобы такая цена не настигла UEFI, Intel совместно с другими членами UEFI Forum и сообществом занялись развитием открытой реализации «верхней» части стандарта UEFI [3], т.е. кода фаз DXE и Minnowboard V1 [4] и серверных платах из состава Intel UEFI Development Kit), либо в виде исходного кода в комплекте с CRB, NDA, и контрактом с IBV тысяч примерно на 30-40 долларов за годовую лицензию на код, IDE и средства отладки, поэтому энтузиастам практически ничего не оставалось делать, кроме как использовать для отладки UEFI-драйверов собственной разработки виртуальные машины (отладка через QEMU — один из штатных способов для EDK2) или заниматься грязным хакингом, поиском утекших исходных кодов и средств разработки и тому подобным.

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

Разработка и отладка UEFI драйверов на Intel Galileo, часть первая, вводная
Спасение из этой непростой ситуации пришло с неожиданной стороны — внезапно Intel выпустила Arduino-совместимую плату Galileo [5], на которой, кроме запускаемой из дешевого отладчика на базе FT232H [6] и утилит OpenOCD и GDB (а вот эту возможность пользователи х86-процессоров получили на моей памяти впервые). Теперь для аппаратной отладки кода прошивки не нужны ни Intel BlueBox [7] (~$3000 за штуку), ни Intel System Studio [8] (~$2000 за лицензию на год), а практически весь код прошивки доступен под лицензией BSD.
Сейчас к выходу готовится второе поколение плат Minnowboard — MAX [9] (уже доступен предзаказ), для которых в сентябре этого года тоже обещают представить открытую реализацию UEFI, но в данный момент её еще нет, и Galileo остается единственной платой на x86 с открытым кодом UEFI, доступной простым смертным. Вот её то мы и возьмем в качестве базовой платформы для наших опытов.

Galileo

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

Планы и опрос

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

Автор: CodeRush

Источник [12]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/razrabotka/69528

Ссылки в тексте:

[1] Beyond BIOS: http://click.intel.com/beyond-bios-2nd-edition.html

[2] уже был описан в одной из моих прошлых статей: http://habrahabr.ru/post/185764/

[3] открытой реализации «верхней» части стандарта UEFI: http://tianocore.sourceforge.net/wiki/Welcome

[4] Minnowboard V1: http://www.minnowboard.org/technical-features/

[5] Arduino-совместимую плату Galileo: http://arduino.cc/en/ArduinoCertified/IntelGalileo

[6] дешевого отладчика на базе FT232H: http://habrahabr.ru/post/206124/

[7] Intel BlueBox: https://designintools.intel.com/product_p/itpxdp3brext.htm

[8] Intel System Studio: https://software.intel.com/en-us/intel-system-studio

[9] MAX: https://uefidk.com/content/minnowboard-max

[10] этот неоднозначный продукт: http://www.mouser.de/new/Intel/intel-galileo-development-board/

[11] бага в работе инструкции lock: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=738575

[12] Источник: http://habrahabr.ru/post/236743/