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


Здрастуйте, шановні хабрачитатели.
Багатьом з вас може бути цікава тема розробки та налагодження коду 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.
Але перш ніж писати продовження, мене цікавить ваша думка, шановні хабрачитатели. Заздалегідь спасибі за ваш голос.

Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.