Per quanto ne so, il kernel rileva l'hardware, aggiunge informazioni a sysfs, crea un dispositivo in /dev e quindi genera un evento udev. La mia domanda è:i driver di dispositivo fanno tutto questo o è il kernel stesso? Se i driver lo fanno, conosceranno il numero maggiore e minore del dispositivo per creare il file in devtmps.
Capisco anche (forse erroneamente) che è udev che chiama modprobe per caricare i driver che gestiscono un dispositivo.
Mi è stato detto che lo fanno con il contenuto della variabile d'ambiente MODALIAS uevent, caricando così tutti i moduli i cui alias corrispondono a questa stringa (il driver corretto). In breve:quali sono i passaggi del rilevamento dell'hardware in Linux e l'OMS esegue ogni passaggio:il kernel stesso, il driver all'interno del kernel o udev nello spazio utente. Grazie.
Risposta accettata:
Il kernel conosce i numeri di dispositivo perché decide i numeri di dispositivo. Ciascun driver registra i numeri di dispositivo che gestisce. I numeri sono codificati nel codice sorgente o, in alcuni casi, allocati dinamicamente. Il filesystem sysfs consente ad applicazioni come udev di scoprire i dispositivi supportati dal kernel. Vedi In che modo udev ottiene i numeri di dispositivo per i dispositivi che crea? per maggiori dettagli.
Il codice di inizializzazione del driver rileva l'hardware e registra i dispositivi in base all'hardware trovato durante il rilevamento. Alcuni tipi di hardware non supportano il rilevamento; ad esempio, il bus ISA (un bus in gran parte obsoleto su computer di tipo PC) non fornisce alcun modo per elencare l'hardware connesso, quindi il driver può solo provare a comunicare e pregare che non ci sia una periferica diversa collegata allo stesso indirizzo. Su alcune piattaforme, il bootloader include un albero dei dispositivi che descrive le periferiche disponibili e dove sono mappate e il kernel Linux attiva i driver in base a queste informazioni. Esistono tre modi per caricare un driver per una periferica.
- Il driver potrebbe essere incluso come parte dell'immagine del kernel.
- Il driver può essere compilato come modulo e caricato esplicitamente (ad esempio includendolo in
/etc/modules
o in un initramfs). - Esiste un meccanismo per caricare automaticamente determinati driver in base alle informazioni riportate dai tipi di bus che possono elencare le periferiche collegate insieme a un numero di identificazione universale, come PCI (il bus principale nei moderni PC) e USB. Il kernel esegue
modprobe
e gli passa un nome simbolico che codifica l'identificazione della periferica, che è un alias per il nome "reale" del modulo driver. Vedere I moduli driver vengono caricati e scaricati automaticamente?