Содержание
О проекте Nouveau
Nouveau «nuvo» — проект по созданию свободных драйверов видеокарт компании Nvidia с поддержкой ускорения вывода трёхмерной графики. Изначально основан на распространяемом по свободной лицензии, но нечитаемом драйвере «nv» 2D-графики от nVIDIA.
Источник
Wiki-статья основана на LOR-новости Разработчикам nouveau снова нужна ваша помощь!
Введение от Миронова Ивана:
Для разработки и тестирования поддержки таймингов очень нужны дампы соответствующей таблицы из Video BIOS'а с разнообразных моделей видеокарт. С этим могут помочь все добровольцы, у которых есть видеокарта Nvidia и компьютер с Linux'ом. Используемый в системе драйвер, по идее, не имеет значения, так как все данные будут собираться напрямую «с железа», но разработчики рекомендуют при возможности использовать оригинальный проприетарный драйвер.
Для сборки потребуются установить дополнительные пакеты:
sudo apt-get install git libpci-dev libpciaccess-dev libxml2-dev \ cmake flex bison libx11-dev libvdpau-dev libxext-dev
Сначала скачиваем и собираем необходимые утилиты
git clone git://github.com/pathscale/envytools.git cd envytools cmake . make cd ..
Если один из этих комплектов утилит уже был скачан, лучше ещё раз обновить исходники, так как код изменяется достаточно часто. Затем получаем с помощью утилит нужную информацию (запускать нужно с правами администратора, также желательно временно отключить SELinux и другие подобные системы защиты):
В настоящее время мы занимаемся реверс-инжинирингом таймингов памяти таблицы vbios, но, как вы видите, мы немного нечётко понимаем, как оно на самом деле работает.
Мы сумели заставить nouveau работать на некоторых видеокартах, но теперь мы хотим знать, будет ли nouveau работать на всех устройствах.
Требования:
Вот список требований:
- Не встроенная (IGP) от NVC0 до NVE4 (включительно) карта nvidia, GeForce 4 или новее. Смотрите кодовые имена Nvidia, если вы не знаете, какая у вас карта. Остальная часть руководства также подходит и для более ранних карт, но образцов таких карт у нас достаточно.
- nvapeek, nvagetbios, nvbios (опционально): подробнее смотрите на странице, посвящённой инструментам для реверс-инжиниринга (англ.).
- Запустите проприетарный драйвер, nouveau или что-то другое — в общем-то, это не имеет особого значения. Однако для сбора информации рекомендовано задействовать именно проприетарный драйвер (blob).
Пожалуйста, обновите nvbios, прежде чем использовать его, он изменяется практически ежедневно.
Шаги:
Я полагаю, что у вас есть скомпилированные nvapeek
и vbtracetool
. Если вы не можете скомпилировать их, пожалуйста, расскажите о проблеме на freenode: каналы #pathscale (если это проблема с nvapeek
, спросите mwk
) или #nouveau (если это проблема vbtracetool
).
Определите тип своей карты
Просто запустите nvalist
, чтобы увидеть установленные GPU:
sudo ./envytools/nva/nvalist > card_list && cat card_list 0: 0000:03:00.0 NVA5 0a5000a2 1: 0000:04:00.0 NVC1 0c1080a1 2: 0000:08:07.0 NV03 00030110
В случае если у вас система с несколькими GPU, необходимо добавить параметр «-с» ко всем последующим командам nvapeek
, чтобы выбрать карту, с которой он должен работать.
Если ваша карта обозначена, как NV4C, NV4E, NV67, NV68, NVAA, NVAC или NVAF, то это встроенная видеокарта (IGP), в которой, следовательно, нет ни контроллера памяти, ни их таймингов. В противном случае, она имеет тайминги, и вы можете сделать полезный дамп.
Дамп VBIOS
Далее декодируем Video BIOS:
sudo ./envytools/nva/nvagetbios > nvXX_vbios.rom
Если не работает, вы можете попробовать:
sudo ./envytools/nva/nvagetbios -s prom > nvXX_vbios.rom
Если VBIOS всё ещё пуст, пожалуйста, выполните шаги, описанные на вики-странице DumpingVideoBios (англ.).
Получить strap вашей карты
Получение strap карты осуществляется путём чтения адреса 0x00101000. Strap — это аппаратный (hardwired) регистр, и он даёт некоторые сведения о конкретной карте. Его значение установлено производителем GPU и не может быть получено из VBIOS.
sudo ./envytools/nva/nvapeek 0x00101000 > nvXX_strap_peek
Получение установленных таймингов
от NV40 до NVC0 (не включая NVC0)
Для получения текущих таймингов нужно просто прочитать 32 байта, начиная с 0x100220:
sudo ./envytools/nva/nvapeek 0x100220 0x30 > nvXX_timing_peek sudo ./envytools/nva/nvapeek 0x1002c0 0x30 > nvXX_mr_peek
NVC0 (также известны, как Fermi)
Для получения текущих таймингов нужно просто прочитать 32 байта, начиная с 0x10f290:
sudo ./envytools/nva/nvapeek 0x10f290 0x30 > nvXX_timing_peek
Желаете помочь ещё больше? (Опционально, требуется nvbios)
Это было слишком просто? Ну что ж, вы можете помочь нам сэкономить немного времени, посмотрев на вывод nvbios
для вашего BIOS.
Для этого просто выполните команду nvbios
следующим образом:
sudo ./envytools/nvbios/nvbios nvXX_vbios.rom > nvXX_vbios_parsed
Она может выдать предупреждение о том, что не установлено значение strap
. Это сообщение можно проигнорировать.
Вы получите очень длинный вывод, и где-то в конце вы найдёте сроки, где разбирается таблица таймингов. Попробуйте найти элемент, который будет соответствовать тому, что вы получили в nvXX_timing_peek.
Есть два варианта:
Если вы нашли точное соответствие, то это отличная новость! Наш код работает у вас! Пожалуйста, уведомите нас в IRC.
Если вы не нашли соответствия, то, пожалуйста, отправьте нам письмо (см. ниже).
Хотите помочь НАМНОГО больше?
Эй, вы уже проделали большую работу, но есть одна последняя вещь, которую мы должны знать о вашей карте… это то, как проприетарный драйвер (blob) использует вашу видеокарту!
Вы можете отслеживать всё, что делает проприетарный драйвер (blob), выполняя следующие инструкции:Выполнение mmiotrace (англ.)
Мы заранее благодарим вас.
И ещё
Выполните1)
lspci -vnn >lspci.output
Отправка нам письма
Пожалуйста, отправьте письмо по адресу martin.peres[собака]ensi-bourges[точка]fr со всеми сгенерированными вами файлами.
Также приложите, пожалуйста, вывод команды «lspci -vnn».
Предлагаю использовать тему письма: «Testing Memory Timings of 'название вашей видеокарты'».
Это письмо мы перешлём также другим разработчикам.
ВНИМАНИЕ: Трижды проверьте, что вы прикрепили все файлы, прежде чем нажмёте на кнопку отправки! В письме должно быть 7 файлов:
- card_list
- nvXX_vbios.rom
- nvXX_strap_peek
- nvXX_timing_peek
- nvXX_mr_peek - не для всех видеокарт
- nvXX_vbios_parsed
- lspci.output
Благодарность
Большое спасибо за помощь реверс-инженерам оборудования nvidia. Обе команды разработчиков pscnv
и nouveau
благодарят вас!.
Ссылки
- Nouveau testers wanted (англ.)