Как сделать скрин биоса
На ноуте стоит Ubuntu 12.04, нужно сделать скрины в биосе. Есть ли какие-нибудь пути кроме камеры? Спасибо.
IPMI, если бы он у тебя был, или внешний KVM, или камерой.
сканером можно еще
Если экран глянцевый - не прокатит.
Прикладывай лист формата А4, бери карандашики цветные и обводи изображение.
Можно лист фотобумаги прямо на экран приложить, а потом проявить.
Предлагаю прикладывать сканер — модно, инновационно.
Круть, жаль только все ссылки на файлы давно протухли.
К сожалению нет пути кроме фотокамеры.
Когда-то была по этому поводу шутка:
Выключить свет, закрыть правый глаз и длительное время смотреть в монитор широко открытым вторым глазом, стараясь при этом не шевелить головой.
Интересно, кто-нибудь додумался написать виртуалку или эмулятор чисто для БИОСов.
У QEmu BIOS можно менять.
netbook>hdmi>TV>Dvd rec. Врят получится но попробoвать можно.
p8p67 deluxe последний биос имеет возможность делать скриншоты. К ОС возможность сделать скриншот не относится. Это чисто фича биоса
фотиком, да и все.
Первый способ - с помощью преобразователя сигналов. Нужно найти документацию на устройства отображения и собрать по подобию устройство с необходимыми модификациями, обеспечивающими обработку и передачу графической информации. Либо произвести модификации имеющегося устройства отображения, но это не Ъ.
Второй способ - фотоэлектрический. Посредством регистрации потока фотонов фотоэлектрической матрицей с излучающего источника отображения и последующим преобразованием в дискретный код с помощью АЦП. Или же отраженного потока (от внешнего источника излучения) с активной области неизлучающего устройства отображения. Важно заметить, что в этом случае спектральная характеристика внешнего источника излучения должна выбираться с учетом отражающих свойств активной области и спектральной чувствительности фотоэлектрической матрицы.
В прошлой статье про SecureBoot мне очень не хватало возможности сделать снимок экрана при настройке UEFI через BIOS Setup, но тогда выручило перенаправление текстовой консоли в последовательный порт. Это отличное решение, но доступно оно на немногих серверных материнских платах, и через него можно получить только псевдографику, а хотелось бы получить настоящую — она и выглядит приятнее, и вырезать ее каждый раз из окна терминала не надо.
Вот именно этим мы и займемся в этой статье, а заодно я расскажу, что такое DXE-драйвер и как написать, собрать и протестировать такой самостоятельно, как работают ввод с клавиатуры и вывод на экран в UEFI, как найти среди подключенных устройств хранения такое, на которое можно записывать файлы, как сохранить что-нибудь в файл из UEFI и как адаптировать какой-то внешний код на С для работы в составе прошивки.
Если вам все еще интересно — жду вас под катом.
Отказ от ответственности
Что там нужно и почему это DXE-драйвер
Задача наша состоит в том, чтобы снять скриншот со всего экрана во время работы какого-то UEFI-приложения, например BIOS Setup, нажатием определенной комбинации клавиш, найти файловую систему с доступом на запись и сохранить полученный скриншот на нее. Также было бы неплохо получить какую-то индикацию статуса. Т.к. для снятия скриншота потребуется прерывать работу UEFI-приложений, сама программа по их снятию приложением быть не может, ведь никакой вытесняющей многозадачности в UEFI пока еще не предусмотрено, поэтому нам нужен DXE-драйвер.
Схема его работы планируется примерно следующая:
0. Загружаемся только после появления текстового ввода (чтобы обрабатывать нажатия комбинации клавиш) и графического вывода (чтобы было с чего снимать скриншоты).
1. Вешаем обработчик нажатия комбинации LCtrl + LAlt + F12 (или любой другой на ваш вкус) на все доступные входные текстовые консоли.
2. В обработчике находим все выходные графические консоли, делаем с них скриншот и перекодируем его в формат PNG (т.к. UEFI-приложения обычно не используют миллионы цветов, то в этом формате скриншоты получаются размером в десятки килобайт вместо нескольких мегабайт в BMP).
3. В том же обработчике находим первую попавшуюся ФС с возможностью записи в корень и сохраняем туда полученные файлы.
Можно расширить функциональность выбором не первой попавшейся ФС, а, к примеру, только USB-устройств или только разделов ESP , оставим это на самостоятельную работу читателю.
Выбираем SDK
Для написания нового кода для работы в UEFI имеются два различных SDK — более новый EDK2 от UEFI Forum и GNU-EFI от независимых разработчиков, основанный на старом коде Intel. Оба решения подразумевают, что вы будете писать код на C и/или ассемблере, в нашем случае постараемся обойтись чистым C.
Не мне судить, какой SDK лучше, но я предлагаю использовать EDK2, т.к. он официальный и кроссплатформенный, и новые фичи (вместе с исправлением старых багов) появляются в нем значительно быстрее благодаря близости к источнику изменений, плюс именно его используют все известные мне IBV для написания своего кода.
EDK2 находится в процессе постоянной разработки, и в его trunk стабильно добавляют по 2-3 коммита в день, но так как мы здесь за самыми последними веяниями не гонимся (все равно они еще ни у кого не работают), поэтому будем использовать последний на данный момент стабильный срез EDK2, который называется UDK2015.
Чтобы обеспечить кроссплатформенность и возможность сборки различными компиляторами, EDK2 генерирует make-файлы для каждой платформы, используя конфигурационные файлы TXT (конфигурация окружения), DEC, DSC и FDF (конфигурация пакета) и INF (конфигурация компонента), подробнее о них я расскажу по ходу повествования, а сейчас нужно достать EDK2 и собрать HelloWorld, чем и займемся, если же вам не терпится узнать подробности прямо сейчас — проследуйте в документацию.
Настраиваем сборочное окружение
Структура проекта
Если теперь повторить команду build, она должна быть успешной, иначе вы что-то сделали неправильно.
Вот теперь у нас, наконец, есть заготовка для нашего драйвера, и можно перейти непосредственно к написанию кода. Совершенно ясно, что такая сборочная система никуда не годится, и работать с ней через редактирование текстовых файлов не очень приятно, поэтому каждый из IBV имеет собственное решение по интеграции сборочной системы EDK2 в какую-нибудь современную IDE, к примеру среда AMI Visual eBIOS — это такой обвешенный плагинами Eclipse, а Phoenix и Insyde обвешивают ими же Visual Studio.
Есть еще замечательный проект VisualUefi за авторством известного специалиста по компьютерной безопасности Алекса Ионеску, и если вы тоже любите Visual Studio — предлагаю попробовать его, а мы пока продолжим угарать по хардкору, поддерживать дух старой школы и всё такое.
Реагируем на нажатие комбинации клавиш
Здесь все достаточно просто: при загрузке драйвера переберем все экземпляры протокола SimpleTextInputEx, который публикуется драйвером клавиатуры и чаще всего ровно один, даже в случае, когда к системе подключено несколько клавиатур — буфер то общий, если специально что-то не менять. Тем не менее, на всякий случай переберем все доступные экземпляры, вызвав у каждого функцию RegisterKeyNotify, которая в качестве параметра принимает комбинацию клавиш, на которую мы намерены реагировать, и указатель на callback-функцию, которая будет вызвана после нажатия нужно комбинации, а в ней уже и будет проведена вся основная работа.
Для успешной компиляции пока не хватает функций TakeScreenshot и ShowStatus, о которых ниже.
Ищем ФС с доступом на запись, пишем данные в файл
Прежде, чем искать доступные графические консоли и снимать с них скриншоты, нужно выяснить, можно ли эти самые скриншоты куда-то сохранить. Для этого нужно найти все экземпляры протокола SimpleFileSystem, который публикуется драйвером PartitionDxe для каждого обнаруженного тома, ФС которого известна прошивке. Чаще всего единственные известные ФС — семейство FAT12/16/32 (иногда только FAT32), которые по стандарту UEFI могут использоваться для ESP. Дальше нужно проверить, что на найденную ФС возможна запись, сделать это можно разными способами, самый простой — попытаться создать на ней файл и открыть его на чтение и запись, если получилось — на эту ФС можно писать. Решение, конечно, не самое оптимальное, но работающее, правильную реализацию предлагаю читателям в качестве упражнения.
Этому коду больше ничего не нужно, работает как есть.
Ищем графическую консоль и делаем снимок её экрана
Проверив, что сохранять скриншоты есть на что, займемся их снятием. Для этого понадобится перебрать все экземпляры протокола GOP, который публикуют GOP-драйверы и VideoBIOS'ы (точнее, не сам VBIOS, который ничего не знает ни про какие протоколы, а драйвер ConSplitter, реализующий прослойку между старыми VBIOS и UEFI) для каждого устройства вывода с графикой. У этого протокола есть функция Blt для копирования изображения из фреймбуффера и в него, пока нам понадобится только первое. При помощи объекта Mode того же протокола можно получить текущее разрешение экрана, которое нужно для выделения буффера нужного размера и снятия скриншота со всего экрана, а не с какой-то его части. Получив скриншот, стоит проверить что он не абсолютно черный, ибо сохранять такие — лишняя трата времени и места на ФС, черный прямоугольник нужного размера можно и в Paint нарисовать. Затем нужно преобразовать картинку из BGR (в котором её отдает Blt) в RGB (который нужен энкодеру PNG) иначе цвета на скриншотах будут неправильные. Кодируем полученную после конвертации картинку и сохраняем её в файл на той ФС, которую мы нашли на предыдущем шаге. Имя файла в формате 8.3 соберем из текущей даты и времени, так меньше шанс, что один скриншот перепишет другой.
Для работы не хватает lodepng_encode32 и уже упоминавшейся выше ShowStatus, продолжим.
Кодируем изображение в формат PNG
Выводим статус
Вот теперь все готово и успешно собирается, если нет — пилите, пока не соберется, либо скачайте мой готовый драйвер с GitHub и сравните с вашим, может быть я какие-то изменения банально забыл описать.
Тестируем результат в UEFI Shell
Этот скриншот, как и все последующие, снят нашим драйвером, поэтому квадрата в углу на нем не видно.
Дальше смело жмите LCtrl + LAlt + F12 и наблюдайте за статусом. На моих системах с AMI графическая консоль одна, и потому я вижу промелькнувший зеленый квадрат и получаю один скриншот за одно нажатие комбинации. На моих системах с Phoenix и Insyde оказалось по две графические консоли, одна из которых пустая, поэтому я вижу сначала синий квадрат, а затем зеленый, скриншот при этом тоже только один. Результат тестирования из UEFI Shell на них выглядит так же, только разрешение там уже не 800х600, а 1366х768.
Ну вот, из шелла все работает и можно снимать скриншоты с UEFI-приложений, вот такие:
Тестируем результат в модифицированной прошивке
К сожалению, скриншот с BIOS Setup таким образом не снять — драйвер загружается слишком поздно. Решений возможных тут два, первое — добавить наш драйвер вместе с секцией зависимостей в DXE-том прошивки при помощи UEFITool, второй — добавить его же к OptionROM какого-нибудь PCIe-устройства, тогда и модификация прошивки не понадобится. Второй способ я еще попытаюсь реализовать позже, когда получу нужную железку, а вот с первым проблем никаких нет. Вставляем, шьем, стартуем, втыкаем флешку, заходим в BIOS Setup, нажимаем LCtrl + LAlt + F12 — вуаля, видим синий и зеленый квадраты, все работает. Выглядит результат вот так:
К сожалению, сделать скриншот BIOS нельзя никак. BIOS - это базовая система ввода-вывода, "зашитая" в материнскую плату и загружаемая перед стартом операционной системы, поэтому обычным способом через нажатие на кнопку клавиатуры Print Screen сделать ничего не удастся - кнопка Print Screen работает только в загруженной операционной системе Windows, в которой и можно сделать скриншот экрана.
При необходимости изображение БИОСа компьютера можно только сфотографировать, и здесь уже все зависит от ваших навыков - можно сделать как удачное фото, которое будет не стыдно приложить к статье, так и размазанное с бликами, никуда не годящееся.
Как делают скрины BIOS на некоторых сайтах, где все ровно и красиво?
Вероятно, устанавливается виртуальная машина поверх работающей ОС Windows. На виртуальной машине происходит загрузка BIOS, скрины которого можно делать кнопкой Print Screen, так как загружена и работает Windows.
Методы, описанные ниже полностью подойдут для любого стационарного компьютера или ноутбука с установленной Windows 7 / 8 /10 / Server. Частично, для Linux и Mac.
Способ 1. Клавиша Print Screen
Это классический метод создания снимка экрана. Является универсальным и может подойти не только для операционной системы Windows.
Пример того, как может выглядеть клавиша Print Screen:
Откройте Paint. Его можно найти в стандартных программах (Пуск -
Все приложения - Стандартные) или воспользоваться поиском Windows.
Если зажать клавишу Alt и нажать PrtScr будет создан снимок активного окна, а не всего экрана.
Способ 2. Приложение ножницы
Этот способ больше подойдет, если нужно сделать скриншот не целого экрана, а его части. Приложение появилось в Windows 7.
Способ 3. Использование онлайн сервиса Lightshot
Этот способ удобен тем, что скриншот можно сразу передать через Интернет.
Способ 4. Использование различных программ
Существует множество программ как для Windows, так и Mac OS и Linux, которые помогают делать скриншоты. Если создание снимков экрана является повседневной задачей, такие приложения дадут некоторые преимущества по удобству и скорости работы. Кратко опишем некоторые из самых популярных.
Читайте также: