Devfs e hotplug

Podemos dividir o processo de ativação de um dispositivo no Linux em três passos: em primeiro lugar é carregado o módulo que dá suporte a ele, em seguida é criado um device (como “/dev/sda”), um arquivo especial através do
qual ele é acessado e, opcionalmente, é executado algum script ou ação adicional.

Ao plugar uma webcam, seria carregado (por exemplo) o módulo “spca5xx” e criado o device “/dev/video0”, através do qual os programas podem acessar a câmera. Ao plugar um pendrive seria carregado o módulo “usb-storage e,
assim por diante. Em muitos casos, é preciso carregar mais de um módulo. Para sincronizar o Kpilot com um Palm USB, por exemplo, é preciso carregar os módulos usbserial e visor.

Um device é a combinação de dois endereços de Kernel: um major number e um minor number. O major number é usado para indicar uma categoria de dispositivos, enquanto o minor number identifica o dispositivo
em si. Por exemplo, o major number “180” é usado em relação a impressoras USB. A primeira impressora conectada recebe o device “/dev/usb/lp0”, que é formado pela combinação do major number “180” e o minor number “1”. A segunda impressora conectada recebe
o device “/dev/usb/lp1”, que é formado pelo major number “180” e pelo minor number “2” e assim por diante.

Tradicionalmente, o responsável por criar e manter os devices correspondentes a cada dispositivo era o devfs. Ele cumpre a função usando uma abordagem bem simples: o diretório “/dev” contém
devices prontos para todos os dispositivos suportados, mesmo que poucos deles estejam realmente em uso. Os devices vão sendo atribuídos conforme novos dispositivos são ativados.

O hotplug entra em cena com a função de detectar novos dispositivos. É ele o responsável por carregar os módulos apropriados, ajustar permissões e executar tarefas diversas sempre que um novo dispositivo é
conectado. Sem o hotplug, seu pendrive ainda funciona normalmente, mas você passa a ter o trabalho de ter que carregar os módulos e montar o dispositivo sempre que quiser acessá-lo e sua impressora passa a aparecer no gerenciador de impressão apenas
depois que você carrega os módulos apropriados e a configura manualmente através do kaddprinterwizard, ou outro gerenciador.

O hotplug surgiu originalmente como um script responsável por detectar e ativar dispositivos USB conforme eram plugados no micro. Embora tenha um funcionamento interno relativamente simples, o hotplug se mostrou bastante
eficiente e passou a ser expandido para assumir a configuração de outros dispositivos. Atualmente, o hotplug não se limita a apenas pendrives, impressoras e câmeras, dá suporte a todo tipo de dispositivo firewire, PCMCIA, PCI e SCSI.

A partir do Kernel 2.6, o hotplug se tornou um componente padrão do sistema. Ele vem pré-instalado em qualquer distribuição que se preze. Mesmo o Slackware que é espartano em termos de ferramentas automáticas de detecção
passou a incluí-lo a partir da versão 9.2. Verifique apenas se o serviço “hotplug” está ativo e, se necessário, ative-o com o comando:

# /etc/init.d/hotplug start

ou

# /etc/rc.d/rc.hotplug start

(no Slackware)

Os arquivos de configuração do hotplug estão concentrados dentro da pasta “/etc/hotplug“. O hotplug trabalha com os códigos de identificação dos dispositivos, carregando módulos ou executando scripts com
funções diversas sempre que dispositivos conhecidos são conectados.

Na maioria das distribuições, é incluído o arquivo “/etc/hotplug/usb.distmap“, que contém uma grande quantidade de regras pré-configuradas. Você pode adicionar regras adicionais usando o arquivo
/etc/hotplug/usb.usermap“. A possibilidade mais interessante é executar scripts personalizados quando determinados dispositivos são plugados. Isto permite fazer desde coisas simples, como tocar um som, ou abrir um determinado programa,
até incluir scripts mais complexos, que fazem backups automáticos. Veremos isso com mais detalhes logo adiante.

Outro arquivo útil dentro da configuração do hotplug é o “/etc/hotplug/blacklist“, onde são especificados módulos que não devem ser carregados automaticamente pelo hotplug. Este arquivo permite solucionar
problemas causados por módulos “mal comportados”, que causam travamentos ou problemas diversos ao serem carregados. Isto é relativamente comum com relação a módulos proprietários, como os drivers para softmodems e para algumas placas wireless, que em
muitos casos chegam a congelar o sistema caso o dispositivo a que dão suporte não esteja presente, ou ao tentarem (incorretamente) ativarem um dispositivo similar, mas que não é inteiramente compatível com ele.

Um exemplo é o módulo “Intel537“, que dá suporte a modems Intel Ambient. Os modems Intel Ambient “legítimos” possuem um chip DSP grande, com a marca “Ambient” decalcada. Existem muitos modems com chips
Intel537AA ou 537EA (fáceis de reconhecer, pois possuem chips bem menores) que não são compatíveis com o driver. Ao tentar carregar o módulo Intel537 com um destes modems instalado, o sistema em muitos casos simplesmente trava, mesmo que o modem nem
esteja em uso.

Em geral, as distribuições já vem com o arquivo populado com vários drivers que reconhecidamente possuem problemas. No Kurumin, por exemplo, eu incluo o módulos dos softmodems, que podem ser carregados manualmente através
dos ícones no menu:

ltmodem
Intel537
pctel
slamr

Além dos periféricos USB, o hotplug é capaz de detectar outros tipos de dispositivos, que são configurados através de arquivos como o pci.agent, scsi.agent, tape.agent,
ieee1394.agent, net.agent e wlan.agent. Todos estes arquivos são na verdade scripts, que são executados durante o boot e conforme o hotplug encontra novos dispositivos. Individualmente, os scripts são
rápidos, mas executá-los em massa faz com que a inicialização das versões recentes do hotplug seja relativamente demorada, aumentando o tempo de boot da máquina. Conforme o hotplug cresce em complexidade e incorpora mais scripts, a tendência é que o tempo
se torne cada vez maior.

Isso é apontado como um dos pontos negativos do hotplug em relação ao udev, que vem ganhando espaço e substituindo-o em muitas distribuições.

Sobre o Autor

Redes Sociais:

Deixe seu comentário

X