Chargement...
 
Skip to main content

2 - Les distributions et les noyaux


kernel RT et drivers nvidia ?

Bonsoir à tous, j'utilise Gentoo pour mon desktop et j'ai décidé de mettre en place un kernel RT pour la MAO (2.6.28-rt16). Cependant je ne parviens pas à emerger les nvidia-drivers, visiblement c'est un problème typique des kernels RT...

Ceux qui utilisent un kernel RT avec gentoo, utilisez vous les drivers Nvidia ? si oui comment avez vous contourné ce problème ?


Merci d'avance
France
Salut,
J'utilise aussi gentoo avec un kernel RT et les drivers-nvidia : ça marche niquel.
As tu lu cette page : http://www.gentoo.org/doc/fr/nvidia-guide.xml
Je ne me souviens plus avoir fait des réglages dans le kernel, mais en tout cas je n'ai pas de problèmes pour compiler les drivers-nvidia.

Par contre tout dépend du modèle de ta carte, je me souviens avoir eu quelques soucis sur certaines version des drivers-nvidia, qu'il m'était impossible d'émerger.
Donc tu peux vérifier sur la page que je t'ai indiquée, si tu as les bons rélgages dans ton kernel, et puis sinon essayer différentes version du paquet driver-nvidia.
Rappel pour installer une version spécifique :

sudo emerge -av =nvidia-drivers-xxx.x.x

(tu remplaces les x par la version que tu veux.)
Oui j'ai testé 3 versions : 177.82, 180.22 et 180.29 : même erreur.

J'ai les bons réglages (j'ai comparé avec mon kernel classique, sur lequel je n'ai aucun problème avec les drivers).


Tu as quelle version de nvidia ?
France
j'ai la version 180.22 avec les flags suivants :
gtk kernel_linux multilib

je suis en 64bits, avec un noyau 2.6.26.8-rt12
J'ai une geforce Go 7900 GS

