Как слить BIOS видеокарты в Linux и немного побаловаться с ним...

Еще пост технического плана. Может, кому-то будет полезно.

ДИСКЛЕЙМЕР: вы можете убить свою карту, если не понимаете сути написанного, и даже если понимаете - тоже можете, как и я сам. за убитое железо ответственности я не несу.


Как я уже писал, на барахолке была взята карта Radeon HD4890. Появилась очевидная проблема - оно довольно криво работало с энергосбережением, шумело карлсоном и всячески меня раздражало. Гугление результата не дало. Заметил одну характерную фигню - профили питания читаются неверно, да и вентиль уж как-то крайне агрессивно настроен.

Решил поковырять биос, и тут выяснилось, что есть два стула как минимум два способа слить биос - верный и не очень. Не очень верный - это через фичи вида:


echo 1 > /bla/bla/card0/rom
cat /bla/bla/card0/rom > bios.bin


Потому как скорее всего считается не больше 64К, что на полный биос не тянет.

Как слить правильно(ну, наверное)? С /dev/mem, куда наш микрокод заботливо отмаплен.

Перво-наперво узнаем точный размер биоса в интернете, система скорее всего будет безбожно врать, в моем случае это 128К, или 0x20000 байт.

Потом надо узнать адрес, откуда биос начинается. Это можно сделать либо через (от рута)


grep 'Video ROM' /proc/iomem

Либо выполнить (от пользователя)


lspci -v | grep -C 10 ROM

и найти строку Expansion ROM at ... для нужной карты.


Наконец, получаем биос командой типа


dd if=/dev/mem of=vgabios.bin bs=1c skip=$[0x000c0000] count=$[0x20000]

где 0x000c0000 - адрес начала, 0x20000 - размер биоса в байтах (128К).

Вот, получили vgabios.bin. Его можно расколупать редактором биоса, поправить профили, управление вертушками, да и разогнать даже. Для разных карт редакторы свои.


Я использовал RBE под Wine.

Как слить BIOS видеокарты в Linux и немного побаловаться с ним... Железо, IT, Linux, Длиннопост, Инструкция

Теперь самое интересное - пробный заезд. Шить в карту сходу - идея неоч.

Но я тут уже рассказывал про проброс видюхи в Qemu. Вот пост:


http://pikabu.ru/story/eshche_odin_post_kak_igrat_v_virtualnoy_mashine_4736956


Так вот, есть возможность подргрузить туда биос из файла, не прошивая его. Хоть сто биосов тестируйте, с некорректным карта просто не стартанет, хотя риск спалить, конечно, остается. Добьем строчку:


-device vfio-pci,host=06:00.0,id=hostdev0,multifunction=on,x-vga=on,romfile=/path/to/vgabios.bin


И, на удивление, все сразу заработало, загрузил образ KDE neon, карта перестала шуметь. То ли прежний владелец, то ли Sapphire такие молодцы - поставили в powersave 1.26V, хотя карта нормально пашет и при 0.93V. Разница в потреблении будет аж целых 80%. Ну и вертушка была задрана на 100% при 60C.

Теперь о прошивке. Хоть подгрузка из файла и работает, мне осталось убедиться, что прочитанное сверх 64К - это точно не рандомный мусор из памяти, и тогда можно шить.

За сим откланяюсь.

GNU/Linux

1K пост15.5K подписчиков

Добавить пост

Правила сообщества

Все дистрибутивы хороши.

Будьте людьми.

Вы смотрите срез комментариев. Показать все
7
DELETED
Автор поста оценил этот комментарий
Комментарий удален. Причина: данный аккаунт был удалён
раскрыть ветку (10)
1
Автор поста оценил этот комментарий

добавлю вот что.

подозреваю, биос я все-таки снял некорректно, сверка в hex-редакторе показывает различия со скачанными биосами. я так понимаю, это баг, касающийся именно этой серии карт. увы(

подсовывание в qemu работает нормально, но вот шить его - точно идея не из лучших.

раскрыть ветку (9)
DELETED
Автор поста оценил этот комментарий
Комментарий удален. Причина: данный аккаунт был удалён
раскрыть ветку (7)
1
Автор поста оценил этот комментарий

после 61К ничего не читается, вернее, все забито пустотой, т.к на hd4850 биос 61К, а на hd4870/4890 128К, но для системы разницы между этими картами особой нет.

у hd4890 после 61К тоже много пустоты, но есть небольшой кусок, судя по всему, отвечающий за память GDDR5. такие дела.


странно, что qemu подвоха не видит, и карта нормально грузится. надо было винду попробовать загрузить.

раскрыть ветку (6)
DELETED
Автор поста оценил этот комментарий
Комментарий удален. Причина: данный аккаунт был удалён
раскрыть ветку (2)
1
Автор поста оценил этот комментарий

я просто hex-редактором открыл и посмотрел. но так то у них checksum различаются.

раскрыть ветку (1)
DELETED
Автор поста оценил этот комментарий
Комментарий удален. Причина: данный аккаунт был удалён
DELETED
Автор поста оценил этот комментарий
Комментарий удален. Причина: данный аккаунт был удалён
раскрыть ветку (2)
1
Автор поста оценил этот комментарий

И скачанные весят по 128К, и RBE говорит, что корректный размер - 128К.

Я даже сейчас разыскал версию биоса, которая прошита в мою карту, и это оказался отредактированный биос от Atomic версии. Забавенько.

раскрыть ветку (1)
DELETED
Автор поста оценил этот комментарий
На Techpowerup найдите родной биос (чтобы совпадал вендор карты, видеочип, объем памяти и производитель памяти). Эту карту, похоже, разгоняли.

А если карта запорется при прошивке, достаточно воткнуть какую-нибудь старую PCI-карточку (или интегрированное в проц видео включить), назначить ее в биосе основной, воткнуть пациента и прошить. Не раз свою 4890 так реанимировал.
Автор поста оценил этот комментарий

в винде можно настроить из msi afterburner

Вы смотрите срез комментариев. Чтобы написать комментарий, перейдите к общему списку