Это инструкции по трассировке проприетарного драйвера Nvidia для реверсивного инжинеринга Nouveau. Больше информации о mmio-trace можно найти на странице MmioTrace
Перед использованием этого howto ознакомьтесь с примечаниями
Если у вас ядро версии 2.6.27-rc1 или более новое, пожалуйста следуйте инструкциям в файле Documentation/tracers/mmiotrace.txt вместо этого howto. Указания по отправке результатов в конце данной страницы ещё актуальны.
HowTo
1. Получите свежую копию mmio-trace из git репозитария, ветки master.
git clone git://people.freedesktop.org/~pq/mmio-trace
cd mmio-trace
- По умолчанию активная ветвь "master", вам не надо менять её.
Убедитесь что в вашем ядре включены DebugFS (CONFIG_DEBUG_FS) и RelayFS (CONFIG_RELAY). Вы можете попробовать команду zcat /proc/config.gz | grep "CONFIG_DEBUG_FS\|CONFIG_RELAY" или grep "CONFIG_DEBUG_FS\|CONFIG_RELAY" /boot/config-`uname -r` # on debian. Если это не так:
Получите копию исходных кодов ядра Linux, предпочтительно версий 2.6.19 - 2.6.23. Версии 2.6.24 и 2.6.25 также должны работать, но вы должны пропатчить ядро и эта инструкция не полностью применима (смотри MmioTrace). Версии меньше 2.6.19 не поддерживаются.
- Сконфигурируйте ваше ядро включив DebugFS (CONFIG_DEBUG_FS) и RelayFS (CONFIG_RELAY)
- Соберите и установите ваше ядро, перезагрузитесь.
1. Если у вас SMP система, укажите maxcpus=1 в командной строке при загрузке ядра, или отключите все кроме 1 ЦП через sysfs (Для отключения ЦП выполните echo 0 > /sys/devices/system/cpu/cpu<число>/online, а для включения echo 1 > /sys/devices/system/cpu/cpu<число>/online)
Соберите для ядра модуль nvidia, если вы ещё не сделали это. Убедитесь что модуль nvidia НЕ загружен (lsmod). Вы можете выгрузить его с помощью rmmod nvidia. (Вы должны выключить X перед этим)
Соберите mmio-trace (просто выполните make)
- Перехватите модуль nvidia
т.е. ./hook-module /lib/modules/2.6.20-rc6-kmmio/nvidia/nvidia.ko nvidia-hook.ko (где . исходная директория для mmio-trace)
1. Смонтируйте debugfs в /debug
mkdir -p /debug
mount -t debugfs debugfs /debug
- Загрузите модуль mmio
insmod mmio.ko
Запустите ./mmio-trace, он создаст файл cpu0 в текущей директории, этот файл будет быстро расти после запуска X.
- Загрузите перехваченый модуль nvidia
insmod nvidia-hook.ko
Запустите Xorg, включите glxgears на несколько секунд и выйдите из Xorg. Теперь у вас есть trace, и всё что осталось - это прекратить трассировку.
Выгрузите перехваченый модуль: rmmod nvidia
Убейте запущеный mmio-trace. Ctrl-c, например.
Выгрузите mmio модуль: rmmod mmio
Для выполнения пунктов 3, 4, 7-10, и 12-14 необходимы права root.
Отправка результатов
Если вы хотите послать нам дампы mmio-trace, пожалуйста посылайте их на mmio dot dumps at gmail dot com. Пожалуйста, запакуйте в сжатый архив файл cpu0} и в свободном стиле опишите что вы делали во время трассировки. Вывод lspci уже включён в cpu0, но добавьте его вывод к описанию своих действий, вместе с uname -a и версией видео драйвера. Также, сообщите к какому выходу подключён монитор, используете-ли tv-in/out и какой режим использовали. Имя архива должно содержать PCI id и GPU family или марку вашей видеокарты. Спасибо за помощь.

