LINUX.ORG.RU
ФорумTalks

Просветите насчет firmware/bios/vBIOS внутри GPU и возможности их модификации.

 , ,


0

1

Пытаюсь заполнить пробелы в знаниях, но что-то нагуглить ничего не получается.
Если я не ошибаюсь то по крайней мере в видеокартах AMD и Nvidia есть firmware/bios/vBIOS которая как минимум содержит настройки, но как максимум содержит код который выполняется на отдельном процессоре, это так или я ошибаюсь?
Если содержат то что насчет возможности их модификации?
Что насчет других GPU? Intel, Adreno, Mali, Vivante, PowerVR, VideoCore.

★★

но как максимум содержит код который выполняется на отдельном процессоре, это так или я ошибаюсь?

И да и нет. Суть такова, ещё со времён IBM PC XT есть возможность втыкать платы расширения и BIOS компа умеет мапить часть памяти с платы расширения. И именно таким образом видюха от noname производителя могла работать на любом PC. Она просто переопределяла INT 10h и предоставляла интерфейс для вывода графики через своё собственное железо. Подобным образом мультикарты перехватывали INT 13h и давали голому DOS возможность работать с любым железом без возни с драйверами. (Хотя для железок не входящих в определённый изначально перечень всё равно приходилось устанавливать драйверы и для использования сложных фич, не укладывающихся в базовый йнтерфейс.)

Теперь всё это legacy, используемое только на этапе начальной загрузки. С другой стороны железки стали умными, обзавелись собственными процессорами, которым нужен свой исполняемый код, та самая прошивка.

Так что правильный ответ: И так и так. Именно по этому Бачило, когда показывал замену видеокарты на стареньком PowerPC маке искал видеокарту специально под Mac. Ведь в картах для PC зашит x86 кусок BIOS.

atrus ★★★★★
()
Ответ на: комментарий от atrus

Значит на мобильных GPU прошивок нету, раз им это не нужно(Я имею ввиду что между драйвером видеокарты в ОС и между железом видеокарты нету никакой прошивки.)?

V1KT0P ★★
() автор топика

Скорей всего без шансов, про микрокод я не слышал, но думаю что скорее всего его нет, т.к. были бы реализованы различные штуки касательно железа в реализации nouveau. Если есть время и деньги можно попробовать почитать чипы памяти распаянные на плате видеокарт. Код который выполняется на отдельном «процессоре» пишут разработчики, по поводу наличия/отсутствия микрокода не уверен, но думаю он там не нужен, ввиду примитивности ядер gpu

AKonia ★★
()
Ответ на: комментарий от V1KT0P

как бы нет, но иногда, например в малине организация работы видеоускорителя организована в два слоя и запускается цпу, а уже работа с ним идёт из под драйвера ос, что-то типо сервера на железе и драйвера клиента в ос

AKonia ★★
()
Ответ на: комментарий от V1KT0P

На интеле тоже есть, например i915/kbl_dmc_ver1_04.bin

на мобильных GPU прошивок нету

Есть, не важно мобильный он там или нет.

nvidia
()
Ответ на: комментарий от nvidia

Есть, не важно мобильный он там или нет.

Где-то можно про это поподробнее прочитать или это все находится за семью печатями?
Интересует можно ли их реверснуть и защищены ли они шифрованием и цифровой подписью.

V1KT0P ★★
() автор топика

Если я не ошибаюсь то по крайней мере в видеокартах AMD и Nvidia есть firmware/bios/vBIOS которая как минимум содержит настройки, но как максимум содержит код который выполняется на отдельном процессоре, это так или я ошибаюсь?

Необязательно.

VBIOS содержит два главных компонента:

  • код, который выполняется на центральном процессоре (option ROM) и отвечает за настройку видеокарты до загрузки ОС;
  • настройки для драйвера видеокарты внутри ОС, которые описывают особенности конкретной платы.

Есть ли среди этого всего какой-то дефолтный микрокод — в общем случае неизвестно.

Если содержат то что насчет возможности их модификации?

Где-то можно, где-то нельзя. Оверклокеры любят VBIOS модифицировать.

Что насчет других GPU? Intel, Adreno, Mali, Vivante, PowerVR, VideoCore.

Смешал бульдогов с носорогами. Adreno, Mali, Vivante, PowerVR и VideoCore — это всё GPU для встраиваемых систем. Там никакого «до загрузки ОС» нет и быть не может, а ОС со всеми драйверами и так в каждом случае собирается (и порой дописывается) под конкретное устройство со всеми его особенностями, поэтому никаких уровней абстракции в виде VBIOS там не нужно.

Ну а микрокод — это совсем другой разговор.

intelfx ★★★★★
()
Последнее исправление: intelfx (всего исправлений: 1)
Ответ на: комментарий от intelfx

Не микрокод, тогда уж, а firmware.

Microcode is a computer hardware technique that interposes a layer of organisation between the CPU hardware and the programmer-visible instruction set architecture of the computer.

nvidia
()
Ответ на: комментарий от nvidia

Гм, действительно, блоб для DMC они называют прошивкой.

