Introdução


Eu tenho me deparado com muitos usuários que estão iniciando no mundo do software livre, e que recentemente acabaram de instalar uma distribuição, e infelizmente, se decepcionaram com o desempenho dos dispositivos e compatibilidade com aplicativos.


O objetivo deste post é mostrar uma maneira alternativa para buscar, descobrir e ativar o módulo correto(como assim?? a distribuição não conseguiu detectar?? como ela fez isso comigo?? ativando outro módulo??) através de comandos conhecidos, principalmente em distribuição debian-like(Ubuntu,Mepis, Sidux, Knoppix, DSL e etc). Os módulos ativos estão em “/proc/modules”. Para mostrar na saída digite: “cat /proc/modules”, ou o comando “lsmod”. Existem diversos métodos para detectar os módulos(mais práticos principalmente), porém, este método que demonstrarei, poderemos aprofundar no funcionamento e detecção dos dispositivos.


Primeiramente, devemos entender o porquê de um módulo não estar “funcionando” corretamente. Possibilidades:

Ainda não existe o módulo do dispositivo. Isto ocorre com dispositivos recém-lançado no mercado. Alguns fabricante não lançam drivers para o nosso pinguin, e sobra para nossa comunidade correr atrás de um módulo alternativo livre, o que pode levar um tempinho. Os dispositivos criados por “empresas desconhecidas”, também são fortes candidatos a não possuírem módulos alternativos livres no kernel do linux.

O módulo está em desenvolvimento ou com bugs. Alguns módulos podem funcionar parcialmente, conter bugs ou mesmo defasados(pode ter sido substituído por outro módulo), e para evitar que este dispositivo comprometa ou mesmo trave o sistema, muitas distribuições “jogam” estes módulos para arquivos blacklists localizados em /etc/modprobe.d/. Dentro deste mesmo diretório encontra-se arquivos de configuração dos módulos e seus respectivos parâmetros para comunicar com o dispositivo. Muitas distribuições ativam módulos genéricos para compensar a falta de um módulo funcional( ex. módulo vesa em placas de vídeo) .

O módulo pode estar correto, porém, limitado. Como a comunidade corre atrás de módulos alternativos livres, muitas das vezes ela é limitada por falta de informações sobre o dispositivo. Em conseqüência destas restrições a comunidade não consegue desenvolver um módulo que explore na totalidade os recursos do dispositivo. Empresas criadoras querem acesso restritos aos seus dispositivos, em contrapartida, o linux ganhou o apoio grandes corporações como AMD, Google,Dell, HP, IBM,Intel, AMD, VIA(recentemente) e tem conseguido ganhar espaço.

O módulo pode estar correto, porém, mal configurado pelo o usuário. O kernel conseguem detectar praticamente todos os módulos, porém, falta apenas um toque final do usuário para configurar na sua distribuição, como ex:

    • Resolução de Vídeo;

    • Parâmetros para ativar canais de som Live 5.1, 7.1. Usuários com ouvidos refinados conseguem perceber se os canais live 5.1 da SoundBlaster estão ativados ou o se é um estéreo distribuído e nas caixas;

    • Memória compartilhada de Vídeo 3D compartilhada, nas placas Intel.


O comando lspci e lsusb:


Nas distribuições debian-like existe o comando o comando lspci, cujo a finalidade é disponibilizar informações do barramento PCI bem como os dispositivos conectado a ele. Vale ressaltar que os dispositivos on-board são listados também. A detecção é feita pelo kernel, caso não exista módulos para o dispositivo, na saída mostrará uma mensagem com de dispositivo desconhecido. O mesmo acontece com o comando “lsusb”, porém, este exibe a lista de dispositivos conectados as portas USB's.

Ao digitar o comando sem parâmetros aparece uma lista dos dispositivos, onde: 1º campo: Endereço do Barramento; 2º Tipo de Dispositivo; 3º Fabricante e Modelo; 4º O número de revisão.

Lspci

Cada dispositivo conectado possui um ID de acordo com o fabricante/dispositivo. Para que apareça na saída, basta acrescentar o parâmetro “-nn”, ficando “lspci -nn”.

Id


Note em destaque o ID de cada dispositivo dentro de colchetes, com um delimitador “:”. No meu caso, tenho uma placa mãe intel, e os ID's dos dispositivos pertencente a placa começam com “8086”. Apenas as minhas placas de rede começam com ID diferente.

No caso do “lsusb”, para se obter o ID basta combinar o comando lsusb com o parâmetro -v.


