Udev - Funcionamento e Regras

Este artigo tem como objetivo entender o UDEV e aplicar regras utilizando o mesmo.

[ Hits: 48.067 ]

Por: Perfil removido em 22/10/2012


Hierarquia dos dispositivos e chaves do udev



Hierarquia dos dispositivos

Antes de começar a trabalhar com regras no udev, é necessário saber como o kernel representa os dispositivos em sua estrutura. O kernel do Linux organiza e representa os dispositivos conectados à máquina em uma estrutura de árvore, ou seja, existe uma hierarquia onde cada device é "filho" de um device "pai".

Toda esta estrutura está exposta no diretório /sys contendo informações de cada device. Para poder ter mais detalhes sobre os devices, use o comando udevadm e poderá ver todas as chaves dos dispositivos.

Veja o exemplo do arquivo de dispositivo /dev/usb/lp0 da minha máquina, que representa a impressora, rodando o comando abaixo como root:

# udevadm info -a -p $(sudo udevadm info -q path -n /dev/usb/lp0)

A saída do comando mostra bem a organização e hierarquia do device. Sendo que /dev/usb/lp0 é filho do device "usb", e neste device o kernel nomeia-o de "lp0", justamente o nome dado pelo udev, que por sua vez é filho do device pai, também chamado de "usb" e o kernel nomeia-o de "2-2:1.1", carregando o driver "usblp", que por sua vez é filho do device "pci" e o kernel nomeia-o neste subsistema de "0000:00:1d.0", carregando o driver "uhci_hcd".

Veja o exemplo do arquivo de dispositivo /dev/sda que representa o primeiro disco rígido da minha máquina:

# udevadm info -a -p $(sudo udevadm info -q path -n /dev/sda)

O device /dev/sda nesta hierarquia, é filho do device "block", ou seja, é um dispositivo de bloco e o kernel nomeia-o de "sda", que por sua vez, é filho do device chamado de "scsi", e o kernel nomeia-o de "0:0:0:0", carregando o driver "sd", que por sua vez é filho do device chamado também de "scsi", e o kernel nomeia-o de "target0:0:0".

Observe que, na hierarquia mostrada na saída do comando udevadm, os devices de baixo são pais dos de cima "filhos".

As chaves do udev

Chaves no udev são informações de dispositivos e podem ser classificadas em dois tipos, existindo as chaves de combinação e de atributos. Ambas serão abordadas a seguir, e o seu uso torna-se necessário para aplicar as regras do udev.

As chaves de combinação mais usadas, são as listadas abaixo:
  • KERNEL → Esta chave informa o nome atribuído pelo kernel ao dispositivo em questão;
  • SUBSYSTEM → Chave que informa o tipo de dispositivo, seja o dispositivo pai ou filho;
  • DRIVER → Chave que informa o driver para o dispositivo;
  • ATTR → Esta chave tem informações adicionais sobre o dispositivo;
  • OWNER → Usuário que será o proprietário do dispositivo criado no /dev;
  • GROUP → Grupo do dispositivo criado no /dev;
  • MODE → Atribui a umask padrão para o dispositivo criado em /dev.

Além das chaves de combinação já vistas, é possível usar outras descritas abaixo:
  • NAME → Esta chave contém o nome que será usado para o dispositivo;
  • SYMLINK → Nesta chave, configura-se um link simbólico;
  • RUN → Adiciona um programa que será executado;
  • ACTION → Ação do evento do dispositivo, se o dispositivo está sendo conectado, removido ou alterado.

Chaves de combinação KERNELS, SUBSYSTEMS e DRIVERS, contêm informações similares às chaves de combinação apresentadas acima, no entanto, estas chaves de combinação são usadas em dispositivos pais (parent devices).

As chaves de atributo ATTR, contêm informação adicional a um dispositivo e a chave de atributo ATTRS é similar a ATTR, no entanto, é usada em devices pais (parent devices).

A observação é que em uma regra, não pode ser atribuído mais de uma chave de atributo e/ou de combinação de dispositivos "pai" (device parent) junto à chave de combinação "filho" e nem combinar chaves de atributos de diferentes dispositivos pais em um único dispositivo pai. Caso isso aconteça, a regra não irá funcionar.

Para a regra funcionar, podemos colocar uma ou mais chaves de combinação "filho" seguida de uma chave de atributo ou de combinação "pai" na mesma regra e/ou, caso queira atribuir mais de uma chave de atributo "pai", é necessário informar o dispositivo a qual ela pertence, basta usar a chave de combinação "pai" SUBSYSTEMS.

Se ficou confuso, na próxima página irei exemplificar para ter um melhor entendimento.

Para aplicar as regras, além das chaves já mencionadas, podemos fazer uso de strings e é necessário usar operadores. Veja abaixo as strings e operadores que podemos usar.

