[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Noyau 2.6.21-4 et nvidia proprio => FAILED



On Sun, Jun 10, 2007 at 12:06:11PM +0200, laurux wrote:
> Le Sun, 10 Jun 2007 10:02:04 +0200, Yann Cohen a voulu dire :
> 
> > Bonjour,
> 
> [...]
> > FATAL: modpost: GPL-incompatible module nvidia.ko uses GPL-only symbol
> > 'paravirt_ops'
> > 
> > Remarque sur le noyau 2.6.18-4 pas de Pb d'installation de cette
> > version...
> > 
> > Une idée ?
> 
> Oui, ce problème a été abordé ici il n'y pas si longtemps (les 29/30
> mai pour être précis).
> Extrait de ma réponse :
> 
> "Ceci étant, selon la version du noyau (2.6.20 et
> 2.6.21), la compilation échouera à moins de recompiler le noyau en
> désactivant l'option CONFIG_PARAVIRT (Processor type and features --->
> "Paravirtualization support")."
> 
> Il faut donc recompiler le noyau en retirant cette option. Ce que j'ai
> fait et j'utilise le pilote de Nvidia avec un noyau 2.6.21, en
> attendant une solution qui ne nécessite pas de recompiler le noyau.


Depuis déjà plusieurs années, je dois régulièrement mettre à jour les
noyaux d'un parc de 80 machines, et parmi ces machines, nombre d'entre
elles (de marque Dell) ont des cartes Nvidia. J'installe donc les
gestionnaires Nvidia, et comme je dois gérer beaucoup de machines, je
l'installe via des paquets Debian.

J'ai dû automatiser la tâche de construire ces paquets. On va me dire «
Il y a module-assistant ». C'est vrai. Mais module-assistant ne fait pas
le paquet en plusieurs versions de façon automatique. De plus, il y a
parfois besoin de bricoler un peu les sources, voire les binaires, comme
depuis le noyau 2.6.18-4 (et le problème d'exportation de symbole
GPL/non-GPL de paravirt_ops).

Donc, j'ai construit mon élevage à modules. Je donne en argument trois
valeurs : la version du noyau pour lequel je veux construire, la version
des sources nvidia et la version des sources nvidia-legacy. Je lance mon
script, et je finis avec le module NVidia et NVidia-legacy compilé pour
les sous-architectures 686, 686-bigmem et k7 (ce sont les différents
types de noyau utilisés sur l'ensemble des 80 machines).

J'ai dû récemment modifier mon script pour qu'il tienne compte du bug
419943 (j'aurais pu mentionné plusieurs bugs spécifiquement sur le
paquet nvidia-kernel-source, comme 420585). J'en ai profité pour
corriger le bug 409204, qui ne nécessitait pas un gros effort.

Je vous livre mon script qui permet de générer le tout. Pour le faire
fonctionner, il faut copier les deux scripts prepare et cmdline-nvidia
dans un répertoire où il peut être exécuté, installer les paquets
nvidia-kernel-source, nvidia-kernel-legacy-source et tous les
nvidia-kernel-headers adéquats (par exemple linux-headers-2.6.21-1-686
si on ne veut que du 686) puis invoquer d'abord prepare puis (après
avoir mis dans le script les numéros convenables) cmdline-nvidia, puis
cmdline-nvidia -legacy. Au bout d'un moment, /var/cache/apt/archives
contient les paquets tout chauds.

Si le noyau doit être patché, il suffit de mettre dans
/usr/src/nvidia-patches le patch en question. Je vous livre le mien en
même temps.

La technique pour faire fonctionner le module même avec paravirt_ops m'a
été inspirée par cet article. Il implique de reconstruire linux-kbuild
en enlevant les deux lignes suivantes (autour de la ligne 1200) :

if (!mod->gpl_compatible)
    check_for_gpl_usage(exp->export, basename, exp->name);

Tous mes paquets recompilés sont disponibles sur le miroir partiel que
je gère. N'hésitez pas à recompiler si vous n'avez pas confiance !


Source: http://jean-christophe.dubacq.fr/index.php?post/2007/05/29/Mon-elevage-de-modules-nvidia



Reply to: