p>
Головним документом, що описує платформу, є специфікація [1]. У ній дано повний опис всіх можливостей і особливостей платформи. На поточний момент платформа швидко розвивається, виходять нові версії специфікації, що описують додаткові можливості. Так само офіційно випускається специфікація, яка описує процес запуску платформи [2].
Головною книгою після специфікації можна назвати джерело [3]. В інтернеті можна зустріти досить велику кількість статей на цю тему, але багато з них є перекладом специфікації. Інтерес викликає стаття [4] в якій автор наводить опис процесу завантаження платформи. У статті [5] описуються основні можливості платформи UEFI.
Найбільший інтерес представляє специфікація [1], так як вона містить повний опис всіх протоколів, що дуже корисно при програмуванні на даній платформі.
1.2 Аналіз можливостей платформи
Платформа UEFI - це вбудоване програмне забезпечення забезпечує взаємодію між операційною системою і апаратним забезпеченням.
1.2.1 Платформа має свої особливості, основні з яких перераховані нижче.
Підтримка GPT (GUID Partition Table). Спосіб розмітки файлової системи GPT, заміна старого MBR. На відміну від MBR, GPT підтримує диски розміром більше 2ТБ і необмежену кількість розділів. Платформа UEFI за замовчуванням підтримує FAT32 з GPT-розділів. Спосіб розмітки MBR платформою UEFI не підтримується, сумісність з MBR здійснюється розширенням CSM (Compatibility Support Module).
Платформа UEFI підтримує два типи сервісів: boot services і runtime services. Перший працює тільки до завантаження ОС та забезпечує взаємодію з графічними і текстовими терміналами, шинами, блоковими пристроями і т.д. Другий - runtime services може використовувати ОС, даний сервіс не вивантажується з пам'яті після запуску ОС. Один із прикладів runtime services - variable service, який зберігає значення в NVRAM.
У UEFI є можливість використовувати свої додатки і завантажувати свої драйвери. Для цього можна використовувати консольний термінал UEFI Shell. Деякі виробники НД включають його в прошивку з UEFI BIOS, але в більшій частині систем його немає. Термінал можна скачати з інтернету і скопіювати на знімний носій або жорсткий диск по визначеному шляху. Докладніше про UEFI Shell можна дізнатися з специфікації [6].
Так само UEFI підтримує мережеві можливості.
Специфікація UEFI передбачає взаємодії драйверів UEFI з ОС, тобто якщо в ОС немає драйвера на мережеву карту, а в UEFI він завантажений, то ОС зможе використовувати мережеву карту через UEFI, проте таких реалізацій поки немає.
У загальному випадку, для UEFI не вимагається ставити завантажувач для підтримки мультизавантаження.
У UEFI існує віртуальна машина зі своїм набором команд, який можна використовувати для написання платформо-незалежних драйверів.
1.2.2 Порядок завантаження UEFI BIOS так само стандартизований.
На малюнку 1.1 представлена ??схема запуску платформи.
Малюнок 1.1 - Процес запуску платформи UEFI
Відразу після включення живлення починається фаза Security (SEC) - це перша фаза завантаження, завдання якої такі:
обробити всі види перезавантажень платформи: включення харчування після неактивного стану, перезавантаження з активного стану, вихід з режиму глибокого сну, різного роду виняткові ситуації;
підготувати тимчасову ОП;
перевірити вбудоване ПЗ на достовірність;
підготувати до запуску фазу PEI (як мінімум передаються стан платформи, адресу і розмір тимчасової пам'яті, адреса і розмір стека підготовлені раніше).
Фактично для вирішення цих завдань потрібно:
скидання кеша і перехід на головну процедуру ініціалізації;
переключення процесора в захищений режим;
запис в кеш відомих значень для різних областей пам'яті;
вільний кеш позначається як несбрасиваемий, після чого його можна використовувати як тимчасову ОП до ініціалізації основний, а також дозволяє написати цю саму ініціалізацію на високорівневих ЯП, в даному випадку на C;
передача керування і даних в фазу PEI.
Потрібно відзначить, що дана фаза вимагає виконання коду записаного в постійній пам'яті чіпсета. Сам код виконується так само в чіпсеті.
Наступна, друга фаза, Pre EFI Initialization (PEI) повинна ініціалізувати достатню кількість безперервної ОП для того, щоб можна було запустити фазу DX...