intelfx ★★★★★
()
Ответ на: комментарий от V1KT0P

Отвечаю только про AMD-шные видеокарты (у невидии всё проприетарно)

Интересует можно ли их реверснуть

Да, можно: например, есть опенсорсная утилита, которая даёт довольно качественный дизассемблер с подробным описанием таблиц данных, функций и т.д., и есть проект открытого VBIOS «openatom» который делали для видеокарт в ноуте AMD Lenovo G505S (который кстати поддерживается опенсорсным БИОСом coreboot), но забросили где-то на 80-90% готовности после того как убедились в отсутствии бэкдоров в этом закрытом VBIOS: ведь не секрет, что на последние 20% зачастую уходит 80% времени.

защищены ли они шифрованием и цифровой подписью

Начиная с Vega/Navi, потому что в них пришёл сраный Platform Security Processor заимоствованный из процессоров архитектуры late 16h (Puma) / 17h (Ryzen: Picasso, …) - https://www.phoronix.net/image.php?id=2017&image=vega_secure_processor_show . Если нужна самая мощная видеокарта, где VBIOS пусть и закрыт - но дизассемблируется AtomDis, не подписан и в теории может быть заменён опенсорсным аналогом - обрати внимание на RX590. Правда, утилита AtomDis давно не обновлялась, поэтому для видеокарт которые вышли заметно позже её последнего обновления (как например RX590) дизассемблер получается менее качественным.

SakuraKun ★★★★★
()
Ответ на: комментарий от V1KT0P

В ноутах для экономии зачастую переносят VBIOS в основной БИОС-чип, и при включении компа основной x86 процессор подгружает этот VBIOS на видеокарту, после чего она может нормально инициализироваться.

SakuraKun ★★★★★
()
Ответ на: комментарий от V1KT0P

Где-то можно про это поподробнее прочитать или это все находится за семью печатями?

В вики и списках рассылки coreboot, например - у нас на этом собаку съели - ну и во всяких моддерских сообществах, где пытаются ревёрсить это добро ради разгона.

SakuraKun ★★★★★
()

В общем случае есть system firmware (исполняется на системном cpu) и device firmware (исполняется на mcu/gpu/cpu устройства). В случае pci устройств system firmware это обычно pci option rom https://en.wikipedia.org/wiki/Option_ROM. В случае видеоадаптеров этот pci option rom реализует в том числе интерфейс vesa bios https://en.wikipedia.org/wiki/VESA_BIOS_Extensions.

device firmware находится либо в пзу устройства, либо загружается в озу устройства. Загружать его может как system firmware, так и драйвер устройства. Например, драйвер i915.ko загружает device firmware в интеловские интегрированные gpu 9 (apollo lake, skylake, kaby lake), 10 (coffee lake), 11 (ice lake) поколений https://01.org/linuxgraphics/downloads/firmware.

iliyap ★★★★★
()
Ответ на: комментарий от atrus

видюха от noname производителя … переопределяла INT 10h … мультикарты перехватывали INT 13h

Перехватывали именно INT? Или перехватывали IRQ, которые обрабатывались данными INT?

question4 ★★★★★
()
Ответ на: комментарий от question4

А чёрт его знает, я так глубоко не вникался. Но если по сути. У тебя есть видеокарта. Стандарту VGA она следовать обязана. Так что эта часть может быть общей в BIOS компа. С другой стороны она SVGA, поддерживает VESA. Реализация VESA у каждого своя. Тебе надо реализовать функции инициализации SVGA видеорежима. Установки точки заданного цвета, что там ещё было?.. Как это сделать проще всего? По моему просто спроецировать часть ПЗУ с карты на адресное пространство процессора и заменить INT 10h на свою реализацию.

atrus ★★★★★
()
Ответ на: комментарий от atrus

По моему просто спроецировать часть ПЗУ с карты на адресное пространство процессора и заменить INT 10h на свою реализацию.

Это требует гарантии, что в BIOS соответствующая подпрограмма на одном месте во всех машинах. Очень сомневаюсь, что когда-либо так было.

Тебе надо реализовать функции инициализации SVGA видеорежима. Установки точки заданного цвета, что там ещё было?..

Проецировать небольшие блоки байтов — управляющих регистров в соответствующую область памяти. Где-то в первых килобайтах, если правильно помню.

question4 ★★★★★
()
Ответ на: комментарий от question4

Это требует гарантии, что в BIOS соответствующая подпрограмма на одном месте во всех машинах.

Нет, разумеется. В начале памяти (уже не помню по какому адресу) была стандартно размещена таблица векторов прерываний. Такой массив 1k длиной на все 256 int'ов. Перехват прерывания выполнялся запоминанием текущего значения в нужной ячейке и записи туда адреса своего обработчика. Собственно int x аппаратно выполняла переход на адрес в таблице.

управляющих регистров

Они как раз у разных производителей отличались. Т.е. не было никакого аппаратного стандарта SVGA.

atrus ★★★★★
()
Ответ на: комментарий от atrus

таблица векторов прерываний

А, про неё забыл.

question4 ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.