
Исследование архитектуры персональной платформы логично начать с изучения BIOS и встроенной утилиты Setup. Объектом нашего исследования сегодня будет плата ASUS Z87-K на основе системной логики Intel Z87 для процессоров Socket 1150, интригующая размером микросхемы BIOS — 8 мегабайт (Winbond W25Q64FV). Посмотрим, какие возможности реализовал разработчик платформы, имея в своем распоряжении такой гигантский, по меркам firmware, объем.
Процесс познания пойдет легче, если мы объясним себе и читателям, что в качестве UEFI BIOS на плате ASUS Z87-K используется не самая новая разработка компании American Megatrends:программный код Aptio четвертой версии. По этой причине не стоит выискивать новизну там, где ее нет. Проще ознакомиться с анонсом Aptio V еще до чтения этого материала :)
Режим Flash Descriptor Mode. Хакеру на заметку
Одним из этапов исследования BIOS было считывание двоичного образа микросхемы с помощью программатора. Как и ожидалось, 32-битное слово по смещению 10h равно 0FF0A55Ah, что индицирует поддержку режима Flash Descriptor Mode. Системная логика Intel, начиная с южных мостов ICH8, входящих в состав набора 965, позволяет разработчику платформы использовать этот режим опционально. Для PCH, начиная с серии P55, использование этого режима, защищающего firmware платформы от несанкционированного доступа, стало обязательным.
Как же работает режим Flash Descriptor? Его смысл сводится к тому, чтобы SPI-контроллер, входящий в состав чипсета и обеспечивающий доступ к микросхеме BIOS, перестал быть послушным исполнителем команд чтения и записи, формируемых центральным процессором и другими системными ресурсами.
Посмотрим на таблицу 5-60 на стр. 289 документа «Intel 8 Series / C220 Series Chipset Family Platform Controller Hub (PCH)». Мы видим матрицу, в которой по X расположены ресурсы платформы (Processor, Intel Management Engine, Gigabit Ethernet Controller), а по Y – регионы Flash ROM. Матрица информирует о дисциплине управления доступом ресурса X к региону Y. Отметим наличие зарезервированных регионов, к которым запрещен доступ центральному процессору, например Platform Data Region.
Если перейти от теории к практике, то наилучшее представление о Flash Descriptor Mode можно получить используя Flash Image Tools. (Обзор этого весьма полезного инструментария приведен в статье «Редактируем BIOS»).
Рис 1. Раздел Master Access Section в образе Flash BIOS от материнской платы ASUS Z87-K.
(Click to enlarge!)
Режим Flash Descriptor Mode отображается с помощью утилиты FITC.exe из образа ROM в раздел Master Access Section, где он представлен тремя регионами: CPU/BIOS, Manageability Engine и GbE LAN.
Чип Flash ROM. Сервисному инженеру на заметку
Как сказано в предисловии, UEFI BIOS материнской платы ASUS Z87-K хранится в чипе Winbond 25Q64FV. На сегодня это не единственный носитель, пригодный к использованию на данной платформе. Кроме него в таблице VSCC Table есть еще одна строка: Flash Device 2 описывает микросхему GD25Q64B, изготовленную компанией Gigadevice (Vendor ID = C8h).
Рис 2. Содержимое таблицы VSCC: список поддерживаемых Flash ROM
(Click to enlarge!)
Микросхеме же Winbond 25Q64FV соответствует запись, содержащая код ее производителя (Vendor ID = EFh) и тип (Device ID = 4017h). Если сервисному инженеру понадобится на этой платформе использовать флеш-память другого производителя, данная информация поможет дополнить список поддерживаемых чипов «культурным способом», не прибегая к хакерским уловкам и трюкам.
Командный процессор UEFI BIOS и все что с ним связано
Запускаем UEFI Shell
Нам не удалось обнаружить UEFI Shell, встроенный в BIOS, предположительно на данной платформе он отсутствует. Поэтому мы пошли на некоторую хитрость и использовали внешний UEFI Shell, поместив его по зарезервированному пути на загрузочном устройстве: \EFI\BOOT\BOOTX64.EFI.
Первый опыт программирования для UEFI
После его запуска, мы отладили ряд собственных 64-битных UEFI приложений, написанных на ассемблере. Была обнаружена следующая особенность: некоторые сервисные функции UEFI, в частности, Get Time (получение системного времени и даты) искажают стек вызывающей процедуры. Оказалось, что эти функции при выполнении операции Parameters Shadow (копирование в стековый фрейм входных параметров, полученных через регистры процессора) используют большее количество 64-битных слов, чем следует из количества параметров. Увеличение размера стекового фрейма решило проблему.
Поясним, что в 64-битном коде UEFI передача параметров происходит несколько своеобразно. При вызове подпрограммы с аргументами от одного до четырех используются специально предназначенные для этого регистры процессора – RCX, RDX, R8 и R9. Большее количество параметров передается через стек, но даже при передаче параметров через регистры, вызывающая процедура должна создать для них стековый фрейм. В этот фрейм вызываемая процедура копирует параметры. Эта операция называется Parameters Shadow. Обнаруженный нами сбой в работе механизма Parameters Shadow состоит в том, что копируется больше 64-битных слов, чем следует из количества параметров. Самый простой обходной маневр состоит в том, чтобы увеличить размер фрейма.
UEFI BIOS Setup
Главный экран визуализирует основные параметры функционирования платформы и поддерживает удобный инструмент, позволяющий быстро находить оптимальный компромисс по критериям:
- Performance – производительность.
- Quiet – бесшумность.
- Energy Saving – экономия электроэнергии.
После перехода в Advanced Mode по клавише F7, нам доступны «продвинутые» возможности платформы.
Любителям разгона предоставляется широкий набор возможностей по управлению частотами и питающими напряжениями. Технология «узаконенного разгона» Intel Turbo Boost позволяет повышать тактовую частоту процессора с 3.5 GHz до 3.9 GHz.
Это меню обеспечивает доступ к настройкам различных компонентов платформы.
Экран конфигурации процессора содержит небольшую информационную утилиту, отображающую основные параметры, набор поддерживаемых технологий и энергосберегающих состояний.
Экран аппаратного мониторинга, традиционно сообщает о температурах, питающих напряжениях и скоростях вращения вентиляторов. Доступны опции, обеспечивающие бесшумное функционирование компьютера.
Возможности UEFI в действии — утилита обновления BIOS обнаруживает подключенные дисковые устройства и позволяет выполнить загрузку файла без использования операционной системы.
Этот набор настроек будет полезен для обеспечения совместимости новейшего UEFI BIOS с существующей номенклатурой операционных систем, а также различными PCI и PCI Express адаптерами, использующих модули расширения BIOS на борту.
Порадовало наличие встроенной утилиты для просмотра информации о модулях оперативной памяти DIMM. Очевидно, используется информация SPD. Напомним, что каждый модуль DIMM содержит постоянное запоминающее устройство размером 256 байт, в котором хранятся параметры модуля. Это устройство называется SPD или Serial Presence Detect. Микросхему EPROM легко обнаружить по характерному 8-контактному корпусу, расположенному в центре модуля или у края.
Резюме
Одним из отличий архитектуры UEFI от Legacy BIOS является поддержка файловой системы на уровне firmware платформы. Напомним, что Legacy BIOS, работает исключительно на уровне секторов, используя процедуры дискового сервиса, доступные посредством прерывания INT 13h. Преимущество архитектуры UEFI мы ощутили с первых шагов, начав сохранение снимков экрана Setup. Подключенный для сохранения снимков Flash диск, приобрел статус FS0: (File System 0), его файловая система доступна для просмотра. Справедливости ради заметим, что подобная функциональность в свое время появилась в BIOS ряда платформ, не поддерживающих UEFI, но ее реализация в рамках современных стандартов способствует улучшению совместимости с устройствами внешней памяти различных типов и моделей.
Отметим и другую тенденцию — начало процесса интеграции информационно-диагностических утилит во встроенное программное обеспечение персональной платформы.