Identificando dispositivos PCI

Por:

Esse artigo mostra como saber, de maneira precisa e confiável, qual o driver correto para um dispositivo PCI usando o mínimo de ferramentas. Não importa qual Sistema Operacional você esteja usando.

Esse artigo se propõe a falar somente sobre a tarefa de “saber” qual o driver correto para um dispositivo. Instalar um driver qualquer é algo que está além do escopo desse artigo. Essa técnica dispensa o trabalho de ter que abrir o gabinete para ver o que está escrito na placa, até porque, na minha opinião, esse é um procedimento falho, já que o nome real de um dispositivo nem sempre está decalcado no chip.

Trabalho numa assistência técnica, e tenho que lidar com instalação de drivers constantemente então não posso ficar perdendo tempo com detalhes. Ou seja, esse artigo será muito útil para pessoas de função parecida com a minha. Quando você se depara com situações onde precise, num só dia, instalar diversos drivers em mais de uma máquina com sistemas diferentes. Nesse caso, é recomendado que leia esse artigo, pois o método convencional seria bem demorado (e desengonçado).

Por outro lado, se você é uma pessoa que precisa instalar drivers só de vez em quando, esse artigo lhe será pouco útil.

A instalação de driver é uma “ciência inexata” e seu processo é irregular (pelo menos de início).
Portanto, não existe um script ou programa que possa fazê-lo do começo ao fim sem intervenção humana.

Primeiramente, o que é um driver?

Driver é uma camada de abstração entre o hardware e o Sistema Operacional. O hardware não é manipulado diretamente pelo software. Cada dispositivo possui funções específicas e diferente funcionamento. Cada um precisa se comunicar com o sistema de maneira diferente.

Quando um Sistema precisa se comunicar com um dispositivo, ele consulta o driver, o qual manda a mensagem para o hardware de maneira que ele entenda, esse então obtém a resposta e manda de volta para o sistema.

Driver também é um software, mas um software especial. Ele é um pedaço de código que contém instruções de baixo nível (funções muito próximas do hardware, intimamente vinculadas com o dispositivo em questão, rotinas que seriam pouco inteligíveis para seres humanos).

Por ser um software, é escrito por pessoas, então é muito comum que contenha bugs.

Como o Sistema Operacional sabe qual o driver correto para determinado dispositivo

Essa é a questão chave desse artigo. Logicamente ele não adivinha, ele apenas usa informações que estão gravadas no chip do próprio dispositivo: VENDOR ID, DEVICE ID e CLASS ID – vou explicar cada uma delas:

VENDOR ID:

VENDOR = “fornecedor”, ID = abreviação de “identity”, então, em português seria “Identificação do Fornecedor”;

DEVICE ID:

DEVICE = “dispositivo”, então: “Identificação do Dispositivo”.

CLASS ID:

CLASS = “classe”, então: “Classe do Dispositivo”;

Na verdade, existem mais informações disponíveis no chip de um dispositivo, porém as que citei acima são as principais.

Para esse IDs, são reservados dois bytes de informação, então, numa placa de rede Realtek por exemplo, temos:

VENDOR ID 10EC
DEVICE ID 8139
CLASS ID 0200

Trata-se do popular modelo RTL8139.

Baseado nisso, é que o Sistema Operacional tem como localizar o driver correto para cada dispositivo.

Todo Sistema Operacional, procura por novos dispositivos a cada boot, o que é feito em segundo plano. O sistema, mantém armazenada, em algum lugar, uma tabela geral dos dispositivos presentes no computador.

Durante todo boot, o sistema consulta a BIOS e varre todos os barramentos da placa e então é feita uma lista do que foi encontrado. Tal lista é comparada com a tabela já existente na intenção de saber se algum dispositivo foi desconectado ou se um novo foi adicionado. Caso algo tenha sido removido, o sistema ignora a carga do driver para o dispositivo em questão, caso algo tenha sido adicionado, são consultadas as informações contidas no próprio dispositivo e efetua-se uma busca no banco de dados de drivers existente no próprio sistema. Se ele encontrar algo que combine, o driver é instalado (geralmente) em segundo plano, caso contrário, o driver deverá ser instalado manualmente pelo próprio usuário.

Todo esse processo é baseado no PCI ID (VENDOR, DEVICE e CLASS ID). O nome que vemos quando o dispositivo já está instalado é algo secundário, usado apenas para ser mais amigável. Tal nome pode ser útil, mas não deve ser tratado com muita importância quando se usa para localizar um driver qualquer, isso pode gerar confusão pois o nome as vezes varia em circunstâncias diferentes, por exemplo, a mesma placa pode ter um nome no Linux e outro ligeiramente diferente num sistema Windows.

