Новости

02.10.2017

RU.efi, утилита Джеймса Ванга, сотрудника тайваньского ...

  • Все новости (38)
  • Разделы новостей

    Публикации

    Майнеру на заметку

    Утилиты

    Реклама

    Обзоры компьютерных гаджетов, которые должны быть всегда под рукой

        Яндекс.Метрика
    Главная » Статьи » UEFI и сканирование PCI-шины

    UEFI и сканирование PCI-шины

    Исследуя конфигурационное PCI-пространство миниатюрного компьютера Intel Compute Stick, пришлось столкнуться с ситуацией, противоречащей установкам PCI-спецификации. В силу того, что эксперименты выполнялись в UEFI, возникла необходимость проверить свои догадки в виртуальных средах. Краткий отчет о проделанной работе публикуем ниже.

    Что такое агрессивное сканирование?

    Обычное сканирование PCI-шины, соответствующее правилам PCI Local Bus Specification, подразумевает, что если сканер, обратившись к заданному устройству по адресу Bus=X, Device=Y, Function=0, не нашел регистровый блок (то есть первое 32-битное слово регистрового блока, содержащее регистры Vendor ID, Device ID равно FFFFFFFFh) и сделал вывод о том, что функция 0 отсутствует, то остальные функции 1-7 не проверяются, так как согласно спецификации, любое устройство должно поддерживать функцию 0.

    Метод, который мы ниже называем агрессивным сканированием, состоит в том, что не обнаружив функцию 0 для заданного устройства Bus=X, Device=Y, сканер продолжает проверять остальные функции 1-7 того же устройства. Впервые в нашей практике этот метод обнаружен в программе Debug Utility Rev. 19, что позволило найти функции, которые были, случайно или намерено, скрыты разработчиками компьютера Intel Compute Stick.

    Наличие PCI-устройства с отсутствующей функцией 0 является сравнительно очевидной ошибкой, поэтому для устройств с «жестко» реализованной PCI-архитектурой она не характерна. Но в случае, когда PCI-функции включаются и отключаются программно и сборка PCI-архитектуры платформы перекладывается на разработчиков UEFI Firmware, такие примеры становятся возможными. В нашем случае подозрения падают на American Megatrends как разработчика UEFI BIOS для стик-компьютера.

    Виртуальная машина Oracle VMBox

    Как относиться к методу агрессивного сканирования PCI-шины, задействованного автором утилиты, программистом из Китая по имени Хуан Бохань (Huang Bohan)? Казалось бы – главное результат! Но опыт разработки низкоуровневого программного обеспечения подсказывает, что такого рода отход от требований основополагающих документов должен тщательно проверяться альтернативными методами.

    Оказалось, что на виртуальной платформе Oracle VMBox в режиме эмуляции UEFI x64 агрессивное сканирование приводит к неработоспособности Debug Utility с последующим аварийным завершением.

    На виртуальной платформе Oracle VMBox в режиме эмуляции UEFI x64 агрессивное сканирование приводит к неработоспособности Debug Utility

    В файле VBox.log есть вся информация о виртуальной машине, кроме причины аварийного завершения, поэтому мы можем только предполагать, что причиной отказа было обращение к недекларированным ресурсам шины PCI. Заметим, что в 32-битном варианте, который использован в статье «Наставления по UEFI-диагностике», утилита на виртуальной машине Oracle демонстрирует полную работоспособность.

    Почему без UEFI Development Kit?

    Проверка утилиты UEFI Debug Utility под эмулятором EDK не выполнялась, поскольку документация утверждает, что данный эмулятор не предназначен для отладки модулей, взаимодействующих с оборудованием. Практика показала, что даже запись в диагностический порт 80h завершает работу EDK. Это не удивительно, так как наш эксперимент показал, что код выполняется на уровне привилегий Ring3, о чем свидетельствует состояние двух младших битов селектора сегмента кода CS.[1,0]=11b.



    17.11.2017