Qual é a diferença entre a representação do dispositivo /dev
e a entrada /sys/class
?
Um prefere o outro? Existe algo que um oferece e o outro não?
Qual é a diferença entre a representação do dispositivo /dev
e a entrada /sys/class
?
Um prefere o outro? Existe algo que um oferece e o outro não?
Respostas:
Os arquivos /dev
sã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
.
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.
Em geral, você usa regras /etc/udev/rules.d
para 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 /dev
ou outro /sys
, e isso realmente se resume a preferências pessoais, mas eu geralmente tentava trabalhar /sys
e fazer uso de ferramentas como udevadm
consultar 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"
...