29 Gerenciamento dinâmico de dispositivos do kernel com udev #
O kernel pode adicionar ou remover praticamente qualquer dispositivo em um sistema em execução. Mudanças no estado do dispositivo (se um dispositivo foi conectado ou removido) precisam ser propagadas ao espaço do usuário. Os dispositivos precisam ser configurados no momento em que são conectados e reconhecidos. Os usuários de um determinado dispositivo precisam ser informados sobre qualquer mudança no estado reconhecido desse dispositivo. O udev fornece a infraestrutura necessária para manter dinamicamente os arquivos dos nós de dispositivo e os links simbólicos no diretório /dev. As regras do udev fornecem uma maneira de conectar ferramentas externas ao processamento de evento do dispositivo de kernel. Dessa forma, você pode personalizar o gerenciamento de dispositivos do udev, adicionando determinados scripts para execução como parte do gerenciamento de dispositivos do kernel, ou solicitar e importar dados adicionais para avaliar durante o gerenciamento de dispositivos.
29.1 O diretório /dev #
Os nós de dispositivos no diretório /dev concedem acesso aos dispositivos de kernel correspondentes. Com udev, o diretório /dev reflete o estado atual do kernel. Cada dispositivo de kernel tem um arquivo de dispositivo correspondente. Se um dispositivo for desconectado do sistema, o nó de dispositivo será removido.
O conteúdo do diretório /dev será mantido em um sistema de arquivos temporário, e todos os arquivos serão renderizados a cada inicialização do sistema. Arquivos criados ou modificados manualmente por definição não resistem a uma reinicialização. Os diretórios e arquivos estáticos que sempre devem estar no diretório /dev, independentemente do estado do dispositivo de kernel correspondente, podem ser criados com systemd-tmpfiles. Os arquivos de configuração estão em /usr/lib/tmpfiles.d/ e em /etc/tmpfiles.d/. Para obter mais informações, consulte a página de manual do systemd-tmpfiles(8).
29.2 Kernel uevents e udev #
As informações de dispositivo necessárias são exportadas pelo sistema de arquivos sysfs Para cada dispositivo detectado e inicializado pelo kernel, um diretório com o nome do dispositivo é criado. Ele contém arquivos de atributos com propriedades específicas do dispositivo.
Sempre que um dispositivo é adicionado ou removido, o kernel envia um uevent para notificar o udev sobre a mudança. O daemon udev lê e analisa todas as regras dos arquivos /usr/lib/udev/rules.d/*.rules e /etc/udev/rules.d/*.rules na inicialização e as mantém na memória. Se os arquivos de regras forem mudados, adicionados ou removidos, o daemon poderá recarregar sua representação na memória com o comando udevadm control --reload. Para obter mais detalhes sobre as regras do udev e sua sintaxe, consulte a Seção 29.6, “Influenciando o gerenciamento de eventos de dispositivo do kernel com as regras do udev”.
Cada evento recebido é comparado com o conjunto de regras fornecido. As regras podem adicionar ou modificar chaves de ambiente de eventos, solicitar um nome específico a ser criado pelo nó do dispositivo, adicionar links simbólicos apontando para o nó ou adicionar programas a serem executados após a criação do nó do dispositivo. Os uevents de núcleo do driver são recebidos de um soquete netlink do kernel.
29.3 Drivers, módulos do kernel e dispositivos #
Os drivers de barramento de kernel pesquisam dispositivos. Para cada dispositivo detectado, o kernel cria uma estrutura de dispositivo interna enquanto o núcleo do driver envia um uevent ao daemon udev. Dispositivos de barramento se identificam por meio de um ID formatado especialmente, que especifica o tipo de dispositivo. Esses IDs consistem nos identificadores de produto e de fornecedor, além de outros valores específicos do subsistema. Cada barramento tem seu próprio esquema para esses IDs, chamados MODALIAS. O kernel toma as informações do dispositivo, compõe uma string de ID MODALIAS a partir dele e envia essa string junto com o evento. Para um mouse USB, a string tem a seguinte aparência:
MODALIAS=usb:v046DpC03Ed2000dc00dsc00dp00ic03isc01ip02
Cada driver de dispositivo carrega uma lista de álias conhecidos para os dispositivos que pode tratar. A lista está contida no próprio arquivo de módulo de kernel. O programa depmod lê as listas de IDs e cria o arquivo modules.alias no diretório /lib/modules do kernel para todos os módulos disponíveis atualmente. Com essa infraestrutura, carregar o módulo é fácil como chamar modprobe para cada evento com uma chave MODALIAS. Se modprobe $MODALIAS for chamado, ele corresponderá o álias do dispositivo composto para o dispositivo com os álias fornecidos pelos módulos. Se uma entrada correspondente for encontrada, o módulo será carregado. Tudo isso é acionado automaticamente pelo udev.
29.4 Inicialização e configuração do dispositivo inicial #
Todos os eventos de dispositivo que ocorrem durante o processo de boot antes da execução do daemon udev são perdidos, pois a infraestrutura para gerenciar esses eventos reside no sistema de arquivos raiz e não está disponível naquele momento. Para cobrir essa perda, o kernel fornece um arquivo uevent localizado no diretório de dispositivo de cada dispositivo no sistema de arquivos sysfs. Ao gravar add para esse arquivo, o kernel envia novamente o mesmo evento como o evento perdido durante a inicialização. Um loop simples em todos os arquivos uevent em /sys aciona todos os eventos novamente para criar os nós e executar a configuração do dispositivo.
Por exemplo, durante o boot, um mouse USB talvez não seja inicializado pela lógica de boot anterior, pois o driver não está disponível nesse momento. O evento para a descoberta do dispositivo foi perdido e não encontrou um módulo de kernel para o dispositivo. Em vez de pesquisar manualmente os dispositivos conectados, o udev solicita todos os eventos de dispositivo do kernel após a disponibilização do sistema de arquivos raiz. Dessa forma, o evento para o dispositivo de mouse USB é executado novamente. Então ele encontra o módulo de kernel no sistema de arquivos raiz montado e o mouse USB pode ser inicializado.
No espaço do usuário, não há diferença visível entre a sequência coldplug do dispositivo e a descoberta de dispositivo durante o tempo de execução. Em ambos os casos, as mesmas regras são usadas para correspondência e os mesmos programas configurados são executados.
29.5 Monitorando o daemon udev em execução #
O programa udevadm monitor pode ser usado para visualizar os eventos centrais do driver e a temporização dos processos de eventos do udev.
UEVENT[1185238505.276660] add /devices/pci0000:00/0000:00:1d.2/usb3/3-1 (usb) UDEV [1185238505.279198] add /devices/pci0000:00/0000:00:1d.2/usb3/3-1 (usb) UEVENT[1185238505.279527] add /devices/pci0000:00/0000:00:1d.2/usb3/3-1/3-1:1.0 (usb) UDEV [1185238505.285573] add /devices/pci0000:00/0000:00:1d.2/usb3/3-1/3-1:1.0 (usb) UEVENT[1185238505.298878] add /devices/pci0000:00/0000:00:1d.2/usb3/3-1/3-1:1.0/input/input10 (input) UDEV [1185238505.305026] add /devices/pci0000:00/0000:00:1d.2/usb3/3-1/3-1:1.0/input/input10 (input) UEVENT[1185238505.305442] add /devices/pci0000:00/0000:00:1d.2/usb3/3-1/3-1:1.0/input/input10/mouse2 (input) UEVENT[1185238505.306440] add /devices/pci0000:00/0000:00:1d.2/usb3/3-1/3-1:1.0/input/input10/event4 (input) UDEV [1185238505.325384] add /devices/pci0000:00/0000:00:1d.2/usb3/3-1/3-1:1.0/input/input10/event4 (input) UDEV [1185238505.342257] add /devices/pci0000:00/0000:00:1d.2/usb3/3-1/3-1:1.0/input/input10/mouse2 (input)
As linhas UEVENT mostram os eventos que o kernel enviou através de netlink. As linhas UDEV mostram os handlers de evento do udev concluídos. A temporização é impressa em microssegundos. O tempo entre UEVENT e UDEV é o tempo que o udev levou para processar esse evento ou que o daemon udev atrasou sua execução para sincronizar esse evento com eventos relacionados e já em execução. Por exemplo, eventos para partições de disco rígido sempre esperam pela conclusão do evento do dispositivo de disco principal, pois os eventos de partição podem se basear nos dados que o evento de disco principal consultou do hardware.
udevadm monitor --env mostra o ambiente de evento completo:
ACTION=add DEVPATH=/devices/pci0000:00/0000:00:1d.2/usb3/3-1/3-1:1.0/input/input10 SUBSYSTEM=input SEQNUM=1181 NAME="Logitech USB-PS/2 Optical Mouse" PHYS="usb-0000:00:1d.2-1/input0" UNIQ="" EV=7 KEY=70000 0 0 0 0 REL=103 MODALIAS=input:b0003v046DpC03Ee0110-e0,1,2,k110,111,112,r0,1,8,amlsfw
O udev também envia mensagens para o syslog. A prioridade do syslog padrão que controla as mensagens que são enviadas ao syslog está especificada no arquivo de configuração /etc/udev/udev.conf do udev. A prioridade de registro do daemon em execução pode ser modificada com udevadm control
--log_priority=LEVEL/NUMBER.
29.6 Influenciando o gerenciamento de eventos de dispositivo do kernel com as regras do udev #
Uma regra do udev pode corresponder a qualquer propriedade que o kernel adiciona ao evento propriamente dito ou a qualquer informação que o kernel exporta para sysfs. A regra também pode solicitar informações adicionais de programas externos. Os eventos são comparados com todas as regras incluídas nos diretórios /usr/lib/udev/rules.d/ (para regras padrão) e /etc/udev/rules.d (configuração específica do sistema).
Cada linha no arquivo de regras contém pelo menos um par de valores de chave. Há dois tipos de chaves, de atribuição e correspondência. Se todas as chaves de correspondência corresponderem aos valores, a regra será aplicada e as chaves de atribuição serão atribuídas ao valor especificado. Uma regra correspondente pode especificar o nome do nó do dispositivo, adicionar links simbólicos apontando para o nó ou executar um programa especificado como parte do gerenciamento de eventos. Se nenhuma regra de correspondência for encontrada, o nome do nó de dispositivo padrão será usado para criar o nó de dispositivo. As informações detalhadas sobre a sintaxe da regra e as chaves fornecidas para corresponder ou importar os dados estão descritas na página de manual do udev. As regras de exemplo a seguir apresentam uma introdução básica à sintaxe da regra do udev. As regras de exemplo são todas extraídas do conjunto de regras padrão /usr/lib/udev/rules.d/50-udev-default.rules do udev.
udev de exemplo ## console
KERNEL=="console", MODE="0600", OPTIONS="last_rule"
# serial devices
KERNEL=="ttyUSB*", ATTRS{product}=="[Pp]alm*Handheld*", SYMLINK+="pilot"
# printer
SUBSYSTEM=="usb", KERNEL=="lp*", NAME="usb/%k", SYMLINK+="usb%k", GROUP="lp"
# kernel firmware loader
SUBSYSTEM=="firmware", ACTION=="add", RUN+="firmware.sh"
A regra do console consiste em três chaves: uma chave de correspondência (KERNEL) e duas chaves de atribuição (MODE, OPTIONS). A regra de correspondência KERNEL pesquisa qualquer item do tipo console na lista de dispositivos. Apenas correspondências exatas são válidas e acionam essa regra para que seja executada. A chave MODE atribui permissões especiais ao nó de dispositivo, neste caso, permissões de leitura e gravação apenas ao proprietário desse dispositivo. A chave OPTIONS torna esta a última regra a ser aplicada a qualquer dispositivo desse tipo. Qualquer regra posterior que corresponda a esse tipo de dispositivo em particular não terá nenhum efeito.
A regra dos serial devices não está mais disponível em 50-udev-default.rules, mas ainda vale a pena ser considerada. Consiste em duas chaves de correspondência (KERNEL e ATTRS) e uma de atribuição (SYMLINK). A chave KERNEL procura todos os dispositivos do tipo ttyUSB. Usando o curinga *, essa chave corresponde a diversos desses dispositivos. A segunda chave de correspondência, ATTRS, verifica se o arquivo de atributo do product em sysfs para qualquer dispositivo ttyUSB contém uma determinada string. A chave de atribuição (SYMLINK) aciona a adição de um link simbólico para esse dispositivo em /dev/pilot. O operador usado nessa chave (+=) instrui o udev a executar essa ação adicionalmente, mesmo se regras anteriores ou posteriores adicionarem outros links simbólicos. Como essa regra contém duas chaves de correspondência, ela é aplicada apenas se ambas as condições são cumpridas.
A regra da printer lida com impressoras USB e contém duas chaves de correspondência que devem ser aplicadas para que a regra inteira seja aplicada (SUBSYSTEM e KERNEL). Três chaves de atribuição lidam com a nomeação desse tipo de dispositivo (NAME), a criação dos links de dispositivo simbólicos (SYMLINK) e a participação no grupo desse tipo de dispositivo (GROUP). O uso do curinga * na chave KERNEL faz com que ela corresponda a diversos dispositivos de impressora lp. Substituições são usadas pelo nome do dispositivo interno tanto na chave NAME quanto na SYMLINK para estender essas strings. Por exemplo, o link simbólico para a primeira impressora USB lp seria /dev/usblp0.
A regra do kernel firmware loader faz com que o udev carregue um firmware adicional por um script de assistente externo durante o tempo de execução. A chave de correspondência SUBSYSTEM procura o subsistema de firmware A chave ACTION verifica se algum dispositivo pertencente ao subsistema de firmware foi adicionado. A chave RUN+= aciona a execução do script firmware.sh para localizar o firmware a ser carregado.
Algumas características são comuns a todas as regras:
Cada regra é composta por um ou mais pares de valores de chaves separados por vírgula.
A operação de uma chave é determinada pelo operador. As regras do
udevsuportam diversos operadores.Cada valor dado deve estar entre aspas.
Cada linha do arquivo de regras representa uma regra. Se a regra for maior do que uma linha, use
\para unir as linhas diferentes como se faz na sintaxe do shell.As regras do
udevsuportam um padrão no estilo do shell que corresponde aos padrões*,?e[].As regras do
udevsuportam substituições.
29.6.1 Usando operadores nas regras do udev #
Ao criar chaves, você pode escolher dentre vários operadores, dependendo do tipo de chave que deseja criar. Normalmente, as chaves de correspondência são usadas para localizar um valor que corresponda ou explicitamente não corresponda ao valor da pesquisa. As chaves de correspondência contêm um dos seguintes operadores:
==Comparar para igualdade. Se a chave contém um padrão de pesquisa, todos os resultados correspondentes a esse padrão são válidos.
!=Comparar para não igualdade. Se a chave contém um padrão de pesquisa, todos os resultados correspondentes a esse padrão são válidos.
Qualquer um dos operadores a seguir também pode ser usado com chaves de atribuição:
=Atribuir um valor a uma chave. Se a chave consistia anteriormente em uma lista de valores, ela é redefinida e apenas o valor único é atribuído.
+=Adicionar um valor a uma chave que contenha uma lista de entradas.
:=Atribuir um valor final. Não permitir nenhuma mudança posterior por regras posteriores.
29.6.2 Usando substituições nas regras do udev #
As regras do udev suportam o uso de marcadores e substituições. Use-as como faria em qualquer outro script. É possível usar as seguintes substituições com as regras do udev:
%r,$rootO diretório do dispositivo,
/devpor padrão.%p,$devpathO valor de
DEVPATH.%k,$kernelO valor de
KERNELou o nome do dispositivo interno.%n,$numberO nome do dispositivo.
%N,$tempnodeO nome temporário do arquivo de dispositivo.
%M,$majorO número maior do dispositivo.
%m,$minorO número menor do dispositivo.
%s{ATTRIBUTE},$attr{ATTRIBUTE}O valor de um atributo
sysfs(especificado por ATTRIBUTE).%E{VARIABLE},$env{VARIABLE}O valor de uma variável do ambiente (especificado por VARIABLE).
%c,$resultA saída de
PROGRAM.%%O caractere
%.$$O caractere
$.
29.6.3 Usando as chaves de correspondência do udev #
As chaves de correspondência descrevem as condições que devem ser atendidas para aplicar uma regra do udev. As seguintes chaves de correspondência estão disponíveis:
ACTIONO nome da ação do evento, por exemplo,
addouremovena adição ou remoção de um dispositivo.DEVPATHO caminho do dispositivo do evento, por exemplo,
DEVPATH=/bus/pci/drivers/ipw3945para procurar todos os eventos relacionados ao driver ipw3945.KERNELO nome interno (do kernel) do dispositivo do evento.
SUBSYSTEMO subsistema do dispositivo do evento, por exemplo,
SUBSYSTEM=usbpara todos os eventos relacionados a dispositivos USB.ATTR{FILENAME}Atributos
sysfsdo dispositivo do evento. Para corresponder a uma string contida no nome de arquivo de atributovendor, você pode usarATTR{vendor}=="On[sS]tream", por exemplo.KERNELSPermitem que o
udevpesquise o caminho do dispositivo para encontrar um nome de dispositivo correspondente.SUBSYSTEMSPermitem que o
udevpesquise o caminho do dispositivo para encontrar um nome de subsistema do dispositivo correspondente.DRIVERSPermitem que o
udevpesquise o caminho do dispositivo para encontrar um nome de driver do dispositivo correspondente.ATTRS{FILENAME}Permitem que o
udevpesquise o caminho do dispositivo para encontrar um com valores de atributosysfscorrespondentes.ENV{KEY}O valor de uma variável de ambiente, por exemplo,
ENV{ID_BUS}="ieee1394para procurar todos os eventos relacionados ao ID do barramento FireWire.PROGRAMPermite que o
udevexecute um programa externo. Para ser bem-sucedido, o programa deve retornar com código de saída zero. A saída do programa, impressa em STDOUT, está disponível para a chaveRESULT.RESULTCorresponder à string de saída da última chamada de
PROGRAM. Incluir esta chave na mesma regra que a chavePROGRAMou em uma posterior.
29.6.4 Usando as chaves de atribuição do udev #
Em contraste com as chaves de correspondência descritas anteriormente, as chaves de atribuição não descrevem condições que devem ser cumpridas. Elas atribuem valores, nomes e ações aos nós do dispositivo mantidos pelo udev.
NAMEO nome do nó de dispositivo a ser criado. Depois que uma regra definir o nome de um nó, todas as outras regras com a chave
NAMEreferente a esse nó serão ignoradas.SYMLINKO nome de um link simbólico relacionado ao nó a ser criado. Várias regras de correspondência podem adicionar links simbólicos a serem criados com o nó do dispositivo. Você também pode especificar vários links simbólicos para um nó em uma regra usando o caractere de espaço para separar os nomes dos links simbólicos.
OWNER, GROUP, MODEAs permissões do novo nó de dispositivo. Os valores especificados aqui sobregravam qualquer coisa que tenha sido compilada.
ATTR{KEY}Especifica um valor para ser gravado no atributo
sysfsdo dispositivo de evento. Se o operador==é usado, essa chave também é usada para corresponder com o valor de um atributosysfs.ENV{KEY}Indica ao
udevpara exportar uma variável para o ambiente. Se o operador==é usado, essa chave também é usada para corresponder com uma variável de ambiente.RUNIndica ao
udevpara adicionar um programa à lista de programas a serem executados neste dispositivo. Lembre-se de restringir essa lista a pequenas tarefas para evitar o bloqueio de outros eventos nesse dispositivo.LABELAdicionar um rótulo para onde um
GOTOpossa ir.GOTOIndicar ao
udevpara ignorar várias regras e continuar com uma que inclua o rótulo citado pela chaveGOTO.IMPORT{TYPE}Carregar variáveis para o ambiente do evento, como a saída de um programa externo. O
udevimporta variáveis de diversos tipos. Se nenhum tipo for especificado, oudevtentará determinar o tipo sozinho, com base na parte executável das permissões do arquivo.programdiz aoudevpara executar um programa externo e importar sua saída.filediz aoudevpara importar um arquivo texto.parentdiz aoudevpara importar as chaves armazenadas do dispositivo pai.
WAIT_FOR_SYSFSIndica ao
udevpara aguardar a criação do arquivosysfsespecificado para determinado dispositivo. Por exemplo,WAIT_FOR_SYSFS="ioerr_cnt"diz aoudevpara aguardar a criação do arquivoioerr_cnt.OPTIONSA chave
OPTIONpode ter vários valores:last_rulediz aoudevpara ignorar todas as regras posteriores.ignore_devicediz aoudevpara ignorar este evento.ignore_removediz aoudevpara ignorar todos os eventos de remoção posteriores para o dispositivo.all_partitionsdiz aoudevpara criar nós de dispositivo para todas as partições disponíveis em um dispositivo de bloco.
29.7 Nomeação persistente de dispositivos #
O diretório do dispositivo dinâmico e a infraestrutura de regras do udev possibilitam especificar nomes estáveis para todos os dispositivos de disco, independentemente da ordem de reconhecimento ou da conexão usada para o dispositivo. Cada dispositivo de bloco apropriado criado pelo kernel é examinado por ferramentas com conhecimento especial sobre determinados barramentos, tipos de unidade ou sistemas de arquivos. Com o nome do nó do dispositivo fornecido pelo kernel dinâmico, o udev mantém as classes de links persistentes apontando para o dispositivo:
/dev/disk
|-- by-id
| |-- scsi-SATA_HTS726060M9AT00_MRH453M4HWHG7B -> ../../sda
| |-- scsi-SATA_HTS726060M9AT00_MRH453M4HWHG7B-part1 -> ../../sda1
| |-- scsi-SATA_HTS726060M9AT00_MRH453M4HWHG7B-part6 -> ../../sda6
| |-- scsi-SATA_HTS726060M9AT00_MRH453M4HWHG7B-part7 -> ../../sda7
| |-- usb-Generic_STORAGE_DEVICE_02773 -> ../../sdd
| `-- usb-Generic_STORAGE_DEVICE_02773-part1 -> ../../sdd1
|-- by-label
| |-- Photos -> ../../sdd1
| |-- SUSE10 -> ../../sda7
| `-- devel -> ../../sda6
|-- by-path
| |-- pci-0000:00:1f.2-scsi-0:0:0:0 -> ../../sda
| |-- pci-0000:00:1f.2-scsi-0:0:0:0-part1 -> ../../sda1
| |-- pci-0000:00:1f.2-scsi-0:0:0:0-part6 -> ../../sda6
| |-- pci-0000:00:1f.2-scsi-0:0:0:0-part7 -> ../../sda7
| |-- pci-0000:00:1f.2-scsi-1:0:0:0 -> ../../sr0
| |-- usb-02773:0:0:2 -> ../../sdd
| |-- usb-02773:0:0:2-part1 -> ../../sdd1
`-- by-uuid
|-- 159a47a4-e6e6-40be-a757-a629991479ae -> ../../sda7
|-- 3e999973-00c9-4917-9442-b7633bd95b9e -> ../../sda6
`-- 4210-8F8C -> ../../sdd129.8 Arquivos usados pelo udev #
/sys/*Sistema de arquivos virtual fornecido pelo kernel do Linux, exportando todos os dispositivos conhecidos atualmente. Essas informações são usadas pelo
udevpara criar nós de dispositivo em/dev/dev/*Nós de dispositivo criados dinamicamente e conteúdo estático criado com systemd-tmpfiles. Para obter mais informações, consulte a página de manual do
systemd-tmpfiles(8).
Os arquivos e os diretórios a seguir incluem elementos cruciais da infraestrutura do udev:
/etc/udev/udev.confArquivo de configuração principal do
udev./etc/udev/rules.d/*Regras de correspondência de eventos do
udevespecíficas do sistema. Aqui, é possível adicionar regras personalizadas para modificar ou anular as regras padrão do/usr/lib/udev/rules.d/*.Os arquivos são analisados em ordem alfanumérica. As regras dos arquivos com prioridade mais alta modificam ou anulam as regras com prioridade mais baixa. Quanto menor o número, maior a prioridade.
/usr/lib/udev/rules.d/*Regras de correspondência de eventos do
udevpadrão. Os arquivos nesse diretório são de propriedade dos pacotes e serão sobregravados pelas atualizações. Não adicione, remova ou edite arquivos aqui; em vez disso, use o/etc/udev/rules.d./usr/lib/udev/*Programas ajudantes chamados de regras do
udev./usr/lib/tmpfiles.d/e/etc/tmpfiles.d/Responsáveis pelo conteúdo do
/devestático.
29.9 Mais informações #
Para obter mais informações sobre a infraestrutura do udev, consulte as seguintes páginas de manual:
udevInformações importantes sobre
udev, chaves, regras e outras questões essenciais de configuração.udevadmÉ possível usar o
udevadmpara controlar o comportamento de tempo de execução doudev, solicitar eventos do kernel, gerenciar a fila de eventos e fornecer mecanismos simples de depuração.udevdInformações sobre o daemon de gerenciamento de eventos do
udev.