Eu sempre carrego comigo um arquivo chamado “pci.ids”, o qual pode ser encontrado em “The Linux PCI ID Repository” – http://pciids.sourceforge.net.

É um projeto comunitário que visa listar todos os dispositivos conhecidos num arquivo de texto, relacionando VENDOR e DEVICE ID com seus respectivos nomes “amigáveis”. Ele não é completo porém está sendo atualizado constantemente (já ocorreu comigo de baixar o arquivo e ver que o último release era de algumas horas atrás). Isso não é um programa, como podem ver, apenas um arquivo de texto puro o qual pode ser usado por outros utilitários (como o lspci por exemplo).

Tendo esse arquivo sempre por perto, basta pegar os PCI IDs do dispositivo e pesquisá-los no arquivo, usando um editor de texto qualquer (como o VIM ou o Notepad2).

Após obter o nome “amigável” do dispositivo, fica mais fácil pesquisar no Google ou então em http://www.driverguide.com (um cadastro gratuito é requerido).

Dica para WinUsers: Arquivos de driver para sistemas Windows são acompanhados de um arquivo com extensão INF. Isso é uma espécie de script o qual é processado pelo sistema durante a instalação do driver. Por ser um arquivo de texto puro, você pode abrí-lo em qualquer editor de texto. Então você checa para ver se o PCI ID do dispositivo em questão consta dentro desse arquivo. Por exemplo, num driver para um modelo de modem Lucent qualquer, teremos a seguinte informação em algum lugar no arquivo INF:

VEN_11C1&DEV_0452&SUBSYS_1513144F&REV_00

onde:
“VEN_11C1” indica o VENDOR ID
“DEV_0452” indica o DEVICE ID

Algumas vezes, o driver vem acompanhado com um instalador (setup.exe, por exemplo). Quase sempre você pode ignorá-lo e instalar manualmente sem que ocorra nenhum problema. É muito útil fazer isso quando você quer que seja instalado somente o driver para o dispositivo, e nada softwares adicionais que muitas vezes nem usamos. Resumindo, um instalação manual, apontando o local exato onde consta o arquivo INF e deixar que o Windows instale sozinho, é uma instalação mais “limpa” e leve, já que somente os arquivos essenciais serão instalados.

Como obter o PCI ID

Usando o POST:

Existem várias maneiras de você conseguir tais informações, sendo que o POST é a mais simples e eficiente na minha opinião. POST é uma abreviação de “Power On Self Test” (traduzindo, “Auto-Teste ao Ligar”).

Existe uma outra descrição menos técnica para isso que todos conhecem (até mesmo minha vó): “Letrinhas Brancas que aparecem numa tela preta quando liga o PC”.

Na maioria das vezes, o POST é dividido em duas partes. Na primeira, assim que ligamos o PC, ele exibe informações como nome e data da BIOS, modelo da placa-mãe, etc, faz um teste básico na memória RAM, detecta os dispositivos IDEs (HDs, DVD/CDs), daí então pula para a segunda parte, onde limpa a tela anterior e imprime informações gerais de todo o hardware numa tabela que ocupa geralmente a tela inteira. Aquilo que queremos está no final dela: “PCI Device listing”.

Para pausar a execução do POST nessa tela, você pressiona “PAUSE-BREAK”. Agora é possível ler, em varias linhas, o PCI ID de cada dispositivo conectado no barramento PCI.

Porém existem algumas BIOS que exibem informações resumidas, ocultando o PCI ID e mostrando somente a descrição da classe dos dispositivos. Nesse caso, será necessário usar outra técnica.

Usando o Sistema Operacional:

Windows: você pode obter informações dos PCI IDs consultando o Registro, em máquina Win9x, use a chave: HKEY_LOCAL_MACHINEEnumPCI

… e, em máquinas NT/2000/XP, vá em: HKEY_LOCAL_MACHINESystemCurrentControlSetEnumPCI

Linux: no shell, use o comando lspci. Mesmo não tendo esse sistema instalado na sua máquina, você pode usar uma distribuição que roda do CD, como Kurumin por exemplo.