O comando hwinfo:


Um outro utilitário para buscar informação sobre o hardware é o “hwinfo”. O comando sem parâmetros retorna toda a informação do seu hardware, neste caso é necessário redirecionar a saída para um arquivo, pois retorna muita informação. ex. “sudo hwinfo > hardwareinfo”. Este comando gerou na minha estação um relatório de 3133 linhas de informação sobre o meu hardware. Na figura 1, o endereço retornado na saída do barramento do vídeo é PCI 00:02.0, e procurando por essa informação no arquivo gerado pelo “hwinfo” encontrei mais informações sobre o meu dispositivo, entre elas o modalias = ”pci:v00008086d00002572sv00001043sd000080A5bc03s c00i00”. O modalias referencia o módulo “selvagem” utilizado pelo kernel. Nesta nomenclatura encontra-se informações relativos dispositivos como Tipo_Barramento/ID. Outra informação importante é o diretório /sys, onde se encontra informação a respeito do hardware principalmente na subpasta devices, onde os barramentos e dispositivos estão organizados em forma de estrutura de arquivo - lembrando que o diretório /sys passou a ser implementado à partir da versão 2.6 do kernel e é um diretório virtual(como o /proc) para informações do sistema.

Hwinfo

O comando modprobe:


O comando responsável por ativar ou desativar os módulos é o modprobe. Caso eu queira ativar basta digitar “modprobe nome_módulo”, para remover: “modprobe -r nome_módulo”. O comando modprobe com o parâmetro “-l” (L) mostra a árvore de módulos compilados e disponíveis do kernel. O parâmetro “-c” mostra a lista de módulo com os seus aliases respectivos. Estes aliases são encontrados no diretório “/lib/modules/versao_do_seu_kernel/modules.alias”. Os aliases são criados para facilitar a nomenclatura “selvagem” dos módulos no kernel, como vimos no comando “hwinfo”.

Por ex: A saída abaixo foi filtrada com os módulo skge(Marvell Technology Group Ltda). A parte destacada na figura é a nomenclatura “selvagem” e ao seu lado a nomenclatura simples. A nomenclatura simples pode assumir diversas nomenclatura “selvagens” através destes aliases, como o exemplo abaixo.

Skge

A nomenclatura “selvagem” segue um padrão como o tipo de barramento, informações fabricante entre outros, e o alias relativo a ele pertence a outros módulos “selvagens”. Na figura podemos ver na quinta linha da saída é:

...

alias pci:v000011ABd00004320sv*sd*bc*sc*i* skge

...

Observe em destaque algumas informações do ID fabricante.

Se houver a necessidade de buscar um módulo através de um ID(retornado pelo comando lspci -nn), e buscar o módulo necessário basta filtrá-lo através do “egrep” que permite expressões regulares. Por ex: na figura 2(em lspci) a minha placa de rede 3Com retornou o ID [10b7:9055]. Caso eu queira filtrar o módulo relativo a ele, basta filtrar a saída:

modprobe -c | egrep '10B7.*9055'

Lembrando que na saída na figura 2 o ID aparece [10b7:9055](b minúsculo) e quando filtramos as letras deverão ser maiúsculas, no caso, a letra B deve ser maiúscula.

... | egrep '10B7.*9055'

Caso deseje criar um script e aproveitar a saída maiúscula, use o comando “tr a-z A-Z” para filtrar a saída, para evitar essas diferenças na pesquisa egrep, por ex:

lspci -nn | grep net | tr a-z A-Z

O comando modinfo:

Uma vez que eu sei qual módulo usar, o comando “modinfo” poderá me retornar informações como a localização, as nomenclaturas “selvagem”, autor e etc.

modinfo 3c59x

Na saída aparecerá informações como: localização arquivo de driver(na árvore do kernel), autor, licença, aliases “selvagens” relativos, dependências, versão e parâmetros do dispositivo.

Conclusão

Dos comandos mostrados, que são apenas alguns dos recursos que podemos obter informações sobre o hardware, podemos explorar os dispositivos do sistema operacional, analisar a detecção do kernel, os módulos compatíveis(estáveis ou não) e buscar a melhor funcionalidade dos dispositivos.

As situações mostradas aqui visam um maior entendimento do sistema operacional, o que muitas vezes não necessitamos de saber, mas para todos aqueles curiosos e amantes do pinguin esse post é um pouquinho de conhecimento compartilhado, e caso alguém queira acrescentar dicas, o que é muito bem vindo, mande idéias, críticas e sugestões.