terça-feira, 22 de março de 2011

Escrevendo regras no UDEV - linux - parte 1

Introdução ao UDEV

O udev foi feito para o kernel linux 2.6 em diante para prover uma solução, no espaço do usuário, para um dinâmido diretório /dev (onde são mapeados os hardwares e outras coisas para arquivos, pois tudo no linux é tratado como arquivo). A implementação anterior, devfs, está depreciada e o udev parece ser seu sucessor. Tem outro projeto chamado devfs, mas ele não é muito popular nem muito usado nas distribuições (quer dizer, eu não gosto dele e não pretendo abordá-lo a não ser em último caso).
Durante anos, as coisas que você precisa para usar as regras do udev foram mudadas, como também a flexibilidade das regras. Em um sistema moderno, udev provê um sistema de persistência de nomes para alguns tipos de dispositivos externos, eliminando a necessidade de regras customizadas para esses dispositivos. De qualquer maneira, alguns usuários irão, mesmo assim, querer um nível de customização extra.

Essa série assumirá que você tem o udev instalado e rodando 100% com configuração padrão. Geralmente isso é cuidado pela distribuição linux. E não irei cobrir cada detalhe de como escrever as regras mas sim os principais conceitos. Os detalhes podem ser lidos nas páginas do manual do udev.
Irei usar vários exemplos (muitos fictícios) para ilustrar as ideias e conceitos. Nem toda sintaxe é explicitadamente descrita nessa série, então veja os exemplos para entender melhor as regras.

Para se ter uma ideia de como funciona o serviço de nomes do udev basta digitar o comando:
 # ls -lR /dev/disk

São basicamente os links simbólicos (atalhos) feitos e mantidos para facilitar algumas operações.


Começando a escrever

Arquivos de regras e semântica

Quando decidindo como nomear um dispositivo e qual ações adicionar para execução, udev lê uma série de arquivos de regras. esse arquivos são mantidos no diretório /etc/udev/rules.d/ e todas devem ter o sufixo ".rules"

As regras padrões são armazenadas em /etc/udev/rules.d/50-udev;rules. É interessante dar uma olhada nesse arquivo, ele inclui muitos exemplos e então algumas configurações padrões provendo um estilo devfs /dev esquema. De qualquer forma, você  não deveria escrever suas regras diretamente nesse arquivo.

Arquivos em /etc/udev/rules.d/ são passados por um analisador léxico (verifica erros), e a ordem das regras é importante. Em geral, você espera que suas próprias regras passem pelo analisador antes da regras padrões, então eu sugiro criar um arquivo /etc/udev/rules.d/10-local.rules (o número 10 indica a ordem) e escrever todas suas regras nele.

Em um arquivo de regras, linhas começadas com "#" são tratadas como comentário, qualquer outra linha "não branca" são tratadas como uma regra. Regras não podem ser divididas em múltiplas linhas.

Um dispositivo pode ser identificado/processado por mais de uma regra. Isso é uma vantagem prática, por exemplo, nós podemos escrever 2 regras que processam um mesmo dispositivo, onde cada uma provê seu próprio nome alternativo para o dispositivo; Ambos nomes alternativos serão criados, mesmo se as regras estiverem em arquivos diferentes. É importante entender isso, que o udev não irá parar de processar quando ele encontra/processa a regra de um dispositivo, ele irá continuar procurando a aplicará qualquer regra que encontrar.

 --------------------
 Aguardem as próximas partes (para quem estou falando?! ehehehehehe)

Um comentário:

  1. Prezado Daniel... primeiro quero lhe agradecer pelo post, que aliás é muito proposital.. Nestes ultimos dias tenho tentado escrever algumas regras através do Udev para enviar uma impressão para uma determinada porta usb... independente da impressora q esteja conectada... estou penando... poderia me ajudar na medida do possível...no mais, um abraço, Fabiocs

    ResponderExcluir