obs: tanto em Linux quanto Windows, não é preciso ter o driver instalado para obter tais informações (claro, senão de que valeria essa técnica), porém no caso de Sistemas Windows, é necessário que você conclua aquele assistente de instalação de driver mesmo que não tenha o driver para que ele grave as informações no registro. Outro detalhe, mesmo que você remova uma placa qualquer, o Windows ainda mantém as informações de tal dispositivo armazenadas no registro para o caso de você recolocá-lo novamente, isso também acontece quando você desabilita dispositivos on-board. Então o técnico desavisado pode se confundir, já que após muitas modificações de hardware, alguns ítens que você vê no registro simplesmente não existem mais.

Existem outras ferramentas que podem lhe ajudar:

* PCI Sleep – simples utilitário free open source que roda em FreeDOS ou MS-DOS

* procure no Google por “PCI Sniffer”

* procure também pelo utilitário Windows “Unknown Devices”

Técnicas que eu aconselho não usar:

* Abrir a CPU para ver o que está impresso na placa

Essa é a primeira técnica usada pelo técnico mais iniciante no assunto. Por impulso, é a primeira coisa que vem na cabeça quando você tem que instalar um driver e não conhece nem o fabricante nem o modelo. Mas como já disse acima, na placa nem sempre está impresso bonitinho o nome correto do modelo, algumas vezes, nem o nome correto do fabricante.

Por exemplo, existem alguns modems com chipset Motorola que são fabricados pela Digitron. Supondo que um cara desavisado, caiu de para-quédas num problema onde precise instalar esse driver mas ele não conhece nem o fabricante nem o modelo. Então ele abre a CPU para ler o que está escrito na placa. Puxa, mas ela está conectada no slot mais inacessível e devido sua posição, não dá pra ler o que está escrito, nem mesmo inclinando-se a CPU. Solução, remover a placa. Hum! Com ela em mãos, o sujeito leu “Digitron” (pois estava em letras grandes) impresso em branco na parte verde mas não reparou direito que num chip bem pequeneninho, estava impresso de maneira pouca destacada o nome “Motorola”, então ele recoloca a placa, fecha a CPU e inicia a procura pelo driver.

Até aí já foram gastas algumas calorias desnecessárias, se abaixar, abrir CPU, poeira, suor, espirro.

Concluindo, se você procura na internet por “Digitron”, é provável que você acabe encontrando o driver, porém seria muito mais eficiente e certeiro, procurar por “Motorola”, ou “SM56” ou pelo DEVICE ID “3052”.

* Instalar “Pacotes” fornecidos no CD (Windows)

Essa também não é uma técnica errada, porém, na minha opinião, é desnecessária, pois no final do processo, é muito provável que tenha sido copiado para seu HD, mais arquivos do que o necessário para seu dispositivo funcionar. Eu falo daqueles utilitários ou softwares que são instalados durante o processo e se registram para inicializar com o sistema na intenção de oferecer uma interface um pouco mais “amigável” para o usuário ou então acesso a recursos “especiais” do dispositivo. Tais utilitários são inofensivos, e algumas vezes trazem opções até interessantes, mas na prática quase ninguém usa, tornando a inicialização do sistema um pouquinho mais lenta.

Nesse caso, você pode usar o CD, mas ao invés de deixar ele “se auto se instalar a si próprio”, instale manualmente cada dispositivo apontando a pasta exata para que o Windows instale apenas o essencial.

Por outro lado, se você não se importa em ter o controle do que está acontecendo e quer apenas ver os drivers instalados o mais rápido possível, não há nada de errado em usar esse procedimento.

Dica rápidas para usuários Windows

* Em máquinas Windows XP, é mais fácil obter o PCI ID usando o “Gerenciador de Dispositivos”. Acesse a guia de propriedades do dispositivo “desconhecido” e vá na aba “Detalhes”. Lá estão as informações que podem ser encontradas no registro, porém são exibidos detalhes daquele dispositivo somente, reduzindo as chances de confusão.

* Supondo que você já saiba o PCI ID, e tem um diretório com muitos subdiretórios contendo os arquivos do possível driver (um CD de placa-mãe, por exemplo), use o localizar do próprio Windows e procure pelo DEVICE ID ou VENDOR ID dentro de arquivos com extensão INF.

Você também pode usar essa técnica para obter o PCI ID de uma placa de vídeo AGP, já que, apesar de ser um barramento separado, é derivado do PCI.

Links Relacionados:

* Wikipediahttp://wikipedia.org/ – procure por “pci”
* The Linux PCI ID Repositoryhttp://pciids.sourceforge.net
* Acesse www.linmodems.org se estiver procurando drivers de (win)modems para Linux
* PCI SIGhttp://www.pcisig.com/

Sobre o Autor

Redes Sociais:

Deixe seu comentário

X