NVIDIA + RT Kernel

Feb 27, 2013 10:40


Share

Недавно возникла у меня необходимость собрать RT-ядро, так как всё же лучше пускать сервер Jack под ним.
Само ядро собралось и встало без проблем, а вот с дровами nvidia возникли реальные проблемы. Я, даже было, решил перейти на nouveau, но всё же есть в нём ряд глюков, которые пока не решены, но очень мешают жить.

Теперь кратко о самом патче для драйвера NVIDIA. В RT-ядре семафоры и спинлоки, используемые в драйвере по умолчанию, не канают, поэтому их надо заменить на rt-мьютексы и raw_spinlock_t соответственно. Также в новых ядрах нет определения CONFIG_PREEMPT_RT, т.к. оно было заменено на CONFIG_PREEMPT_RT_FULL. Пришлось потратить пару дней, собирая по крупицам информацию с разных сайтов, чтобы родить рабочий патч.

Поэтому это будет краткий HOWTO как собрать относительно свежее ядро для OpenSUSE и поставить на него свежие дрова от NVIDIA, ибо материала в сети по этому поводу немного и он порой весьма несвеж.

Share

Переходим под рута:

#su -
#cd /usr/src

Качаем ядро RT-патчк к нему, дрова Nvidia, и этот патч к ним:

#wget http://kernel.org/pub/linux/kernel/v3.x/linux-3.4.33.tar.bz2
#wget http://kernel.org/pub/linux/kernel/projects/rt/3.4/patch-3.4.33-rt47.patch.bz2
#wget http://ru.download.nvidia.com/XFree86/Linux-x86/310.32/NVIDIA-Linux-x86-310.32.run
#wget ftp://download.xskernel.org/pub/linux/NVIDIA-Linux-x86-310.32-rt.patch.bz2

Распаковываем и патчим:

#tar xjf linux-3.4.33.tar.bz2
#sh NVIDIA-Linux-x86-310.32.run --extract-only
#bunzip2 patch-3.4.33-rt47.patch.bz2
#bunzip2 NVIDIA-Linux-x86-310.32-rt.patch.bz2
#cd linux-3.4.33
#patch -p1 < ../patch-3.4.33-rt47.patch
#cd ../NVIDIA-Linux-x86-310.32
#patch -p1 < ../NVIDIA-Linux-x86-310.32-rt.patch

Конфигурим ядро:

#make cloneconfig
#make menuconfig

Устанавливаем:
General Setup -> Local version - append to kernel release -> "-rt"
Processor type and features -> Preemption Model -> "Fully Preemptible Kernel (RT)"
Processor type and features -> Timer frequency -> "1000 HZ"
Выходим, сохраняем конфигурацию. После этого собираем ядро (потребуется наличие утилиты rpmbuild):

#make rpm

Ждём, пока соберётся, ставим ядро:

#cd /usr/src/packages/RPMS/i386
#rpm -i kernel-3.4.33_rt47_rt-1.i386.rpm

Создаём ramdisk с модулями для ядра:

#cd /boot/grub
#mkinitrd -k vmlinuz-3.4.33-rt47-rt -i initrd-3.4.33-rt47-rt

Прописываем ядро в конфигурацию GRUB, параллельно баня nouveau (/boot/grub/menu.lst):

title RT -- openSUSE 12.2 - 3.4.33 (nvidia)
root (hd0,0)
kernel /vmlinuz-3.4.33-rt47-rt root=/dev/disk/by-id/ata-WDC_WD20EARS-00MVWB0_WD-WMAZA1774445-part3 resume=/dev/disk/by-id/ata-WDC_WD20EARS-00MVWB0_WD-WMAZA1774445-part5 splash=silent quiet brokenmodules=nouveau nouveau.blacklist=1 showopts vga=0x31a irqpoll
initrd /initrd-3.4.33-rt47-rt

Перезагружаемся под RT-ядром в runlevel 3.

Ставим драйвер от NVIDIA:

#su -
#cd /usr/src/NVIDIA-Linux-x86-310.32
#./nvidia-installer

Перезагружаемся уже в runlevel 5. После этого лично у меня на моей GeForce 210 дрова завелись и заработали. Насколько стабильно - пока не знаю, время покажет.

Оригинал записи в моём блоге
Categories: Кодинг, Одминское, Туториалы

kernel, patch, nvidia, linux, rt-linux, drivers, opensuse

Previous post Next post
Up