Quelle est la différence entre la représentation du périphérique dans /dev
et celle dans /sys/class
?
Est-ce que l'un est préféré à l'autre? Y a-t-il quelque chose que l'on propose et que l'autre ne propose pas?
Quelle est la différence entre la représentation du périphérique dans /dev
et celle dans /sys/class
?
Est-ce que l'un est préféré à l'autre? Y a-t-il quelque chose que l'on propose et que l'autre ne propose pas?
Réponses:
Les fichiers /dev
sont des fichiers de périphériques réels qu'UDEV crée au moment de l'exécution. Le répertoire /sys/class
est exporté par le noyau au moment de l'exécution, exposant ainsi la hiérarchie du matériel sysfs
.
À partir du didacticiel libudev et Sysfs
extrait
Sur les systèmes Unix et Unix, les périphériques matériels sont accessibles via des fichiers spéciaux (également appelés fichiers de périphérique ou nœuds) situés dans le répertoire / dev. Ces fichiers sont lus et écrits comme des fichiers normaux, mais au lieu d'écrire et de lire des données sur un disque, ils communiquent directement avec un pilote du noyau qui communique ensuite avec le matériel. Il existe de nombreuses ressources en ligne décrivant les fichiers / dev plus en détail. Traditionnellement, ces fichiers spéciaux ont été créés au moment de l'installation par la distribution, à l'aide de la commande mknod. Ces dernières années, les systèmes Linux ont commencé à utiliser udev pour gérer ces fichiers / dev lors de l'exécution. Par exemple, udev créera des nœuds lorsque des périphériques seront détectés et les supprimera lorsque des périphériques seront supprimés (y compris les périphériques hotplug lors de l'exécution). Par ici,
un autre extrait
Les répertoires dans Sysfs contiennent la hiérarchie des périphériques, car ils sont attachés à l'ordinateur. Par exemple, sur mon ordinateur, le périphérique hidraw0 est situé sous:
/sys/devices/pci0000:00/0000:00:12.2/usb1/1-5/1-5.4/1-5.4:1.0/0003:04D8:003F.0001/hidraw/hidraw0
Sur la base du chemin, le périphérique est connecté à (en gros, à partir de la fin) la configuration 1 (: 1.0) du périphérique connecté au port numéro 4 du périphérique 1-5, connecté au contrôleur USB 1 (usb1), connecté au Bus PCI. Bien qu'intéressant, ce chemin de répertoire ne nous fait pas beaucoup de bien, car il dépend de la façon dont le matériel est physiquement connecté à l'ordinateur.
Heureusement, Sysfs fournit également un grand nombre de liens symboliques, pour un accès facile aux périphériques sans avoir à savoir à quels ports PCI et USB ils sont connectés. Dans / sys / class, il existe un répertoire pour chaque classe différente de périphérique.
En général, vous utilisez des règles /etc/udev/rules.d
pour augmenter votre système. Des règles peuvent être construites pour exécuter des scripts lorsque divers matériels sont présents.
Une fois qu'un système est en place, vous pouvez écrire des scripts pour travailler avec /dev
ou /sys
, et cela se résume vraiment à vos préférences personnelles, mais j'essayais généralement de travailler avec /sys
et d'utiliser des outils tels que udevadm
pour interroger UDEV pour les emplacements de diverses ressources système.
$ udevadm info -a -p $(udevadm info -q path -n /dev/sda) | head -15
Udevadm info starts with the device specified by the devpath and then
walks up the chain of parent devices. It prints for every device
found, all possible attributes in the udev rules key format.
A rule to match, can be composed by the attributes of the device
and the attributes from one single parent device.
looking at device '/devices/pci0000:00/0000:00:1f.2/ata1/host0/target0:0:0/0:0:0:0/block/sda':
KERNEL=="sda"
SUBSYSTEM=="block"
DRIVER==""
ATTR{ro}=="0"
ATTR{size}=="976773168"
ATTR{stat}==" 6951659 2950164 183733008 41904530 16928577 18806302 597365181 580435555 0 138442293 622621324"
ATTR{range}=="16"
...