О проекте 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 благодарят вас!.

Ссылки

1)
информация отсюда