Sous Linux, étant donné:
- un appareil, par exemple
/dev/sda
, - et ses nombres majeurs et mineurs, par exemple
8, 0
,
Comment puis-je savoir quel module / pilote le "conduit"?
Puis-je creuser /sys
ou /proc
découvrir cela?
linux
drivers
kernel-modules
Totor
la source
la source
lsmod
,/proc/modules
etmodinfo
?Réponses:
Pour obtenir ces informations
sysfs
pour un fichier de périphérique, déterminez d’abord le numéro majeur / mineur en examinant le résultatls -l
, par exemple:Le
8, 0
nous dit que le numéro majeur est8
et le mineur est0
. Aub
début de la liste, il est également indiqué que le périphérique est bloqué. D'autres appareils peuvent avoir unc
appareil pour personnage au début.Si vous regardez ensuite sous
/sys/dev
, vous verrez qu'il y a deux répertoires. Un appeléblock
et un appeléchar
. Il va sans dire que ceux-ci sont destinés aux blocs et aux caractères, respectivement. Chaque appareil est alors accessible par son numéro majeur / mineur est ce répertoire. Si un pilote est disponible pour le périphérique, vous pouvez le trouver en lisant la cible dudriver
lien dans cedevice
sous-répertoire. Par exemple, pour mon/dev/sda
je peux simplement faire:Cela montre que le
sd
pilote est utilisé pour le périphérique. Si vous ne savez pas si le périphérique est un périphérique de type bloc ou caractère, vous pouvez simplement remplacer cette partie par un*
. Cela fonctionne aussi bien:Les appareils bloqués sont également accessibles directement via leur nom via
/sys/block
ou/sys/class/block
. Par exemple:Notez que l'existence de divers répertoires dans
/sys
peut changer en fonction de la configuration du noyau. De plus, tous les périphériques n’ont pas dedevice
sous - dossier. C'est le cas, par exemple, des fichiers de périphériques de partition/dev/sda1
. Ici, vous devez accéder à l'appareil pour le disque entier (malheureusement, il n'y a pas desys
liens pour cela).Une dernière chose qu'il peut être utile de faire est de répertorier les pilotes de tous les périphériques pour lesquels ils sont disponibles. Pour cela, vous pouvez utiliser globs pour sélectionner tous les répertoires dans lesquels les liens de pilotes sont présents. Par exemple:
Enfin, pour s'écarter un peu de la question, je vais ajouter une autre
/sys
astuce globale pour obtenir une perspective beaucoup plus large sur les pilotes utilisés par quels périphériques (mais pas nécessairement ceux avec un fichier de périphérique):Mise à jour
En regardant de plus près le résultat de
udevadm
, cela semble fonctionner en trouvant le/sys
répertoire canonique (comme si vous annuliez la référence aux répertoires majeur / mineur ci-dessus), puis en remontant dans l’arborescence de répertoires, en affichant toutes les informations qu’il trouve. De cette façon, vous obtenez des informations sur les périphériques parents et sur les pilotes qu’ils utilisent également.Pour expérimenter cela, j'ai écrit le script ci-dessous pour parcourir l'arborescence de répertoires et afficher des informations à chaque niveau pertinent.
udev
semble rechercher des fichiers lisibles à chaque niveau, avec leurs noms et contenus incorporés dansATTRS
. Au lieu de cela, j'affiche le contenu desuevent
fichiers à chaque niveau (apparemment, sa présence définit un niveau distinct plutôt qu'un simple sous-répertoire). Je montre également le nom de base de tous les liens de sous-système que je trouve et cela montre comment le périphérique s'inscrit dans cette hiérarchie.udevadm
n’affiche pas la même information, c’est donc un bel outil complémentaire. Les informations sur le périphérique parent (par exemple, lesPCI
informations) sont également utiles si vous souhaitez faire correspondre la sortie d’autres outils, tels quelshw
les périphériques de niveau supérieur.la source
udevadm
réponse vous donnerasd
etahci
. Y at-il un moyen de déterminerahci
est utilisé aussi?device/device/
, donc mareadlink
commande ressemblait àreadlink /sys/dev/char/XX\:Y/device/device/driver
.Vous pouvez utiliser l'
udevadm
outil pour découvrir cela.La commande serait
udevadm info -a -n /dev/sda
, puis regardez lesDRIVER==
paramètres.Cela montre qu’il existe en réalité 2 pilotes impliqués dans la fourniture de ce périphérique,
sd
etahci
. Le premiersd
est directement responsable du/dev/sda
périphérique, mais il utilise leahci
pilote sous-jacent.La sortie de la
udevadm
commande ressemble à ceci et inclut une description de son fonctionnement.la source
udevadm
est supprimé (ou même recommandé)? Je ne trouve rien qui donne un indice à cela.Utilisez la commande hwinfo et le modèle et le pilote de sortie. S'il n'y a pas de pilote, il ne sera pas affiché. Par exemple pour les disques:
Pour les cartes réseau:
Pour les périphériques USB:
Utilisez hwinfo --help pour déterminer quels autres types de périphériques vous pouvez interroger. hwinfo est installé par défaut, par exemple sur SUSE Linux.
la source
--only
option. Par exemplehwinfo --block --only /dev/sda | grep ...
.lshw
est un outil génial pour lister le matériel trouvé sur votre machine. Vous devrez d'abord l'installer avant de l'exécuter.Utilisez
yum
ouapt-get
selon le système que vous utilisez. Ensuite, pour lister spécifiquement le matériel de stockage:Vous voudrez peut-être l'exécuter
root
pour récupérer toutes les informations.Sinon,
lspci
peut également donner des informations sur votre matériel:Pour connaître le numéro majeur et mineur d'un périphérique, exécutez-
ls
le simplement .Dans cette sortie,
b
inbrw-rw----.
signifie qu'il s'agit d'un périphérique en mode bloc. Les chiffres8
et0
sont respectivement les numéros majeur et mineur de l'appareil.la source
lshw
etlspci
vous pouvez voir le module utilisé par un périphérique: configuration: driver = ahci latence = 0 et pilote du noyau utilisé: ahci .