В чем разница между представлением устройства в /dev
и в устройстве /sys/class
?
Один предпочтительнее другого? Есть ли что-то, что предлагает один, а другой нет?
В чем разница между представлением устройства в /dev
и в устройстве /sys/class
?
Один предпочтительнее другого? Есть ли что-то, что предлагает один, а другой нет?
Ответы:
Файлы в /dev
являются фактическими файлами устройств, которые UDEV создает во время выполнения. Каталог /sys/class
экспортируется ядром во время выполнения, демонстрируя иерархию аппаратного обеспечения sysfs
.
выдержка
В Unix и Unix-подобных системах доступ к аппаратным устройствам осуществляется через специальные файлы (также называемые файлами устройств или узлами), расположенные в каталоге / dev. Эти файлы считываются и записываются так же, как обычные файлы, но вместо записи и чтения данных на диске они напрямую взаимодействуют с драйвером ядра, который затем связывается с оборудованием. Есть много интернет-ресурсов, описывающих файлы / dev более подробно. Традиционно эти специальные файлы были созданы во время установки дистрибутивом с помощью команды mknod. В последние годы системы Linux начали использовать udev для управления этими файлами / dev во время выполнения. Например, udev создаст узлы при обнаружении устройств и удалит их при удалении устройств (включая устройства горячего подключения во время выполнения). Сюда,
другая выдержка
Каталоги в Sysfs содержат иерархию устройств, так как они подключены к компьютеру. Например, на моем компьютере устройство hidraw0 находится под:
/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
В зависимости от пути, устройство подключено (примерно, начиная с конца) к конфигурации 1 (: 1.0) устройства, подключенного к порту 4 устройства 1-5, подключенного к USB-контроллеру 1 (usb1), подключенному к Шина PCI. Хотя этот путь к каталогу и интересен, он нам не очень помогает, поскольку он зависит от того, как оборудование физически подключено к компьютеру.
К счастью, Sysfs также предоставляет большое количество символических ссылок для простого доступа к устройствам без необходимости знать, к каким портам PCI и USB они подключены. В / sys / class есть каталог для каждого отдельного класса устройства.
Как правило, вы используете правила /etc/udev/rules.d
для расширения вашей системы. Правила могут быть созданы для запуска сценариев при наличии различного оборудования.
Когда система запущена, вы можете писать сценарии для работы с любым из них /dev
или с ними /sys
, и это действительно сводится к личным предпочтениям, но я обычно стараюсь работать /sys
и использовать такие инструменты, как udevadm
запрос UDEV для определения местоположения различных системных ресурсов.
$ 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"
...