Как слить 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 подписчика

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

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

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

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

6
Автор поста оценил этот комментарий

Есть тема такая, у меня amd radeon hd 6650m видяха. На старых драйверах всё хорошо, но вот новые - они под 6600-6700 series и при их установке по экрану "бегают" горизонтальные полоски шириной в 1-2 пикселя и шириной во весь монитор. При этом под нагрузкой всё хорошо, то бишь запускаешь игру и никаких полосочек или еще чего. Даже если игру свернуть (если она остаётся активной), то полосочек нет. Как я понимаю, это проблема в профиле питания или чего-то подобного... Многие сталкиваются с такой проблемой, но AMD помочь не желают.

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

А может проще зайти под винду и вытащить/зашить биос через Ati Winflash? А редактировать в vbe7

раскрыть ветку
4
Автор поста оценил этот комментарий
А собсна объясните Алёшке: на кой это нужно?
раскрыть ветку
1
Автор поста оценил этот комментарий
Спасибо за подробное описание. Занес в избранное.