Comment lancer automatiquement un driver USB ?

Bonjour,

Je cherche à m’initier à la programmation de driver Linux. J’ai réussi à lancer manuellement mon driver (petit driver USB) mais je cherche à comprendre comment Linux gère ce lancement automatique à chaque branchement du périphérique.

Je n’ai pas trouvé d’explication claire sur internet alors si quelqu’un peut rapidement me décrire les étapes du fonctionnement – et le travail à réaliser quand on est développeur – ça serait sympa.
Merci

Ton périphérique USB a un code Vendeur/Produit apparaissant dans lsusb, par exemple
Bus 001 Device 002: ID 064e:c117 Suyin Corp.
C’est le code 064e:c117. Plus précisemment, lorsqu’on branche le périphérique, il y a apparition d’un ou de plusieurs fichiers modalias dans /sys, ici c’est

/sys/devices/pci0000:00/0000:00:1a.7/usb1/1-6/1-6:1.0/modalias
usb:v064EpC117d0130dcEFdsc02dp01ic0Eisc01ip00
/sys/devices/pci0000:00/0000:00:1a.7/usb1/1-6/1-6:1.1/modalias
usb:v064EpC117d0130dcEFdsc02dp01ic0Eisc02ip00

Si la chaine est accepté par le modalias d’un module, celui est chargé. Ainsi uvcvideo présente

[quote]alias: usb:vpddcdscdpic0Eisc01ip00*
alias: usb:v1C4Fp3000ddcdscdpic0Eisc01ip00*
alias: usb:v1B3Bp2951ddcdscdpic0Eisc01ip00*
alias: usb:v19ABp1000d00dcdscdpic0Eisc01ip00*
alias: usb:v19ABp1000d01[0-1]dcdscdpic0Eisc01ip00*
alias: usb:v19ABp1000d012[0-6]dcdscdpic0Eisc01ip00
alias: usb:v199Ep8102ddcdscdpicFFisc01ip00*
alias: usb:v18ECp3290ddcdscdpic0Eisc01ip00*
alias: usb:v18ECp3288ddcdscdpic0Eisc01ip00*
alias: usb:v18ECp3188ddcdscdpic0Eisc01ip00*
alias: usb:v18CDpCAFEddcdscdpic0Eisc01ip00*
alias: usb:v1871p0306ddcdscdpic0Eisc01ip00*
alias: usb:v17EFp480Bddcdscdpic0Eisc01ip00*
alias: usb:v17DCp0202ddcdscdpic0Eisc01ip00*
alias: usb:v174Fp8A34ddcdscdpic0Eisc01ip00*
alias: usb:v174Fp8A33ddcdscdpic0Eisc01ip00*
alias: usb:v174Fp8A31ddcdscdpic0Eisc01ip00*
alias: usb:v174Fp8A12ddcdscdpic0Eisc01ip00*
alias: usb:v174Fp5931ddcdscdpic0Eisc01ip00*
alias: usb:v174Fp5212ddcdscdpic0Eisc01ip00*
alias: usb:v152Dp0310ddcdscdpic0Eisc01ip00*
alias: usb:v13D3p5103ddcdscdpic0Eisc01ip00*
alias: usb:v0E8Dp0004ddcdscdpic0Eisc01ip00*
alias: usb:v0AC8p3420ddcdscdpic0Eisc01ip00*
alias: usb:v0AC8p3410ddcdscdpic0Eisc01ip00*
alias: usb:v0AC8p332Dddcdscdpic0Eisc01ip00*
alias: usb:v06F8p300Cddcdscdpic0Eisc01ip00*
alias: usb:v05E3p0505ddcdscdpic0Eisc01ip00*
alias: usb:v05C8p0403ddcdscdpic0Eisc01ip00*
alias: usb:v05ACp8501ddcdscdpic0Eisc01ip00*
alias: usb:v05A9p2640ddcdscdpic0Eisc01ip00*
alias: usb:v058Fp3820ddcdscdpic0Eisc01ip00*
alias: usb:v04F2pB071ddcdscdpic0Eisc01ip00*
alias: usb:v046Dp08C7ddcdscdpicFFisc01ip00*
alias: usb:v046Dp08C6ddcdscdpicFFisc01ip00*
alias: usb:v046Dp08C5ddcdscdpicFFisc01ip00*
alias: usb:v046Dp08C3ddcdscdpicFFisc01ip00*
alias: usb:v046Dp08C2ddcdscdpicFFisc01ip00*
alias: usb:v046Dp08C1ddcdscdpicFFisc01ip00*
alias: usb:v045Ep0723ddcdscdpic0Eisc01ip00*
alias: usb:v045Ep00F8ddcdscdpic0Eisc01ip00*
alias: usb:v0458p706Eddcdscdpic0Eisc01ip00*
alias: usb:v0416pA91Addcdscdpic0Eisc01ip00*
[/quote]

On peut noter que la première ligne est comatible avec usb:v064EpC117d0130dcEFdsc02dp01ic0Eisc01ip00 et donc que uvcvideo gère ce périphérique.

Voilà, c’est ce que j’ai pu comprendre des lectures des sources du noyau. Cela m’a permis de rajouter du matériel à certains modules il y a quelques temps. C’est un résumé assez (trop) sommaire du mécanisme tel que je l’ai compris

Bonjour

Merci pour cette réponse rapide.

Mais comment le système sait où chercher le driver ? Faut t’il qu’il soit préalablement chargé ?

Pouvez vous m’en dire plus sur le chemin : /sys/devices/pci0000:00/0000:00:1a.7/usb1/1-6/1-6:1.0
Car il y a une multitude de dossier driver dans ce dernier.

Merci

Tout ça est géré par le noyau et udev. À l’"insertion du périphérique, l’entrée dans /sys est crée par le noyau et un évènement udev est crée. udev analyse l’évènement et charge le module correspondant. Le module lui même prend en charge le périphérique si il peut le faire.