O daemon udev gerencia o sistema de arquivos /dev. Permite que você identifique dispositivos com base em suas propriedades, como ID do(a) fornecedor(a) ou ID do dispositivo, de forma dinâmica. É executado no espaço de usuário(a) e foi introduzido no [[LinuxKernel|Linux] 2.6.

Visão geral

O sistema udev é composto por alguns serviços do núcleo (kernel) e o daemon udevd. O núcleo informa o daemon quando eventos relacionados ao hardware acontecem. O daemon responde a eventos com ações apropriadas, que acontecem no espaço de usuário(a), com base em "regras" udev configuráveis. A funcionalidade de espaço de usuário(a) do udev é implementada pelo systemd-udevd.service.

O udev usa regras para determinar qual nome de dispositivo é dado a cada peça de hardware. Isso significa que o dispositivo receberá o mesmo nome, independentemente de qual porta está conectado. Por exemplo, uma regra pode dizer que um disco rígido com o fabricante "iRiver" e o código do dispositivo "ABC" será sempre montado como /dev/iriver. A nomeação consistente de dispositivos garante que os scripts dependentes da existência de um dispositivo específico não serão quebrados.

Na inicialização, o udev lê sua configuração e arquivos de regras na memória. Quando um evento acontece, ele verifica seu banco de dados de regras e executa as ações apropriadas: embora alguns documentos se concentrem na criação de dispositivos em resposta a novos dispositivos que apareceram (hotplugging - "conexão a quente", conexão em fucionamento), as regras do udev podem ser mais gerais: o udev pode executar comandos de espaço de usuário(a) arbitrários em resposta a vários eventos que recebe do kernel. (dar um exemplo disso?)

Configuração

De qual lugar as regras são lidas

O arquivo de configuração principal está em /etc/udev/udev.conf, e as regras são lidas a partir de /run/udev/rules.d, /etc/udev/rules.d e /lib/udev/rules.d: Se um arquivo com o mesmo nome de base estiver presente em mais de um desses diretórios, as versões posteriores serão ignoradas. A ideia é que os pacotes devem instalar as regras em /lib/udev/rules.d, e que o(a) administrador(a) possa substituí-las colocando arquivos em /etc (ou /run para experimentos temporários).

As regras são lidas em ordem alfabética e devem terminar com ".rules".

Quando o arquivo de configuração ou os arquivos de regras são alterados, o programa udevadm deve ser usado para instruir systemd-udevd para recarregar as regras (veja abaixo).

Sintaxe das regras

  1. as regras (rules) contêm uma linha (linhas podem ser quebradas com uma \ antes de uma nova linha).

  2. as regras consistem em "matches" (correspondências) e "actions" (ações).
  3. matches e actions são trios "key" "operator" "value" (chave, operador, valor).
  4. matches têm == ou != para operadores.
  5. actions têm = (atribuição) para operador.
  6. matches verificam um ou mais atributos do evento para ver se a ação será aplicada.
  7. actions especificam o que vai acontecer.
  8. correspondência de exemplo: BUS=="usb"

  9. ação de exemplo: NAME="mydev"

  10. regra de exemplo: {{

KERNEL=="sd*[0-9]|dasd*[0-9]", ENV{ID_SERIAL}=="?*", \

}}}

  1. todas as regras de correspondência serão disparadas.
  2. regras anteriores têm precedência sobre regras posteriores - então coloque suas personalizações antes na lista de arquivos rules.d.
  3. ações como chave="valor" sobrescrevem.
  4. ações como chave+="valor" adicionam às ações que são executadas, por exemplo SYMLINK+="foo" significa "além de quaisquer outros links simbólicos que você iria fazer para este evento, também faça um link simbólico chamado foo".

Conjuntos de regras

Regras para conjuntos de regras (rules sets):

  1. Todas as regras estão em um grande espaço de regras, embora sejam divididas em vários arquivos.
  2. A única organização no espaço de regras é a capacidade de definir rótulos (labels) e, em seguida, pular um monte de regras durante "combine esse evento com essas regras" ao avançar com uma ação GOTO.

  3. há um outro tipo de regra chamado "label" (rótulo): por exemplo, LABEL="persistent_storage_end". São usadas por regras regulares que têm ações "GOTO", por exemplo:

    ACTION!="add", GOTO="persistent_storage_end"
    Note que nesta regra, o termo ACTION é um atributo de um evento e está sendo usado como condição para decidir se a ação GOTO será acionada.
  4. É educado manter GOTOS para saltar dentro de um arquivo (ou você terá que se preocupar em reordenar os arquivos).
  5. Não pule para trás para um rótulo (não tentei, mas imagine que pode terminar em um loop infinito? Talvez o código udev verifique isso - mas se pode ser ignorado (na melhor das hipóteses), por que se incomodar?).
  6. Você pode definir variáveis no espaço ENV em regras anteriores e se referir a elas com regras posteriores.
  7. Existe uma facilidade para a criação de regras dinâmicas (exemplo: veja z45_persistent-net-generator.rules).

Lista de bloqueio

Consulte ListaDeBloqueioDeMódulosDoKernel

Exemplo: nomeação persistente de dispositivo

Neste exemplo, garantimos que uma placa 3G receba um nome persistente.

1. Conecte a "placa" (ou dispositivo).

Assumimos que foi reconhecida como /dev/ttyS1.

2. Encontre os atributos udev usando udevadm.

udevadm começa com o dispositivo especificado (aqui /dev/ttyS1) e caminha até a cadeia de dispositivos superiores. Ele imprime, para cada dispositivo encontrado, todos os atributos possíveis no formato de regras do udev.

Uma regra para corresponder ao dispositivo pode então ser criada usando os atributos do dispositivo e um de seus superiores.

3. Crie um arquivo de regras em /etc/udev/rules.d

Tipicamente, você nomearia esse arquivo z21_persistent-local.rules:

4. Diga ao udev para recarregar suas regras (ou você pode fazer um reboot):

Veja também


CategorySystemAdministration | CategoryBootProcess | CategoryHardware