Разница между / dev и / sys / class?


30

В чем разница между представлением устройства в /devи в устройстве /sys/class?

Один предпочтительнее другого? Есть ли что-то, что предлагает один, а другой нет?



Смотрите это libudev и sysfs учебник: signal11.us/oss/udev
ОДС

Ответы:


26

Файлы в /devявляются фактическими файлами устройств, которые UDEV создает во время выполнения. Каталог /sys/classэкспортируется ядром во время выполнения, демонстрируя иерархию аппаратного обеспечения sysfs.

Из учебника libudev и 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"
...

не уверен, что правильно вас понял. Поэтому просим пояснений, чтобы быть уверенным. Решаете ли вы взаимодействовать с внешним устройством (например, через i2c или mipi), создавая запись в / dev или / sys исключительно на основе личных предпочтений? Если нет, то в каком случае / почему предпочтительнее выбрать первое вместо второго (и наоборот)?
LandonZeKepitelOfGreytBritn
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.