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

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

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

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

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

1
Автор поста оценил этот комментарий
поставить винду - это проще
Ибо.

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

А для винды скачать гуи приложение и нажать кнопку.

Да и чтобы ввести команду надо тоже поставить линукс.


Нет, я не против линукса, просто отмечаю тот факт что на винде это реально проще. Люди не замечают тот факт что чтобы сделать подобную вещь на винде уходит меньше времени на обучение, да возможно в итоге на линуксе можно зная команды делать это за минуты, но чтобы узнать что за команды нужны, какие параметры к этим командам нужно делать нужно порой потратить несколько недель.

И вот в этом аспекте винда проще.

раскрыть ветку (1)
4
Автор поста оценил этот комментарий

Это бессмысленный разговор.

Жить в париже проще, чем во владивостоке, пойти из владивостока в париж за хлебом - нет. Даже если там сервис получше, чем в местном универмаге.

показать ответы
2
Автор поста оценил этот комментарий

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

раскрыть ветку (1)
3
Автор поста оценил этот комментарий
А может проще зайти под винду и вытащить/зашить биос через Ati Winflash?

Если ты считаешь, что поставить винду - это проще, чем выполнить по сути одну команду в консоли... ну я даже не знаю, что тут возразить...


А редактировать в vbe7
А vbe7 поддерживает карты 4xxx?

показать ответы
2
Автор поста оценил этот комментарий

ох бля, ты настоящий!!! я думал такие линуксоиды только на башорге бывают!)

и это. А нах ты вообще биос редактировал? Я сколько их не шил, всегда бекапил только для того, чтобы откатить назад "если шо не так". А после бекапа шил заводской прошивкой, и всё всегда оживало. Редактировать биос самому, чтобы вентилятор помедленнее крутил это пиздец решение линуксоида) Типо колечко на ключах разогнулось, пойду куплю токарный станок

раскрыть ветку (1)
2
Автор поста оценил этот комментарий

удивительно, что человек, который "сколько их не шил" удивляется, что их кто-то редактирует.

я, может, его расколупал, чтобы в powersave карту перевести и на слабый БП повесить, но кого это интересует, если я линуксоид, правда?

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

спасибо)
но в целом боль и печаль - у этого монитора нет звуковыхода.

ac97 под 10 так и не завелась.

У pa стал нормальный звук только после долгого подбора параметров.

Кстати, вы случаем не смотрели https://www.kernel.org/doc/Documentation/power/pm_qos_interf... ?
теоретически, если вырубить c-states несколько повышается отзывчивость виртуалки.
Для 100+ виртуалок эффект заметен, а для одной - как будто плацебо)

раскрыть ветку (1)
1
Автор поста оценил этот комментарий
ac97 под 10 так и не завелась

надо дрова ставить в безопасном режиме. в гугле есть на эту тему пару эссе.

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

romfile=/path/to/vgabios.bin
вот за это отдельное огромное спасибо.
Однако могу добавить что можно полноценно работать с биосом видюхи, проброшенной в виртуалку (vt-d/iommu). Для nvidia под линух нет свежих утилит почему-то.
Считывал и прошивал. Но страаашно)
P.S. у кого-нибудь получилось добиться чистого звука? "почти" у самого, через pa

раскрыть ветку (1)
1
Автор поста оценил этот комментарий
P.S. у кого-нибудь получилось добиться чистого звука? "почти" у самого, через pa

лучше всего через hdmi.

еще сносный звук был через ac97+ALSA, но оно грузило проц вроде бы, что усугубляло ситуацию при ошибке 43.

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

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

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

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

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

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

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

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


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

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

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

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

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

показать ответы