Tu es en quelle architecture : 32 / 64 bits ?
Quel es le modèle de ta carte graphique ?
je suis en 64 bits
ma carte est une 7900 gs
France
As tu activé la compatibilité 32bits dans ton kernel ? (peut etre que les drivers nvidia ont besoin de certaines librairies 32bits.
quel est le message d'erreur que tu obtiens ?
quote
mkdir -p /var/tmp/portage/x11-drivers/nvidia-drivers-177.82/work/NVIDIA-Linux-x86_64-177.82-pkg2/usr/src/nv/.tmp_versions ; rm -f /var/tmp/portage/x11-drivers/nvidia-drivers-177.82/work/NVIDIA-Linux-x86_64-177.82-pkg2/usr/src/nv/.tmp_versions/*
make -f scripts/Makefile.build obj=/var/tmp/portage/x11-drivers/nvidia-drivers-177.82/work/NVIDIA-Linux-x86_64-177.82-pkg2/usr/src/nv
cc -Wp,-MD,/var/tmp/portage/x11-drivers/nvidia-drivers-177.82/work/NVIDIA-Linux-x86_64-177.82-pkg2/usr/src/nv/.nv.o.d -nostdinc -isystem /usr/lib/gcc/x86_64-pc-linux-gnu/4.1.2/include -DKERNEL -Iinclude -include include/linux/autoconf.h -Wall -Wundef -Wstrict-prototypes -Wno-trigraphs -fno-strict-aliasing -fno-common -Werror-implicit-function-declaration -Os -fno-stack-protector -m64 -march=k8 -mno-red-zone -mcmodel=kernel -funit-at-a-time -maccumulate-outgoing-args -DCONFIG_AS_CFI=1 -DCONFIG_AS_CFI_SIGNAL_FRAME=1 -pipe -Wno-sign-compare -fno-asynchronous-unwind-tables -mno-sse -mno-mmx -mno-sse2 -mno-3dnow -Iinclude/asm-x86/mach-default -fomit-frame-pointer -Wdeclaration-after-statement -Wno-pointer-sign -I/var/tmp/portage/x11-drivers/nvidia-drivers-177.82/work/NVIDIA-Linux-x86_64-177.82-pkg2/usr/src/nv -Wall -Wimplicit -Wreturn-type -Wswitch -Wformat -Wchar-subscripts -Wparentheses -Wno-multichar -Werror -mcmodel=kernel -mno-red-zone -MD -Wno-cast-qual -Wno-error -DKERNEL -DMODULE -DNVRM -DNV_VERSION_STRING=\"177.82\" -UDEBUG -U_DEBUG -DNDEBUG -DMODULE -D"KBUILD_STR(s)=#s" -D"KBUILD_BASENAME=KBUILD_STR(nv)" -D"KBUILD_MODNAME=KBUILD_STR(nvidia)" -c -o /var/tmp/portage/x11-drivers/nvidia-drivers-177.82/work/NVIDIA-Linux-x86_64-177.82-pkg2/usr/src/nv/nv.o /var/tmp/portage/x11-drivers/nvidia-drivers-177.82/work/NVIDIA-Linux-x86_64-177.82-pkg2/usr/src/nv/nv.c
/var/tmp/portage/x11-drivers/nvidia-drivers-177.82/work/NVIDIA-Linux-x86_64-177.82-pkg2/usr/src/nv/nv.c: In function 'nv_alloc_file_private':
/var/tmp/portage/x11-drivers/nvidia-drivers-177.82/work/NVIDIA-Linux-x86_64-177.82-pkg2/usr/src/nv/nv.c:1854: error: implicit declaration of function '__SEMAPHORE_INITIALIZER'
/var/tmp/portage/x11-drivers/nvidia-drivers-177.82/work/NVIDIA-Linux-x86_64-177.82-pkg2/usr/src/nv/nv.c:1854: error: invalid initializer
/var/tmp/portage/x11-drivers/nvidia-drivers-177.82/work/NVIDIA-Linux-x86_64-177.82-pkg2/usr/src/nv/nv.c: In function 'nv_lock_init_locks':
/var/tmp/portage/x11-drivers/nvidia-drivers-177.82/work/NVIDIA-Linux-x86_64-177.82-pkg2/usr/src/nv/nv.c:3800: error: invalid initializer
/var/tmp/portage/x11-drivers/nvidia-drivers-177.82/work/NVIDIA-Linux-x86_64-177.82-pkg2/usr/src/nv/nv.c:3801: error: invalid initializer
make3: *** /var/tmp/portage/x11-drivers/nvidia-drivers-177.82/work/NVIDIA-Linux-x86_64-177.82-pkg2/usr/src/nv/nv.o Error 1
make2: *** _module_/var/tmp/portage/x11-drivers/nvidia-drivers-177.82/work/NVIDIA-Linux-x86_64-177.82-pkg2/usr/src/nv Error 2
NVIDIA: left KBUILD.
nvidia.ko failed to build!
make1: *** module Error 1
make: *** module Error 2
*
* ERROR: x11-drivers/nvidia-drivers-177.82 failed.
* Call stack:
* ebuild.sh, line 49: Called src_compile
* environment, line 3758: Called linux-mod_src_compile
* environment, line 2765: Called die
* The specific snippet of code:
* eval "emake HOSTCC="$(tc-getBUILD_CC)" CROSS_COMPILE=${CHOST}- LDFLAGS="$(get_abi_LDFLAGS)" ${BUILD_FIXES} ${BUILD_PARAMS} ${BUILD_TARGETS} "
die "Unable to emake HOSTCC="$(tc-getBUILD_CC)" CROSS_COMPILE=${CHOST}- LDFLAGS="$(get_abi_LDFLAGS)" ${BUILD_FIXES} ${BUILD_PARAMS} ${BUILD_TARGETS}";
* The die message:
* Unable to emake HOSTCC=x86_64-pc-linux-gnu-gcc CROSS_COMPILE=x86_64-pc-linux-gnu- LDFLAGS= IGNORE_CC_MISMATCH=yes V=1 SYSSRC=/usr/src/linux SYSOUT=/usr/src/linux HOST_CC=x86_64-pc-linux-gnu-gcc clean module
*
* If you need support, post the topmost build error, and the call stack if relevant.
* A complete build log is located at '/var/tmp/portage/x11-drivers/nvidia-drivers-177.82/temp/build.log'.
* The ebuild environment file is located at '/var/tmp/portage/x11-drivers/nvidia-drivers-177.82/temp/environment'.
*
>>> Failed to emerge x11-drivers/nvidia-drivers-177.82, Log file:
>>> '/var/tmp/portage/x11-drivers/nvidia-drivers-177.82/temp/build.log'
* Messages for package x11-drivers/nvidia-drivers-177.82:
*
* ERROR: x11-drivers/nvidia-drivers-177.82 failed.
* Call stack:
* ebuild.sh, line 49: Called src_compile
* environment, line 3758: Called linux-mod_src_compile
* environment, line 2765: Called die
* The specific snippet of code:
* eval "emake HOSTCC="$(tc-getBUILD_CC)" CROSS_COMPILE=${CHOST}- LDFLAGS="$(get_abi_LDFLAGS)" ${BUILD_FIXES} ${BUILD_PARAMS} ${BUILD_TARGETS} "
die "Unable to emake HOSTCC="$(tc-getBUILD_CC)" CROSS_COMPILE=${CHOST}- LDFLAGS="$(get_abi_LDFLAGS)" ${BUILD_FIXES} ${BUILD_PARAMS} ${BUILD_TARGETS}";
* The die message:
* Unable to emake HOSTCC=x86_64-pc-linux-gnu-gcc CROSS_COMPILE=x86_64-pc-linux-gnu- LDFLAGS= IGNORE_CC_MISMATCH=yes V=1 SYSSRC=/usr/src/linux SYSOUT=/usr/src/linux HOST_CC=x86_64-pc-linux-gnu-gcc clean module
*
* If you need support, post the topmost build error, and the call stack if relevant.
* A complete build log is located at '/var/tmp/portage/x11-drivers/nvidia-drivers-177.82/temp/build.log'.
* The ebuild environment file is located at '/var/tmp/portage/x11-drivers/nvidia-drivers-177.82/temp/environment'.
*
quote

pour la compatibilité 32bits tu parles de l'IA32 emulation ? si c'est le cas oui c'est activé.
France
bon ben je sèche.
Tu peux toujours poser ta question sur le forum de gentoo, ou alors directement sur le chan IRC serveur Freenode channel #gentoofr

bon courage.
J'ai résolu finalement le problème en activant l'option x86 PAT de mon kernel (une amélioration de MTRR d'après ce que j'ai compris)
France
Ok c'est bon à savoir. 😉
Salut !

Je me suis retrouvé confronté au même problème à savoir les derniers pilotes ne compilent pas sur le dernier noyau RT.

Bon en cherchant un peu on te dit que NVIDIA ne supporte pas les noyaux temps réel blah blah, et puis je suis tombé sur une page bien cachée sur la toile qui expliquait comment patcher le driver portant le numero de version 256.44 pour le faire marcher avec le dernier noyau RT (à savoir le 2.6.33.7.2-rt30)

Bon... On est plus à ce numero de version de driver NVIDIA mais le patch est adaptable aisément :


1. Telecharger le driver NVIDIA (pour l'exemple ici j'ai telecharger le NVIDIA-Linux-x86_64-260.19.29.run ). Il faudra biensur le rendre executable .
2. Tapez :

Copy to clipboard
cd /usr/src /[path to the downloaded driver]/NVIDIA-Linux-x86_64-260.19.29.run -x


Ca va juste extraire le contenu de l'installeur dans /usr/src/

3. Ouvrez le fichier /usr/src/NVIDIA-Linux-x86_64-260.19.29/kernel/nv-linux.h et effectuez les modifs suivantes :

Remplacez :
Copy to clipboard
#if defined(CONFIG_PREEMPT_RT) typedef atomic_spinlock_t nv_spinlock_t; #define NV_SPIN_LOCK_INIT(lock) atomic_spin_lock_init(lock) #define NV_SPIN_LOCK_IRQ(lock) atomic_spin_lock_irq(lock) #define NV_SPIN_UNLOCK_IRQ(lock) atomic_spin_unlock_irq(lock) #define NV_SPIN_LOCK_IRQSAVE(lock,flags) atomic_spin_lock_irqsave(lock,flags) #define NV_SPIN_UNLOCK_IRQRESTORE(lock,flags) \ atomic_spin_unlock_irqrestore(lock,flags) #define NV_SPIN_LOCK(lock) atomic_spin_lock(lock) #define NV_SPIN_UNLOCK(lock) atomic_spin_unlock(lock) #define NV_SPIN_UNLOCK_WAIT(lock) atomic_spin_unlock_wait(lock) #else typedef spinlock_t nv_spinlock_t; #define NV_SPIN_LOCK_INIT(lock) spin_lock_init(lock)

par
Copy to clipboard
#if defined(CONFIG_PREEMPT_RT) typedef raw_spinlock_t nv_spinlock_t; #define NV_SPIN_LOCK_INIT(lock) raw_spin_lock_init(lock) #define NV_SPIN_LOCK_IRQ(lock) raw_spin_lock_irq(lock) #define NV_SPIN_UNLOCK_IRQ(lock) raw_spin_unlock_irq(lock) #define NV_SPIN_LOCK_IRQSAVE(lock,flags) raw_spin_lock_irqsave(lock,flags) #define NV_SPIN_UNLOCK_IRQRESTORE(lock,flags) \ raw_spin_unlock_irqrestore(lock,flags) #define NV_SPIN_LOCK(lock) raw_spin_lock(lock) #define NV_SPIN_UNLOCK(lock) raw_spin_unlock(lock) #define NV_SPIN_UNLOCK_WAIT(lock) raw_spin_unlock_wait(lock) #else typedef spinlock_t nv_spinlock_t; #define NV_SPIN_LOCK_INIT(lock) spin_lock_init(lock)


et

Copy to clipboard
#if defined(CONFIG_PREEMPT_RT) #define NV_INIT_MUTEX(mutex) semaphore_init(mutex) #else #if !defined(__SEMAPHORE_INITIALIZER) && defined(__COMPAT_SEMAPHORE_INITIALIZER) #define __SEMAPHORE_INITIALIZER __COMPAT_SEMAPHORE_INITIALIZER


par

Copy to clipboard
#if defined(CONFIG_PREEMPT_RT) #define NV_INIT_MUTEX(mutex) sema_init(mutex,1) #else #if !defined(__SEMAPHORE_INITIALIZER) && defined(__COMPAT_SEMAPHORE_INITIALIZER) #define __SEMAPHORE_INITIALIZER __COMPAT_SEMAPHORE_INITIALIZER


4. Lancez:
Copy to clipboard
/usr/src/NVIDIA-Linux-x86_64-260.19.29/nvidia-installer


Et foila !


Au passage ces lignes prouve bien que le support temps réel des pilotes NVIDIA est prévu (mais non supporté).
Pour l'instant sur ma machine je ne déplore aucun bug lié au pilote NVIDIA modifié ainsi.
excellent ces infos...
a mon avis tu pourrais les mettre dans le wiki, ça servira à plus de monde que dans ce post, ici ...

tu peux nous faire un copier coller vers cette page stp ?
dans la partie installation ça me semble bien, en précisant bien les distribs et versions concernées...

merci

jy