Strings que podem ser usadas nas regras:
  • * → Corresponde a tudo naquela posição (é similar ao coringa asterisco).
  • ? → Qualquer caractere naquela posição.
  • [] → Corresponde a qualquer caractere especificado dentro dos colchetes.

    Por exemplo, a sequência de caracteres 'tty[SR]' iria corresponder tanto 'ttyS' quanto a 'ttyR'. Você pode também especificar intervalos usando a faixa através do caractere '-'. Se o primeiro caractere após o '[' é um '!', há uma exceção.

Operadores mais usados nas regras:
  • == → Compara se é igual (atribui uma valor de igualdade);
  • != → Compara se é diferente (atribui um valor de diferença);
  • = → Atribui um valor à chave (é usado quando se quer mudar o nome do device, por exemplo);
  • += → Adiciona um valor à chave e pode manter uma lista de entradas - Pode, por exemplo, usar na chave RUN e especificar vários comandos.

Depois de toda esta explicação, vamos começar a aplicar as regras na próxima página.

Página anterior     Próxima página

Páginas do artigo
   1. Detecção e ativação de dispositivos e a função do udev nesse processo
   2. Hierarquia dos dispositivos e chaves do udev
   3. Regras do udev
Outros artigos deste autor

Formatação de células na planilha do OpenOffice

Minecraft 1.8.1 - Arquivo server.properties

O kernel Linux está inchado... Mas, calma, não é bem assim!

Instalando o aMSN com suporte a webcam

Sistemas de arquivos - Conceitos básicos

Leitura recomendada

Dicas rápidas para linha de comando

Aventuras, desventuras e Software Livre

Instalando e configurando um servidor DNS (Bind+CHROOT) no Slackware

Rust - Uma nova linguagem de programação

Instalação do PostgreSQL com Apache 2, PHP 5, OpenSSL no Debian Wheezy 7.7 64 bits com systemd e chroot

  
Comentários
[1] Comentário enviado por danniel-lara em 22/10/2012 - 20:41h

muito bom o artigo
parabéns

[2] Comentário enviado por removido em 23/10/2012 - 05:07h

cabra, tu és muito corajoso!!! merece 10....
;-))

[3] Comentário enviado por julio_hoffimann em 23/10/2012 - 18:32h

Parabéns Edson!

Abraço!

[4] Comentário enviado por removido em 23/10/2012 - 18:46h

Obrigado pelos comentários pessoal!!!

[5] Comentário enviado por removido em 23/10/2012 - 23:57h

Grande Edson!

Sempre aprendo muito com seus artigos.


Mesmo quase tudo no Linux ser arquivo, estava com dificuldades em entender a estrutura do UDEV.

Ótimo trabalho!

[6] Comentário enviado por antonio.gatto em 08/11/2012 - 12:46h

Muito Bom o Artigo !!

[7] Comentário enviado por rodcorporation em 11/01/2013 - 12:20h

Manooo! Já li muito artigo aqui, achei esse um dos melhores que ja li! Achei interessante. Parabéns, uma dica para o artigo, demorei pra perceber que os dispositivos pais terminam com S, por exemplo DRIVERS, KERNELS e SUBSYSTEMS, seria legal informar que os pais tem o S no final, principalmente a regra que você deu de exemplo onde a primeira não funciona, nao conseguia entender pq exatamente o DRIVERS se referia o pai. por causa do S.

Outra coisa que eu queria perguntar, o que é possível fazer com o udev com as regras?

Valeu man, nota 10!

[8] Comentário enviado por removido em 13/01/2013 - 15:52h

É possível executar scripts para fins diversos sempre que um dispositivo reconhecido e criado, nomear os respectivos nomes contidos para os mesmos em /dev.

[9] Comentário enviado por removido em 09/02/2013 - 07:23h

Olá. Parabéns pelo artigo.

Gostaria de saber se há mais documentação pro udev além dos txts da documentação do kernel.

Não havia encontrado além, até ler seu artigo.

"Site" do udev: https://www.kernel.org/pub/linux/utils/kernel/hotplug/

[10] Comentário enviado por removido em 09/02/2013 - 09:30h

Obrigado pelo comentário Listeiro_037 !

Na ultima página do artigo deixei algumas referências usadas para conclusão do trabalho. E no wiki do archlinux também tem algumas documentações.

[11] Comentário enviado por MAPOGOS em 01/07/2013 - 20:11h

Porque remover os nós dos dispositivo?
E quando necessariamente deverei fazer este cmd?
Obrigado;
Estudante.

[12] Comentário enviado por Renan20 em 29/07/2013 - 00:08h

Muito bom o seu artigo (parabéns)

[13] Comentário enviado por Zephyr em 29/01/2015 - 01:03h

Parabéns pelo artigo: ficou bem claro e explicativo.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts