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:
Кодинг,
Одминское,
Туториалы