O lsusb é útil para mostrar todas as informações sobre os dispositivos USB conectados a este tipo de barramento.
A opção –v mostra detalhadamente as informações sobre o dispositivo USB.
$ lsusb -v Bus 001 Device 001: ID 0000:0000 Device Descriptor: bLength 18 bDescriptorType 1 bcdUSB 1.00 bDeviceClass 9 Hub bDeviceSubClass 0 Unused bDeviceProtocol 0 bMaxPacketSize0 8 idVendor 0x0000 idProduct 0x0000 bcdDevice 0.00 iManufacturer 0
C e r t i f i c a ç ã o L i n u x
30
iProduct 2 iSerial 1 bNumConfigurations 1 (...)O Kernel 2.6 do Linux possui um robusto sistema de reconhecimento de hardware e suporte a diversos dispositivos. Este sistema foi im ple mentado principalmente atra- vés do sysfs, udev e do d-bus.
SYSFS
O sysfs é um recurso do Kernel 2.6 para exportar informações úteis sobre o siste- ma para os processos (programas) dos usuários através de um sistema de arquivo em memória.
O sysfs organiza as informações do Kernel em diretórios de forma rigorosa e baseada na organização interna das estruturas de dados do Kernel.
Os arquivos que são criados neste sistema de arquivos são principalmente em ASCII (texto puro) com um valor por arquivo. Estas características asseguram que as infor- mações passadas pelo sysfs aos programas sejam precisas e utilizadas facilmente. Uma vez que a estrutura do sysfs é composta de diretórios, arquivos e links simbó- licos, a navegação dentro dele é fácil e intuitiva. O sysfs geralmente é montado no diretório /sys.
Os principais diretórios do sysfs são: block, bus, class, devices, firmware, fs, kernel, module e power.
BLOCK
O diretório block contém subdiretórios para cada sistema de arquivos de bloco (discos rígidos, principalmente) existentes no sistema. Dentro dos diretórios dos dispositivos, há diversos arquivos que indicam, ente outras coisas, o tamanho do dispositivo, status etc .
T ó p i c o 1 0 1 : A r q u i t e t u r a d e H a r d w a r e
31
BUS
Este diretório contém subdiretórios para cada tipo de barramento suportado pelo Ker- nel. E cada subdiretório contém os diretórios devices e drivers. O primeiro contém uma lista de todos os dispositivos encontrados que são do tipo de barramento indica- do. O segundo contém os drivers de dispositivos daquele tipo de barramento.
CLASS
O diretório class contém representações de cada classe de dispositivo que está regis- trado no Kernel. As classes indicam o tipo de dispositivo que elas representam. Por exemplo: classe de impressoras, classe de discos etc . Cada subdiretório de classe terá um diretório para cada tipo de dispositivo encontrado pertencente àquela classe. Por exemplo: a classe “net” contém os dispositivos “eth0” e “eth1”. E, dentro de cada diretórios de dispositivo, são encontrados arquivos e diretórios associados ao tipo de dispositivo a que ele pertence.
DEVICES
O diretório devices contém a hierarquia global dos dispositivos encontrados e supor- tados pelo Kernel. Sua hierarquia de diretórios obedece a organização dos dispositi- vos em qual tipo de conexão elétrica eles estão conectados. Apenas dois dispositivos são a exceção da regra: dispositivos de plataforma (platform) e de sistema (system). O primeiro diretório é relativo aos dispositivos periféricos inerentes à plataforma de processamento e barramento do hardware. Por exemplo: dispositivos inerentes a por- tas de entrada e saída, controladores seriais e paralelos etc . Já o system representa os dispositivos não periféricos que não se encaixam em qualquer outra classificação. Por exemplo: CPUs, APICs, temporizadores etc .
FIRMWARE
O diretório firmware contém interfaces para verificar e atribuir objetos específicos de firmware. Firmware são códigos executados durante o processo de carga da máquina, como software da BIOS.
C e r t i f i c a ç ã o L i n u x
32
MODULE
O diretório module contém subdiretórios com todos os módulos de Kernel carrega- dos para a memória. Os módulos são pedaços de programas que podem ou não fazer parte do Kernel, de forma que são lidos e executados de acordo com a necessidade do usuário. Por exemplo: se você não utiliza com frequência o drive de disquete, pode optar por carregar o módulo que habilita suporte a disquetes somente quando for fazer uso deste tipo de mídia. Este tipo de arquitetura modular permite que o Kernel fique mais leve, ocupando menos memória e também menos processamento, deixando a CPU mais tempo livre para executar os programas dos usuários. Um Kernel enxuto permite que o sistema tenha uma eficiência melhor, mas não impede que outras funcionalidades sejam agregadas sob demanda na forma de módulos do Kernel. É importante saber que todos os diretórios de módulo contêm um arquivo chamado refcnt que conta o número de referências ou número de usuários que fa- zem uso ao módulo específico. Este arquivo é lido pelo comando lsmod que será visto adiante neste livro.
POWER
O diretório power representa o subsistema de gerenciamento de ener gia. Possui alguns arquivos que representam o método que o sistema irá utilizar para entrar em modo de suspensão ou economia de energia.
É importante você saber que as informações contidas neste sistema de arquivos são organizadas de forma que diversos programas e utilitários fazem uso delas para inte- ragir melhor com o Kernel.
HALD
O hald é um programa que fica em execução em modo de servidor (daemon) que man- tém um banco de dados sobre os dispositivos conectados ao sistema, em tempo real. Este programa fica conectado no Kernel através do D-BUS escutando as mensagens re- ferentes aos dispositivos e provê uma biblioteca de programação API para que outros programas possam descobrir, monitorar e fazer uso dos dispositivos. O HALD facilita
T ó p i c o 1 0 1 : A r q u i t e t u r a d e H a r d w a r e
33
o trabalho dos programadores oferecendo um meio fácil e rápido de interagir com os dispositivos sem precisar fazer acesso direto a eles.
UDEV
O gerenciamento dinâmico de dispositivos (udev) é responsável por manter a estru- tura de diretório do /dev (diretório que contém os links que representam os dispo- sitivos) de forma a permitir que somente dispositivos conectados sejam listados na estrutura do /dev.
Geralmente este gerenciador é executado na forma do programa chamado udevd em modo de servidor (daemon) que fica escutando os eventos do Kernel para encontrar quando um dispositivo é removido ou adicionado ao sistema. Quando se percebe um evento de dispositivo no Kernel ele compara com as regras relacionadas no sysfs para identificar o dispositivo e, depois disso, cria ou remove o link simbólico do dispositi- vo no diretório /dev.
D-BUS
D-BUS é um projeto de software livre mantido pela freedesktop.org. Seu principal ob- jetivo é criar um barramento de troca de mensagens entre os programas. Ele permite que os programas interajam entre si de forma que o programador não precisa conhecer a instância do outro programa em que ele deseja se conectar. Desta forma, o D-BUS oferta uma bi blio teca de programação que permite a troca de mensagens entre as apli- cações através de protocolos padronizados, utilizando-se do XML para fazer a ligação entre programas distintos. O D-BUS suporta diversas linguagens de programação de alto nível como Qt, GLib, Java, C#, Python etc .