Índice
Resumo
O kernel 2.6 do Linux introduz uma nova solução de espaço do usuário para um diretório de dispositivos dinâmicos /dev com designações de dispositivo persistentes: udev. Ele fornece somente os arquivos para dispositivos que estejam realmente presentes. Ele cria ou remove arquivos de nós de dispositivo geralmente localizados no diretório /dev e é capaz de renomear interfaces do usuário. A implementação anterior de um /dev dinâmico com devfs foi substituída pelo udev.
Tradicionalmente, os nós de dispositivo eram armazenados no diretório /dev nos sistemas Linux. Havia um nó para cada tipo possível de dispositivo, independentemente de se ele realmente existia no sistema. Como resultado, este diretório continha milhares de arquivos não usados. Antes de que um subsistema adicionado ou dispositivo de kernel fosse utilizável, os nós correspondentes precisavam ser criados com um aplicativo especial. O sistema de arquivos devfs trouxe uma melhora significante, porque somente os dispositivos que realmente existiam e eram conhecidos pelo kernel receberam um nó de dispositivo em /dev.
O udev introduz uma nova maneira de criar nós de dispositivo. O kernel exporta seu estado interno no sysfs e, cada vez que um dispositivo é reconhecido pelo kernel, ele atualiza as informações no sysfs e envia um evento ao espaço do usuário. Com as informações disponibilizadas pelo sysfs, o udev corresponde a uma sintaxe de regras simples com os atributos do dispositivo fornecidos e cria ou remove os nós de dispositivo correspondentes.
O usuário não precisa criar uma regra udev para novos dispositivos. Se o dispositivo estiver conectado, o nó de dispositivo apropriado será criado automaticamente. No entanto, as regras introduzem a possibilidade de definir uma política de nomeação de dispositivos. Isso também oferece a conveniência de substituir um nome de dispositivo enigmático por um nome que seja fácil de lembrar e também de ter nomes de dispositivo persistentes onde dois dispositivos do mesmo tipo foram conectados ao mesmo tempo.
Pressuponha que você tenha duas impressoras, uma impressora a laser em cores de alta qualidade e uma impressora de jato de tinta em preto e branco, ambas conectadas através do USB. Elas aparecem como /dev/usb/lpX, onde X é um número dependendo da ordem na qual elas foram conectadas. Usando o udev, crie regras udev personalizadas nomeando uma impressora /dev/colorlaser e a outra /dev/inkprinter. Como esses nós de dispositivo são criados pelo udev com base nas características do dispositivo, eles sempre apontam para o dispositivo correto, independentemente da ordem de conexão ou do status.
Antes de que o udev crie nós de dispositivo em /dev, ele lê todos os arquivos em /etc/udev/rules.d com o sufixo .rules em ordem alfabética. A primeira regra que se ajuste em um dispositivo será usada, mesmo que as outras regras também se apliquem. Os comentários são introduzidos com hash (#). As regras têm a seguinte forma:
chave, [chave,...] NOME [, LINK SIMBÓLICO]
Pelo menos uma chave deve ser especificada, porque são atribuídas regras a dispositivos com base nessas chaves. Também é essencial especificar um nome. O nó de dispositivo criado em /dev tem esse nome. O parâmetro de link simbólico opcional permite que sejam criados nós em outros locais. Uma regra para uma impressora teria a seguinte forma:
BUS=="usb", SYSFS{serial}=="12345", NAME="lp_hp", SYMLINK+="printers/hp"
Neste exemplo, existem duas chaves, BUS e SYSFS{serial}. O udev compara o número serial ao número serial do dispositivo que está conectado ao barramento USB. Para atribuir o nome lp_hp ao dispositivo no diretório /dev, todas as chaves devem ser idênticas. Além disso, é criado um link simbólico /dev/printers/hp, que se refere ao nó do dispositivo. Ao mesmo tempo, o diretório printers é automaticamente criado. Os trabalhos de impressão podem ser enviados ao /dev/printers/hp ou /dev/lp_hp.