Comment change-t-on de driver sous Linux ? - pour une carte WiFi

Bonjour à tous

Si j’ai bien tout suivi, les pilotes et les librairies partagées sous Linux sont dans /lib c’est bien ça ?

J’ai une carte WiFi que Linux reconnaît de base (une Netgear WG311T je crois), et je voudrais savoir quels drivers il utilise, et éventuellement les changer. Or c’est là que je me heurte à un inconnu gênant : Comment est-ce que Linux choisit les pilotes qu’il utilise ? Comment en ajouter ou en enlever ?

les pilotes sont dans le noyau (sous forme de module) et sont mis a jour avec lui.

kwâ !? Tous ? Ca veut dir qu’il faut … recompiler le noyau !? Je le sens mal tout à coup :paf:

Mais pourtant il doit bien y en avoir qui sont en dehors sinon on ne pourrait pas remplacer les pilotes libres pour la vidéo par le spilotes propriétaires non ?

ca veut pas dire qu’il faut absolument recompiler le noyau. C’est une des possibilites. L’autre est d’attendre que ta distribution propose une nouvelle version du noyau pour que la mise a jour se fasse avec ton gestionnaire de packages. C’est tout.
Quoiqu’il en soit, si ton matos marche, qu’attends tu d’une mise a jour des ce driver ?

Les pilotes proprio pour les cartes 3D sont tres bordeliques a installer. La procedure d’install impose une compil d’un bout de module et l’install de libs.
Et puis l’affichage est particulier sous linux. Xorg possede aussi des drivers a lui pour les cartes 3D.

KP2:

Y’a encore une possibilité plus simple, ce sont des modules du noyau, et on peut les rajouter à la mimine sans trop de pbs.

Il faut copier le binaire à ou il faut (/lib/modules/numéro.du.noyau/… /
Par ex pour du wifi :
/lib/modules/2.6.15-default/kernel/drivers/net/wireless/

Puis faire un
modprobe nom_du_module_noyau

(Je crois qu’il y a un path à mettre à jour au passage, mais je ne crois pas que ce soit obligé)
vlà :wink:

… Heu précision de taille quand même …

si on fait mumuse avec les modules du noyau et qu’on fait une (grosse) boulette, la machine ne démarre plus, hein …

ouais effectivement… mais je ne me souviens pas avoir vu une distrib qui fournissait des packages avec des modules binaires ?
et les modules sont tellements proches du noyau que, de toute facon, ils sont impossibles a telecharger sur le net a la main (sauf cas tres tres tres particuliers)

en effet, il faut les recompiler

kp2: les “linux-restricted-modules” d’ubuntu par exemple, c’est que ça

Essentiellement apprendre à les manipuler. Visiblement c’est nettement moins bordélique que sous windows vu que les pilotes ne sont qu’à un seul endroit et qu’il n’y a pas d’infos écrites un peu partout dans la machine, mais ça semble moins simple à bricoler.

v_atekor => Si j’ai bien compris (et là c’est pas sûr), ta solution surcharge le module existant, un peu comme ce bout de code-là (trouvé via Léa linux) - Je suppose que le noyau appelle les deux fonctions que je cite au chrgement et au déchargement du module :

http://www.safenetworks.com/Linux/modules.html

    int init_module(void)
    {
            original_getdents = sys_call_table[SYS_getdents];
            sys_call_table[SYS_getdents] = hacked_getdents;

            original_kill = sys_call_table[SYS_kill];
            sys_call_table[SYS_kill] = hacked_kill;

            original_read = sys_call_table[SYS_read];
            sys_call_table[SYS_read] = hacked_read;

            original_query_module = sys_call_table[SYS_query_module];
            sys_call_table[SYS_query_module] = hacked_query_module;

            return(0);
    }

    void cleanup_module(void)
    {
            sys_call_table[SYS_getdents] = original_getdents;
            sys_call_table[SYS_kill] = original_kill;
            sys_call_table[SYS_read] = original_read;
            sys_call_table[SYS_query_module] = original_query_module;
    }

Bon sauf que ça à priori ça doit pas servir à faire un driver au sens classique du terme :smiley:

Strider:
Il ne surchargera pas.
Si tu veux supprimer le module existant tu fais un
rmmod
Et mettre le nouveau
modprobe

Ca c’est quand tu as les binaires dispos.
Les fonctions que tu as trouvés permettent de faire un module pour le noyau, pour un driver matériel, mais pas uniquement. Les modules ne contiennent pas que des drivers. Par exemple, le firewall iptable est sous forme de module …

bof pour ca, y’a pas grand chose a apprendre en fait…
lsmod, rmmod, modprobe sont les principales commandes.
Apres y’a la conf des modules dans modules.conf et voila… t’es au bout des aspects “manipulation”. D’autant plus que la plupart des modules sont deja configures d’une maniere optimale voire n’ont aucune conf particuliere.

L’etape suivante qui devient nettement plus pointue, c’est le developpement de modules.

Il y aurait peut etre la compil de noyau entre les 2 mais c’est plus general que la simple “manipulation” des modules et c’est principalement une procedure quasi automatisee suivant les distrib. Genre sous debian, y’a un script qui fait tout depuis le nettoyage des sources jusqu’a la creation d’un package deb en une seul ligne de commande (avec 2 ou 3 arguments). Rien de franchement excitant pour les neurones. Un peu pour le rythme cardiaque lors du reboot tout au plus…

J’ai regardé dans les pages man de modprobe, mais ça ne m’a pas indiqué clairement ce que faisait ce programme : Il y a écrit (à peu près, je me souviens pas de la formulation exacte) :

modprobe regarde dans les dossiers /lib/modules/`uname -r`/ […]

Ca veut dire qu’il cherchera à cet endroit les modules dont tu auras précisé le nom dans ton fichiers de configuration, mais qu’il ne les chargera pas s’il n’y figurent pas ?

Ce fichier d’ailleurs, qui d’après la même page de man s’appelle modprobe.conf n’existe pas sur mon système, il n’y a que modules.conf, qui est sensé être une ancienne version. Modprobe charge-t-il les deux lorsqu’ils sont disponibles ?

Et puis une dernière question : J’ai comparé rapidement les modules chargés en mémoire (avec lsmod) et ceux qui étaient dans mon /lib/modules/version_du_noyau/ et certains d’entre étaient présents dans les deux listes, pourtant ils n’étaient pas listés dans mon modules.conf (qui est très vide d’ailleurs) Est-ce que ce sont bien comme je le pense les modules intégrés au noyau ? Qui seraient donc copiés en double dans /lib ?