Diferença entre / dev e / sys / class?

Respostas:

26

Os arquivos /devsão arquivos de dispositivos reais que o UDEV cria em tempo de execução. O diretório /sys/classé exportado pelo kernel em tempo de execução, expondo a hierarquia do hardware sysfs.

No tutorial libudev e Sysfs

excerto

Nos sistemas Unix e Unix-like, os dispositivos de hardware são acessados ​​através de arquivos especiais (também chamados de arquivos ou nós do dispositivo) localizados no diretório / dev. Esses arquivos são lidos e gravados da mesma maneira que os arquivos normais, mas, em vez de gravar e ler dados em um disco, eles se comunicam diretamente com um driver do kernel que depois se comunica com o hardware. Existem muitos recursos online que descrevem arquivos / dev em mais detalhes. Tradicionalmente, esses arquivos especiais foram criados no momento da instalação pela distribuição, usando o comando mknod. Nos últimos anos, os sistemas Linux começaram a usar o udev para gerenciar esses arquivos / dev em tempo de execução. Por exemplo, o udev criará nós quando os dispositivos forem detectados e os excluirá quando os dispositivos forem removidos (incluindo dispositivos hotplug em tempo de execução). Deste jeito,

outro trecho

Os diretórios no Sysfs contêm a hierarquia de dispositivos, à medida que são anexados ao computador. Por exemplo, no meu computador, o dispositivo hidraw0 está localizado em:

/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

Com base no caminho, o dispositivo está conectado (aproximadamente, a partir do final) à configuração 1 (: 1.0) do dispositivo conectado à porta número 4 do dispositivo 1-5, conectado ao controlador USB 1 (usb1), conectado ao Barramento PCI. Embora interessante, esse caminho de diretório não nos faz muito bem, pois depende de como o hardware está fisicamente conectado ao computador.

Felizmente, o Sysfs também fornece um grande número de links simbólicos, para facilitar o acesso aos dispositivos sem precisar saber a quais portas PCI e USB elas estão conectadas. Em / sys / class, há um diretório para cada classe diferente de dispositivo.

Uso?

Em geral, você usa regras /etc/udev/rules.dpara aprimorar seu sistema. Regras podem ser construídas para executar scripts quando vários hardwares estão presentes.

Depois que o sistema é instalado, você pode escrever scripts para trabalhar com um /devou outro /sys, e isso realmente se resume a preferências pessoais, mas eu geralmente tentava trabalhar /syse fazer uso de ferramentas como udevadmconsultar o UDEV para obter locais de vários recursos do 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"
...
slm
fonte
não tenho certeza se entendi corretamente. Então, pedindo esclarecimentos para ter certeza. Se você decide fazer interface com um dispositivo externo (por exemplo, via i2c ou mipi) criando uma entrada em / dev ou / sys, é puramente baseado em preferências pessoais? Se não, em que caso / por que alguém preferiria escolher o primeiro em vez do último (e vice-verca)?
LandonZeKepitelOfGreytBritn