Como usar o UDEV para detecção e gerenciamento de dispositivos no Linux

Como usar o UDEV para detecção e gerenciamento de dispositivos no Linux

Udev (espaço do usuário /dev) é um subsistema Linux para detecção e gerenciamento de dispositivos dinâmicos, desde a versão do kernel 2.6. É uma substituição de Devfs e Hotplug.

Ele cria ou remove dinamicamente os nós do dispositivo (uma interface para um driver de dispositivo que aparece em um sistema de arquivos como se fosse um arquivo comum, armazenado sob o /dev diretório) na hora da inicialização ou se você adicionar um dispositivo ou remover um dispositivo do sistema. Em seguida, propaga informações sobre um dispositivo ou alterações no seu estado para o espaço do usuário.

Sua função é para 1) fornecer os aplicativos do sistema com eventos de dispositivo, 2) gerenciar permissões de nós do dispositivo e 3) podem criar síndulos úteis no /dev Diretório para acessar dispositivos ou até renomear interfaces de rede.

Um dos profissionais de udev é que ele pode usar nomes persistentes de dispositivos para garantir a nomeação consistente de dispositivos nas reinicializações, apesar de sua ordem de descoberta. Esse recurso é útil porque o kernel simplesmente atribui nomes de dispositivos imprevisíveis com base na ordem da descoberta.

Neste artigo, aprenderemos a usar Udev Para detecção e gerenciamento de dispositivos em sistemas Linux. Observe que a maioria, se não todas Udev Como parte da instalação padrão.

Aprenda o básico do Udev no Linux

O udev Daemon, Systemd-udevd (ou Systemd-udevd.serviço) se comunica com o kernel e recebe dispositivo uevents diretamente a partir dele cada vez que você adiciona ou remove um dispositivo do sistema, ou um dispositivo altera seu estado.

Udev é baseado em regras - suas regras são flexíveis e muito poderosas. Todo evento de dispositivo recebido é comparado com o conjunto de regras lidas de arquivos localizados em /lib/udev/regras.d e /RUN/UDEV/REGRAS.d.

Você pode escrever arquivos de regras personalizadas no /etc/udev/regras.d/ diretório (os arquivos devem terminar com o .regras extensão) para processar um dispositivo. Observe que os arquivos de regras neste diretório têm a maior prioridade.

Para criar um arquivo de nó de dispositivo, udev precisa identificar um dispositivo usando certos atributos, como o rótulo, número de série, seu número maior e menor usado, número do dispositivo de barramento e muito mais. Esta informação é exportada pelo sysfs sistema de arquivo.

Sempre que você conecta um dispositivo ao sistema, o kernel o detecta e inicializa, e um diretório com o nome do dispositivo é criado em /sys/ diretório que armazena os atributos do dispositivo.

O principal arquivo de configuração para Udev é /etc/udev/udev.conf, e para controlar o comportamento do tempo de execução do daemon udev, você pode usar o udevadm Utilitário.

Para exibir kernel recebido eventos (uevents) e Eventos Udev (que a UDEV envia após o processamento da regra), execute udevadm com o comando do monitor. Em seguida, conecte um dispositivo ao seu sistema e observe, a partir do terminal, como o evento do dispositivo é tratado.

A captura de tela a seguir mostra um trecho de um ADICIONAR Evento depois de conectar um disco flash USB ao sistema de teste:

Monitor $ udevadm 
Monitore os eventos do dispositivo no Linux

Para encontrar o nome atribuído ao seu disco USB, use o utilitário lsblk que lê o sysfs FileSystem e udev db Para reunir informações sobre dispositivos processados.

 $ lsblk 
Listar dispositivos de bloco no Linux

A partir da saída do comando anterior, o disco USB é nomeado sdb1 (Caminho absoluto deve ser /dev/sdb1). Para consultar os atributos do dispositivo do banco de dados udev, use o comando info.

$ udevadm info /dev /sdb1 
Atributos do dispositivo de consulta do Udev DB no Linux

Como trabalhar com as regras da UDEV no Linux

Nesta seção, discutiremos brevemente como escrever udev regras. Uma regra é composta por uma lista separada por vírgula de um ou mais pares de valor-chave. As regras permitem renomear um nó de dispositivo do nome padrão, modificar as permissões e a propriedade de um nó de dispositivo, acionar a execução de um programa ou script quando um nó de dispositivo é criado ou excluído, entre outros.

Escreveremos uma regra simples para lançar um script quando um dispositivo USB for adicionado e quando for removido do sistema em execução.

Vamos começar criando os dois scripts:

$ sudo vim /bin /device_added.sh 

Adicione as seguintes linhas no Device_Added.sh roteiro.

#!/bin/bash eco "dispositivo USB adicionado em $ (data)" >>/tmp/scripts.registro 

Abra o segundo script.

$ sudo vim /bin /device_removed.sh 

Em seguida, adicione as seguintes linhas a Device_Removed.sh roteiro.

#!/bin/bash eco "dispositivo USB removido em $ (data)" >>/tmp/scripts.registro 

Salve os arquivos, feche e faça os dois scripts executáveis.

$ sudo chmod +x /bin /device_added.sh $ sudo chmod +x /bin /device_removed.sh 

Em seguida, vamos criar uma regra para desencadear a execução dos scripts acima, chamados /etc/udev/regras.d/80-teste.regras.

$ vim/etc/udev/regras.d/80-teste.regras 

Adicione essas duas regras a seguir nele.

Subsistema == "USB", Action == "Add", Env devtype == "USB_Device", Run+= "/Bin/Device_Added.SH "Subsistema ==" USB ", Action ==" Remover ", Env devtype ==" USB_Device ", Run+="/Bin/Device_Removed.sh " 

onde:

  • "==": é um operador para comparar a igualdade.
  • "+=": é um operador para adicionar o valor a uma chave que contém uma lista de entradas.
  • SUBSISTEMA: corresponde ao subsistema do dispositivo de evento.
  • AÇÃO: corresponde ao nome da ação do evento.
  • Env devtype: corresponde a um valor da propriedade de um dispositivo, tipo de dispositivo neste caso.
  • CORRER: Especifica um programa ou script para executar como parte do manuseio de eventos.

Salve o arquivo e feche-o. Então, como raiz, diga Systemd-udevd Para recarregar os arquivos das regras (isso também recarrega outros bancos de dados, como o índice do módulo de kernel), executando.

$ sudo udevadm Control -Reload 

Agora conecte uma unidade USB em sua máquina e verifique se o Device_Added.sh O script foi executado. Primeiro de tudo o arquivo scripts.registro deve ser criado em /tmp.

$ ls -l /tmp /scripts.registro 
Verifique o log de scripts após adicionar USB

Então o arquivo deve ter uma entrada como “Dispositivo USB removido em date_time”, Como mostrado na captura de tela.

$ cat /tmp /scripts.registro 
Verifique o log de scripts após remover USB

Para obter mais informações sobre como escrever regras da UDEV e gerenciar a UDEV, consulte o udev e udevadm entradas manuais, respectivamente, executando:

$ man udev $ man udevadm 
Resumo

Udev é um gerenciador de dispositivos notável que fornece uma maneira dinâmica de configurar nós de dispositivo no /dev diretório. Ele garante que os dispositivos sejam configurados assim que estiverem conectados e descobertos. Ele propaga informações sobre um dispositivo processado ou alterações em seu estado, no espaço do usuário.

Se você tiver alguma dúvida ou pensamento para compartilhar sobre este tópico, use o formulário de feedback.