Differenza tra / dev e / sys / class?


Risposte:


26

I file in /devsono file di dispositivi effettivi che UDEV crea in fase di esecuzione. La directory /sys/classviene esportata dal kernel in fase di esecuzione, esponendo la gerarchia dell'hardware attraverso sysfs.

Dal libudev e Sysfs Tutorial

estratto

Su sistemi Unix e Unix, è possibile accedere ai dispositivi hardware tramite file speciali (chiamati anche file o nodi del dispositivo) situati nella directory / dev. Questi file vengono letti e scritti esattamente come i normali file, ma invece di scrivere e leggere i dati su un disco, comunicano direttamente con un driver del kernel che comunica con l'hardware. Esistono molte risorse online che descrivono i file / dev in modo più dettagliato. Tradizionalmente, questi file speciali sono stati creati al momento dell'installazione dalla distribuzione, usando il comando mknod. Negli ultimi anni, i sistemi Linux hanno iniziato a utilizzare udev per gestire questi file / dev in fase di esecuzione. Ad esempio, udev creerà i nodi quando vengono rilevati i dispositivi e li eliminerà quando i dispositivi vengono rimossi (inclusi i dispositivi hotplug in fase di esecuzione). Per di qua,

un altro estratto

Le directory in Sysfs contengono l'erarchia dei dispositivi, poiché sono collegate al computer. Ad esempio, sul mio computer, il dispositivo hidraw0 si trova in:

/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

Sulla base del percorso, il dispositivo è collegato (approssimativamente, a partire dalla fine) alla configurazione 1 (: 1.0) del dispositivo collegato al numero di porta 4 del dispositivo 1-5, collegato al controller USB 1 (usb1), collegato al Bus PCI. Sebbene interessante, questo percorso di directory non ci fa molto bene, poiché dipende da come l'hardware è fisicamente collegato al computer.

Fortunatamente, Sysfs fornisce anche un gran numero di collegamenti simbolici, per un facile accesso ai dispositivi senza dover sapere a quali porte PCI e USB sono collegate. In / sys / class c'è una directory per ogni diversa classe di dispositivo.

Uso?

In generale, usi le regole /etc/udev/rules.dper aumentare il tuo sistema. Le regole possono essere costruite per eseguire script quando sono presenti vari hardware.

Una volta che un sistema è attivo, puoi scrivere script per lavorare contro o /devo /sys, e si riduce davvero alle preferenze personali, ma di solito proverei a lavorare contro /syse fare uso di strumenti come udevadminterrogare UDEV per posizioni di varie risorse di sistema.

$ 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"
...

non sono sicuro di averti capito correttamente. Quindi chiedendo alcuni chiarimenti per essere sicuri. Sia che tu decida di interfacciarti con un dispositivo esterno (ad es. Tramite i2c o mipi) creando una voce in / dev o / sys, si basa esclusivamente sulle preferenze personali? In caso contrario, in quale caso / perché si dovrebbe piuttosto scegliere per il primo anziché il secondo (e vice-verca)?
LandonZeKepitelOfGreytBritn
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.