
Известно, что попытка сделать несколько дел одновременно обычно дает негативный результат. Тем не менее, мы решили совместить низкоуровневое исследование UEFI BIOS ноутбука ASUS T100T, оказавшегося в нашей тестовой лаборатории с процессом отладки и тестирования нашего нового программного продукта UEFImark EBC Edition, ведь работая на уровне регистров, ячеек памяти и ассемблерного кода можно увидеть много такого, о чем не говорится на презентациях…
Эксперимент с обновлением firmware
Согласно сложившейся традиции, работу с устройством начинаем с обновления firmware. Мы заменили прошивку с версии 2.14 на 2.23. Что изменилось?
- Ноутбук приобрел способность обнаруживать и запускать UEFI-загрузчик с внешнего USB-накопителя по стандартному пути \EFI\BOOT\bootia32.efi (см. публикацию «В ноутбуках ASUS уже нет Legacy-загрузки?»).
- С помощью утилиты BIOS Implementation Test Suite обнаружено, что устранена ошибка, приводившая к увеличению погрешности установки (или измерения) тактовой частоты процессора в тесте ACPI. Данный тест состоит в установке различных Power Management состояний процессора с последующим измерением тактовой частоты для каждого состояния.
- Также благодаря BIOSBITS мы определили, что устранена ошибка, приводившая к некорректным результатам в тесте, измеряющем временные соотношения при обработке SMI (System Management Interrupt) и время нахождения процессора в состоянии SMM (System Management Mode). Заметим, что одним из следствий этой ошибки могут быть сбои оборудования, связанные с недопустимым увеличением латентности при обработке внешних аппаратных прерываний.
32 или 64 бита?
Не обошлось без недоразумений. Ранее по сети разошлась информация, ноутбук снабжен 32-битным процессором. А по информации на сайте Intel, процессор Intel Atom CPU Z3740 поддерживает технологию Intel 64 (см. публикацию «Особенности реализации USB-подсистемы ноутбука ASUS T100T»). Но результаты наших последовательных попыток запуска 32-битного и 64-битного вариантов UEFI Shell с внешнего USB-накопителя, однозначно говорят о наличии только IA32 UEFI firmware. Итак, для прояснения ситуации, запускаем UEFImark EBC Edition и получаем такой результат:
Строка Native width, bits: 32 означает, что UEFI firmware использует 32-битный режим работы процессора, а также, что для адресации системных объектов в пространстве адресуемой памяти используются 32-битные указатели и размер адресного пространства равен 4 Гигабайта или 232 байт.
Строка CPU features: iEM64T… означает, что процессор поддерживает 64-битный режим, но его включение возможно только после передачи контроля над платформой от UEFI к 64-битной операционной системе.
Вывод: у нас 64-битный процессор, на котором запущен 32-битный UEFI. Получение системной информации непосредственно «из железа» гарантирует ее достоверность.
Резюме
Около двух лет назад из целого ряда независимых источников можно было услышать мнение о том, что реализация UEFI для IA32 является «вчерашним днем» и все выпускаемые PC-совместимые системы будут комплектоваться x64 UEFI firmware. И вот, в нашей тестовой лаборатории оказался новейший ноутбук от ASUS, снабженный 32-битной «прошивкой», несмотря на поддержку 64-битного режима процессором. Разумеется, приложения для x64 UEFI на нем запустить нельзя. Как разработчику системного программного обеспечения минимизировать риски в непредсказуемом и быстро меняющемся мире? Ответ на этот вопрос дает использование технологии EBC или EFI Byte Code, основанной на реализации в рамках UEFI виртуальной машины регистрового типа, архитектура которой не зависит от аппаратной реализации платформы. А чтобы окончательно потерять способность чему-либо удивляться, осталось только увидеть ноутбук на основе Itanium, и конечно, запустить на нем EBC-приложение…