GNU/Linux >> Tutoriels Linux >  >> Linux

Linux - Comment le noyau Linux connaît-il les numéros majeurs et mineurs des périphériques ?

Autant que je sache, le noyau détecte le matériel, ajoute des informations à sysfs crée un périphérique dans /dev puis génère un événement udev. Ma question est la suivante :les pilotes de périphériques font-ils tout cela ou est-ce le noyau lui-même ? Si les pilotes le font, ils connaîtront le numéro majeur et mineur du périphérique pour créer le fichier dans devtmps.

Je comprends aussi (peut-être à tort) que c'est udev qui appelle modprobe pour charger les pilotes qui gèrent un périphérique.

On m'a dit qu'ils le faisaient avec le contenu de la variable d'environnement MODALIAS uevent, chargeant ainsi tous les modules dont les alias correspondent à cette chaîne (le bon pilote). En bref :quelles sont les étapes de la détection du matériel sous Linux et QUI effectue chaque étape :le noyau lui-même, le pilote à l'intérieur du noyau ou udev dans l'espace utilisateur. Merci.

Réponse acceptée :

Le noyau connaît les numéros de périphérique car il décide des numéros de périphérique. Chaque pilote enregistre les numéros de périphérique qu'il gère. Les numéros sont soit codés en dur dans le code source, soit, dans certains cas, alloués dynamiquement. Le système de fichiers sysfs permet aux applications telles que udev de découvrir les périphériques pris en charge par le noyau. Voir Comment udev obtient-il les numéros de périphérique pour les périphériques qu'il crée ? pour plus de détails.

Le code d'initialisation du pilote recherche le matériel et enregistre les périphériques en fonction du matériel trouvé lors de la vérification. Certains types de matériel ne prennent pas en charge le sondage; par exemple, le bus ISA (un bus largement obsolète sur les ordinateurs de type PC) ne fournit aucun moyen de répertorier le matériel connecté, de sorte que le pilote ne peut qu'essayer de communiquer et prier pour qu'il n'y ait pas un autre périphérique connecté à la même adresse. Sur certaines plates-formes, le chargeur de démarrage inclut une arborescence de périphériques décrivant les périphériques disponibles et où ils sont mappés, et le noyau Linux active les pilotes en fonction de ces informations. Il existe trois façons de charger un pilote pour un périphérique.

  • Le pilote peut être inclus dans l'image du noyau.
  • Le pilote peut être compilé en tant que module et chargé explicitement (par exemple en l'incluant dans /etc/modules ou dans un initramfs).
  • Il existe un mécanisme pour charger automatiquement certains pilotes en fonction des informations rapportées par les types de bus qui peuvent répertorier les périphériques connectés avec un numéro d'identification universel, tel que PCI (le bus principal des PC modernes) et USB. Le noyau exécute modprobe et lui transmet un nom symbolique qui encode l'identification du périphérique, qui est un alias pour le "vrai" nom du module pilote. Voir Les modules de pilote sont-ils chargés et déchargés automatiquement ?
En relation :Linux – Comment créer un patch en ignorant les différences d'indentation dans le code ?
Linux
  1. Comment vérifier la version du système d'exploitation et de Linux

  2. Le nombre majeur et mineur est-il unique ?

  3. Linux :Comment trouver le pilote de périphérique utilisé pour un périphérique ?

  4. Linux – Comment trouver le pilote (module) associé à un périphérique sous Linux ?

  5. Comment le noyau Linux détermine-t-il l'ordre des appels __init ?

Comment le noyau Linux gère les interruptions

Comment vérifier la version du noyau sous Linux

Comment connaître les groupes d'un utilisateur Linux

Comment détecter et gérer les appareils sous Linux

Comment Linux charge-t-il l'image 'initrd' ?

Comment Linux différencie-t-il les fichiers réels et inexistants (par exemple :périphérique) ?