Как слить 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.
Теперь самое интересное - пробный заезд. Шить в карту сходу - идея неоч.
Но я тут уже рассказывал про проброс видюхи в 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 подписчиков
Правила сообщества
Все дистрибутивы хороши.
Будьте людьми.