# Udev

udev (userspace /dev) é um gerenciador de dispositivo para o núcleo do Linux. Como o sucessor do devfsd e hotplug, o udev primeiramente gerencia nós de dispositivo no diretório /dev. Ao mesmo tempo, o udev também manipula todos os eventos de espaço de usuário lançados quando dispositivos de hardware são adicionados no sistema ou removidos dele, incluindo carga de firmware, como requerido por certos dispositivos.

## Fundamentação lógica

É o núcleo de um sistema operacional que é responsável por fornecer uma interface abstrata do hardware para o restante do software. Sendo um núcleo (kernel) monolítico, o núcleo (kernel) do Linux faz exatamente isso, e os controladores (drivers) de dispositivo fazem parte do núcleo do Linux, que compõe mais de 50% de seu código-fonte. O hardware pode ser acessado por meio de chamadas do sistema ou por meio de seus nós de dispositivos.
Para ser capaz de lidar com dispositivos periféricos que são capazes de fazer hotplug de uma maneira amigável, uma parte do tratamento de todos esses dispositivos de hardware compatíveis com o hotplug foi transferida do núcleo para um daemon em execução no espaço do usuário. A execução no espaço do usuário serve para fins de segurança e estabilidade.

## Operação

udev é um gerenciador de dispositivos genérico que executa como um daemon em um sistema Linux e que escuta (através de um soquete netlink) os uevents que o kernel envia se um novo dispositivo for inicializado ou um dispositivo for removido do sistema. O pacote udev vem com um extenso conjunto de regras que correspondem aos valores exportados do evento e às propriedades do dispositivo descoberto. Uma regra de correspondência possivelmente nomeará e criará um nó de dispositivo e executará programas configurados para instalar e configurar o dispositivo.
As regras do udev podem corresponder a propriedades como o subsistema do kernel, o nome do dispositivo do kernel, a localização física do dispositivo ou propriedades como o número de série do dispositivo. As regras também podem solicitar informações de programas externos para nomear um dispositivo ou especificar um nome personalizado que sempre será o mesmo, independentemente da ordem em que os dispositivos são descobertos pelo sistema.
No passado, uma maneira comum de usar o udev em sistemas Linux era deixá-lo enviar eventos por meio de um soquete para o HAL, que executaria outras ações específicas do dispositivo. Por exemplo, a HAL notificaria outro software em execução no sistema que o novo hardware havia chegado, emitindo uma mensagem de difusão no sistema D-Bus IPC para todos os processos interessados. Dessa forma, desktops como GNOME ou K Desktop Environment 3 poderiam iniciar o navegador de arquivos para navegar nos sistemas de arquivos de unidades flash USB e de cartões SD recém-conectados.
Em meados de 2011, o HAL foi preterido pela maioria das distribuições Linux, bem como pelos ambientes de desktop KDE, GNOMEref>«HALRemoval». 28 de junho de 2011. Consultado em 13 de setembro de 2011 </ref> e Xfce, entre outros. A funcionalidade anteriormente incorporada ao HAL foi integrada ao próprio udev ou movida para software separado, como udisks e upower.
* udev fornece acesso de baixo nível à árvore de dispositivos linux. Permite que os programas enumerem os dispositivos e suas propriedades e recebam notificações quando os dispositivos entram e saem.
* dbus é um framework para permitir que programas se comuniquem entre si, de forma segura, confiável e com uma interface de programação orientada a objetos de alto nível.
* udisks (anteriormente conhecido como DeviceKit-disks) é um daemon que fica no topo do libudev e outras interfaces do kernel e fornece uma interface de alto nível para dispositivos de armazenamento e é acessível via dbus para aplicativos.
* upower (anteriormente conhecido como DeviceKit-power) é um daemon que fica no topo do libudev e outras interfaces do kernel e fornece uma interface de alto nível para gerenciamento de energia e é acessível via dbus para aplicativos.
* NetworkManager é um daemon que fica no topo do libudev e outras interfaces do kernel (e alguns outros daemons) e fornece uma interface de alto nível para configuração e configuração de rede e é acessível via dbus para aplicativos.
O udev recebe mensagens do kernel e as passa para daemons do subsistema, como o Network Manager. Os aplicativos conversam com o Network Manager por meio de D-Bus.
    ${\ce {Kernel -> udev -> Network Manager <=> D-Bus <=> Firefox}}$
HAL é obsoleto e usado apenas por código legado. Ubuntu 10.04 enviado sem HAL. Inicialmente, um novo daemon DeviceKit foi planejado para substituir certos aspectos do HAL, mas em março de 2009, DeviceKit foi preterido em favor de adicionar o mesmo código ao udev como um pacote: udev-extras, e algumas funções agora foram movidas para o udev propriamente dito.