GNU/Linux >> Linux Esercitazione >  >> Linux

Linux:in che modo il kernel Linux conosce i numeri maggiori e minori del dispositivo?

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?
Correlati:Linux – Come creare una patch ignorando le differenze di indentazione nel codice?
Linux
  1. Come controllare la versione del sistema operativo e di Linux

  2. Il numero maggiore e minore è unico?

  3. Linux:come trovare il driver di dispositivo utilizzato per un dispositivo?

  4. Linux:come trovare il driver (modulo) associato a un dispositivo su Linux?

  5. Linux:in che modo il kernel Linux pianifica la CPU, tra processi/thread dello spazio utente e attività/lavori del kernel?

Come il kernel Linux gestisce gli interrupt

Come installare un driver di dispositivo su Linux

Come controllare la versione del kernel in Linux

Come conoscere i gruppi di un utente Linux

Come rilevare e gestire i dispositivi su Linux

In che modo Linux carica l'immagine "initrd"?