Entendendo os drivers Linux para arquitetura de barramento PCI

Publicado: 17/01/2011 em Hardware, Linux, Programação
Tags:, , ,

1- Pequena revisão de tipos de barramentos
Os barramentos são utilizados para interligar os diferentes componentes da placa-mãe e também permitir o uso de placas de expansão.

  • ISA: foi o primeiro barramento de expansão utilizado em micros PC.  Nos dias atuais as placas mães com slots ISA praticamente desapareceram do mercado.  Uma das razões que levou a isto é o fato do barramento ISA ser muito lento (operam a apenas 8.33MHz). Com isto, a taxa de transferência real ficar a apenas em 5MB/s.
  • MCA: barramento desenvolvido pela IBM, na intenção de superar as limitações do barramento ISA. Tratava-se de um barramento proprietário, onde os fabricantes de PCs e de periféricos tinham de licenciar a tecnologia e pagar royalties para produzir produtos compatíveis.  A taxa de transferência teórica era de 32MB/s.  O MCA acabou por fracassar.
  • EISA: desenvolvido pela Compac, que abriu as especificações para os demais fabricantes.  Era 4 vezes mais rápido que o padrão ISA.  No entanto, acabou tendo vida curta, pois em 1993 surgiu o VLB.
  • VLB: o VESA Local Bus (VLB) é um padrão aberto de barramento de 32 bits, oferecendo taxas de transferência teóricas de 133MB/s. Tornou-se o padrão de barramento para placas com processadores 486, mas acabou desaparecendo com a introdução do barramento PCI.
  • PCI: em 1992 fora introduzido o barramento PCI, que incorporava o suporte nativo plug-and-play e bus mastering (sistema avançado de acesso direto à memória que permite que HDs, placas de vídeo e outros periféricos leiam e gravem dados diretamente na memória RAM, deixando o processador livre). O PCI é um barramento de 32 bits, resultando em uma taxa de transmissão teórica de 133MB/s compartilhada entre todos os periféricos ligados a ele.  Atualmente é amplamente utilizado em computadores PCs.
  • PC Card (PCMCIA): o padrão PCMCIA surgiu em 1990 como um padrão para expansão de memória em notebooks.  A idéia era permitir a instalação de memória RAM adicional sem precisar abrir o notebook. Em 1991 foi lançado o padrão 2.0, que previa a conexão de outros periféricos, como modems, placas de rede, placas de som, adaptadores de cartões e assim por diante. O padrão PCMCIA foi rapidamente adotado pelos principais fabricantes, tornando-se o barramento de expansão mais usado nos notebooks, mas nunca chegou a ser realmente utilizado para atualização de memória, como originalmente proposto. Como os notebooks atuais passaram a vir “completos”, com rede, som, modem e placa wireless e cada vez mais periféricos passaram a utilizar as portas USB, as placas PC Card se tornaram realmente um item relativamente raro. O PC Card é um barramento plug-and-play, de forma que se pode conectar e desconectar as placas com o micro ligado. Elas são detectadas automaticamente pelo sistema, da mesma forma que os periféricos USB. No caso do Linux os drivers para placas compatíveis são, em sua maioria, incorporados diretamente ao Kernel.
  • AGP: a idéia do barramento “Acelerated Graphics Port” (AGP) é ser um barramento rápido, feito sob medida para o uso das placas 3D de alto desempenho. A versão original do AGP foi finalizada em 1996. Ela permite uma taxa de transferência teórica de 266MB/s. O aparecimento do barramento AGP desafogou o PCI, permitindo que a placa de vídeo tivesse seu próprio barramento rápido de comunicação com o chipset dedicado. A AGP permitiu o aparecimento de placas 3D absurdamente mais rápidas bem como desafogou a comunicação entre os demais componentes. Rapidamente todas as placas de vídeo passaram a utilizá-lo, com os fabricantes oferecendo versões PCI apenas dos modelos mais simples. Embora seja mais recente que o PCI e tenha sido largamente utilizado, o AGP é atualmente um barramento em vias de extinção, devido à popularização do PCI-Express.  Desde 2006, placas novas com slots AGP são um item raro. As placas AGP chegam a uma taxa de transferência de 2133MB/s.
  • PCI Express:  o PCI Express, ou PCIe, é um barramento serial (e não um barramento paralelo, como o PCI), que conserva pouco em comum com os barramentos anteriores. Graças a isso, ele acabou se tornando o sucessor não apenas do PCI, mas também do AGP. Uma das características fundamentais do PCI Express é que ele é um barramento ponto a ponto, onde cada periférico possui um canal exclusivo de comunicação com o chipset. No PCI tradicional, o barramento é compartilhado por todos os periféricos ligados a ele, o que pode criar gargalos. Um slot PCI Express 16x atinge incríveis 4 GB/s de taxa de transferẽncia.
  • USB: o “Universal Serial Bus” é o barramento externo mais usado atualmente. No USB 2.0, o padrão atual, a velocidade é de 60 MB/s, suficiente para a maioria dos pendrives e HDs externos. O USB é um barramento serial, com conectores de 4 contatos, sendo dois para a transmissão dos dados (um para enviar, outro para receber) e os outros dois para a transmissão de eletricidade. Tem-se ainda a possibilidade de usar hubs USB para conectar vários dispositivos à mesma porta. Em teoria, cada porta USB permite a conexão de até 127 dispositivos.  O USB utiliza transmissores e circuitos muito baratos e livre de pagamento de royalties, o que facilita sua popularização.
  • Firewire (IEEE 1394): o firewire surgiu em 1995, pouco antes do USB. Inicialmente desenvolvido pela Apple, o nome fireware é marca registrada daquela empresa. Trata-se de um barramento serial plug-and-play, similar ao USB em muitos aspectos. Suporta conexão de vários periféricos na mesma porta. O conector tradicional utiliza 6 pinos, sendo que 2 são usados para alimentação. Nos dias atuais, o fireware está restrito a alguns nichos, sendo o principal desles a transferência de vídeos a partir de uma filmadora digital. Sua taxa de transmissão é de 50 MB/s (no “FireWire 400”, ou IEEE 1394a) e 100MB/s (no “FireWire 800”, ou IEEE 1394b), este último lançado em 2002. Os fabricantes têm de pagar à Apple pelo uso da tecnologia.

2- O Boot da máquina e o processo de dentificação dos periféricos
Uma das características de maior relevância no funcionamento do PCI, é de que este tem suporte de autodetecção das placas de interface. Os dispositivos PCI são construídos sem “jumpers” e são automaticamente configurados no momento do boot. Quando a energia da máquina é ligada, o hardware permanece inativo. Em outras palavras, o dispositivo responde apenas para as transações de configuração. Neste momento de energização, o dispositivo não tem nem memória nem portas de I/O mapeadas no espaço de memória do computador.  A placa mãe é equipada com um firmware, chamado BIOS, NVRAM ou PROM, dependendo da plataforma.  O firmware oferece acesso ao espaço de endereçamento de configuração de cada dispositivo através da leitura e escrita nos registros de controle de cada dispositivo PCI.

BIOS (Basic Input/Output System): é o firmware para um computador cuja principal função é identificar e inicializar os componentes da motherboard bem como carregar e transferir o controle para um pequeno programa que então faz o carregamento do sistema operacional (a partir do HD, CD-ROM, pendrive, ou qualquer outra mídia disponível).

Aqui estamos nos referindo a “device” ou periférico PCI, indistintamente, e como sendo um dispositivo físico conectado ao barramento PCI. Este dispositivo físico pode ser um cartão de vídeo, um cartão ethernet, uma “Northbridge” etc. Quando do boot do sistema, o firmware realiza os procedimentos de configuração de cada periférico PCI. Os dispositivos PCI fornecem informações que estão guardadas em cada placa. Essas informações são: vendor, device, subsystem_device, subsystem_vendor e class. Um sinal de requisição é enviado pelo BIOS para todos os periféricos instalados no micro.  Cada periférico é capaz de responder ao chamado, permitindo ao BIOS reconhecer que periféricos estão instalados. O passo seguinte é criar uma tabela com todos as interrupções disponíveis e atribuir a cada uma um dispositivo. O sistema operacional (SO) entra em cena logo em seguida, lendo as informações disponibilizadas pelo BIOS e completando a inicialização dos periféricos. Ou seja, quando o device driver acessa o dispositivo, sua região de memória e de I/O já terá sido mapeada dentro do espaço de endereços do processador. O driver pode até alterar esta configuração inicial, porém isto nunca se faz necessário.

PCI típico

Leiaute de um sistema típico PCI

Existem duas pastas especiais que são utilizadas durante o boot do sistema:

  • /proc: trata-se de um diretório virtual, um filesystem virtual. Não contém arquivos como aparenta, mas sim referências a informações dinâmicas do sistema (procedure), geradas constantemente pelo kernel.
  • /sys: destinado à montagem do sysfs (sys filesystem), um repositório utilizado a partir do kernel 2.6 para manter dados atualizados sobre o sistema e os dispositivos de hardware.  Não tem relação com o /proc.

sysfs
A pasta /sys implementa o ponto de montagem do sysfs (ou “/sys filesystem” – SYStem FileSystem), que é o diretório de dispositivos de todo o sistema o qual contém informações e estatísticas sobre os dispositivos. Foi adicionado ao Linux a partir da introdução dos kernels 2.6.X.

O /sys é um diretório especial contendo um sistema de arquivos virtual (o sysfs), montado durante o boot do sistema. Os arquivos contidos em /sys não estão fisicamente no disco rígido, mas sim em áreas protegidas da memória RAM (“ram-based filesystem”). A pasta implementa a montagem do sysfs, vindo a se constituir num repositório de informações atualizadas do sistema, principalmente sobre os recursos instalados na máquina (dispositivos de hardware e drivers com as informações do tipo, fabricante, capacidade, endereços usados, quantidade de dados que foram enviados e recebidos por cada interface de rede, bytes lidos e gravados em uma determinada partição e assim por diante).

Os arquivos do /sys têm a função de facilitarem a troca de informações entre os programas que rodam no espaço do kernel, como os drivers, com os programas que rodam no espaço do usuário (aplicações). As informações geradas automaticamente pelo kernel permitem que diversos programas façam sua leitura, verifiquem as configurações do sistema ou ainda modifiquem o funcionamento de dispositivos do sistema através da alteração dos arquivos lá existentes. Ou seja, é um mecanismo de exportação das estruturas de dados do kernel, seus atributos e ligações, para o espaço do usuário. Por exemplo, quando um dispositivo é adicionado ao sistema, o kernel cria um nome de dispositivo em /sys, e notifica o utilitário udev, o qual gerencia os nomes de dispositivos dinamicamente, criando então um arquivo de dispositivo, geralmente em /dev.

Observações:

  • a) as entradas em /sys são criadas através do kernel e pelos drivers. O usuário não deve criar entradas através de linhas de comando.
  • b) o sysfs é semelhante ao mecanismo de sysctl encontrada em sistemas BSD, mas implementado como um sistema de ficheiros em vez de um mecanismo separado.
  • c) exemplos de alguns subdiretórios contidos em /sys e suas funções:
    • /sys/bus – contém as informações para os diversos barramentos presentes no sistema.
    • /sys/module – módulos carregados no kernel. Cada pasta contém informações e configurações para cada módulo em particular.
    • /sys/devices – todos os dispositivos conectados.
    • /sys/block – contém links para os arquivos do sysfs referentes a cada dispositivo de bloco.
    • /sys/power – contém informações sobre o estado da energia, o número de vezes que o sistema hibernou/dormiu, etc.
    • /sys/fs – informações e configurações pertinentes a cada sistema de arquivos montado, organizado por tipo de sistema de arquivos. Isto significa que há uma pasta intitulada “ext4” que detém as pastas para cada dispositivo/partição com ext4.
    • /sys/firmware – contém informações e configuração para os firmwares residentes.
    • /sys/dev/ – exitem dois subdiretórios: “block” e “char” os quais direcionam os usuários para os dispositivos de “block” (como os HDs) e “character” (como os teclados) respectivamente.
    • /sys/class – contém pastas nomeadas por tipo de dispositivo como “printers”, “sound”, “mem”, “leds”, “input”, etc. Os subdiretórios contêm atalhos para os arquivos sysfs que pertencem ao dispositivo selecionado. Isto é útil para quando um usuário está procurando um dispositivo específico.

Identificação de dispositivos PCI
A identificação de um dispositivo PCI é realizada através de 32 bits, da seguinte maneira: dddd:bb:dd:f 16 bits para domínio; 8 bits para o barramento; 5 bits para o device; e 3 bits para identificar as funções.

onde:
– cada domínio pode receber até 256 barramentos;
– cada barramento pode receber até 32 devices;
– cada device pode ter até 8 funções. Todos os devices têm ao menos 1 função, a função #0. Qualquer device que tenha mais que 1 função é chamado de dispositivo “multi-function”.

A junção de barramentos é realizada por meio de pontes (bridges), que são periféricos PCIs especiais. Uma maneira simples de ter acesso a identificação dos periféricos é através do comando lspci. Na verdade, o comando lspci utiliza os arquivos abaixo de /proc/bus/pci/devices como sua fonte de informação. Para conseguir utilizar este comando, verifique se o pacote a seguir está instalado (caso não esteja, faça sua instalação):
$ apt-cache policy pciutils

Exemplo de informações sobre os barramentos PCI de uma máquina e os devices que estão conectados a eles:

$ lspci -nn
00:00.0 Host bridge [0600]: Intel Corporation Core Processor DRAM Controller [8086:0044] (rev 02)
00:01.0 PCI bridge [0604]: Intel Corporation Core Processor PCI Express x16 Root Port [8086:0045] (rev 02)
00:1a.0 USB controller [0c03]: Intel Corporation 5 Series/3400 Series Chipset USB2 Enhanced Host Controller [8086:3b3c] (rev 05)
00:1b.0 Audio device [0403]: Intel Corporation 5 Series/3400 Series Chipset High Definition Audio [8086:3b56] (rev 05)
00:1c.0 PCI bridge [0604]: Intel Corporation 5 Series/3400 Series Chipset PCI Express Root Port 1 [8086:3b42] (rev 05)
00:1c.1 PCI bridge [0604]: Intel Corporation 5 Series/3400 Series Chipset PCI Express Root Port 2 [8086:3b44] (rev 05)
00:1c.4 PCI bridge [0604]: Intel Corporation 5 Series/3400 Series Chipset PCI Express Root Port 5 [8086:3b4a] (rev 05)
00:1d.0 USB controller [0c03]: Intel Corporation 5 Series/3400 Series Chipset USB2 Enhanced Host Controller [8086:3b34] (rev 05)
00:1e.0 PCI bridge [0604]: Intel Corporation 82801 Mobile PCI Bridge [8086:2448] (rev a5)
00:1f.0 ISA bridge [0601]: Intel Corporation Mobile 5 Series Chipset LPC Interface Controller [8086:3b09] (rev 05)
00:1f.2 SATA controller [0106]: Intel Corporation 5 Series/3400 Series Chipset 4 port SATA AHCI Controller [8086:3b29] (rev 05)
00:1f.3 SMBus [0c05]: Intel Corporation 5 Series/3400 Series Chipset SMBus Controller [8086:3b30] (rev 05)
00:1f.6 Signal processing controller [1180]: Intel Corporation 5 Series/3400 Series Chipset Thermal Subsystem [8086:3b32] (rev 05)
01:00.0 VGA compatible controller [0300]: NVIDIA Corporation GT215 [GeForce GT 335M] [10de:0caf] (rev a2)
01:00.1 Audio device [0403]: NVIDIA Corporation High Definition Audio Controller [10de:0be4] (rev a1)
02:00.0 Network controller [0280]: Realtek Semiconductor Co., Ltd. RTL8191SEvB Wireless LAN Controller [10ec:8172] (rev 10)
03:00.0 Ethernet controller [0200]: Atheros Communications Inc. AR8131 Gigabit Ethernet [1969:1063] (rev c0)
ff:00.0 Host bridge [0600]: Intel Corporation Core Processor QuickPath Architecture Generic Non-core Registers [8086:2c62] (rev 02)
ff:00.1 Host bridge [0600]: Intel Corporation Core Processor QuickPath Architecture System Address Decoder [8086:2d01] (rev 02)
ff:02.0 Host bridge [0600]: Intel Corporation Core Processor QPI Link 0 [8086:2d10] (rev 02)
ff:02.1 Host bridge [0600]: Intel Corporation Core Processor QPI Physical 0 [8086:2d11] (rev 02)
ff:02.2 Host bridge [0600]: Intel Corporation Core Processor Reserved [8086:2d12] (rev 02)
ff:02.3 Host bridge [0600]: Intel Corporation Core Processor Reserved [8086:2d13] (rev 02)

Fazendo a leitura da resposta acima:

  1. Por padrão, o comando lspci suprime a identificação do domínio em máquinas que possuam apenas um único domínio (o “domain 0”). Para se ter a leitura completa incluindo o domínio deve-se utilizar o comando “lspci -D“;
  2. Vemos os barramentos 00, 01, 02, 03 e ff na resposta acima. Ou seja, esta máquina possui 5 barramentos.
  3. Por exemplo, podemos entender a sequência “0000:ff:00.1” mostrada acima da seguinte forma: 0000 : PCI domain (cada domínio pode conter até 256 PCI barramentos) ff : o número do barramento onde o device está instalado 00 : o número do device .1 : a função do PCI device
  4. Mas….de onde o comando lspci obtém a identificação dos devices? O comando lspci faz a leitura através das entradas em sysfs (veja mais adiante neste post) e decodifica os números do “vendor” e do “device” usando as informações do “vendor” e “device” de /usr/share/hwdata/pci.ids (utilizando-se da biblioteca libpci3). Se tiver curiosidade, veja através do comando cat /usr/share/hwdata/pci.ids | less

No comando “lspci -nn” acima, para cada device, existia um par de números no formato [xxxx:yyyy] que identificava o dispositivo. Este par sigifica o [vendor:deviceID]. Por exemplo, acima pode ser visto um par com a identificação [8086:2d11] o que significa o vendor=”Intel” e o device=”1st Generation Core i3/5/7 Processor QPI Physical 0″ (veja a lista de devices para o vendor Intel em The PCI ID Repository). Para uma verificação rápida de compatibilidade dos devices PCI com o Debian, uma página interessante a ser acessada é a Debian GNU/Linux device driver check page. De forma mais geral, de três a cinco registros identificam um device PCI: vendorID, deviceID e class são três destes registros que sempre são utilizados.  Todo fabricante de placas PCIs atribui valores próprios para estes registros de apenas leitura, e o BIOS e o driver pode usá-lo para identificar o dispositivo que está instalado. Adicionalmente, os campos subsystem vendorID e subsystem deviceID são algumas vezes utilizados pelo vendedor para diferenciação de dispositivos similares. Veja mais detalhes e a lista dos identificadores de PCI em PCI Devices ou em PCIdatabase.com. Por exemplo, observe:
$ lspci -n | tail -1
ff:02.3 0600: 8086:2d13 (rev 02)

Podemos entender esta sequência de números da seguinte forma:

Campo 1 : ff:02.3 : número do barramento (ff), número do device (02) e função (3)
Campo 2 : 0600 : device class
Campo 3 : 8086 : vendor ID
Campo 4 : 2d13 : device ID

Onde:

  • vendorID: identifica o fabricante do hardware.  Por exemplo, todo dispositivo Intel é marcado com o mesmo número, 0x8086.  Este 16-bit vendor ID é padronizado por um consórcio de fabricantes estabelecidos no ano de 1994.
  • deviceID: é escolhido pelo fabricante, sem existir um registro oficial e geral para isto.
  • class: cada dispositivo periférico pertence a uma classe. É identificado por um valor de 24bits, onde os dois octetos mais elevados identifica a “base class” (ou grupo) e os dois octetos seguintes a “sub-class”. Veja a lista padronizada de classes PCI em PCI Device Classes. Por exemplo, “ethernet” (subclasse 00) e “token ring” (subclasse 01) pertencem a classe “Network controller” (classe 02), enquanto “parallel” (subclasse 01) e “serial” (subclasse 00) pertencem a classe “Communication controllers” (classe 07). Os drivers podem contar com os registros de class para identificar seus periféricos.

O kernel do Linux representa os PCI devices como pseudo-devices no “sysfs file system“:

$ ls -la /sys/bus/pci/devices
lrwxrwxrwx 1 root root 0000:00:00.0 -> ../../../devices/pci0000:00/0000:00:00.0
lrwxrwxrwx 1 root root 0000:00:01.0 -> ../../../devices/pci0000:00/0000:00:01.0
lrwxrwxrwx 1 root root 0000:00:1a.0 -> ../../../devices/pci0000:00/0000:00:1a.0
lrwxrwxrwx 1 root root 0000:00:1b.0 -> ../../../devices/pci0000:00/0000:00:1b.0
lrwxrwxrwx 1 root root 0000:00:1c.0 -> ../../../devices/pci0000:00/0000:00:1c.0
lrwxrwxrwx 1 root root 0000:00:1c.1 -> ../../../devices/pci0000:00/0000:00:1c.1
lrwxrwxrwx 1 root root 0000:00:1c.4 -> ../../../devices/pci0000:00/0000:00:1c.4
lrwxrwxrwx 1 root root 0000:00:1d.0 -> ../../../devices/pci0000:00/0000:00:1d.0
lrwxrwxrwx 1 root root 0000:00:1e.0 -> ../../../devices/pci0000:00/0000:00:1e.0
lrwxrwxrwx 1 root root 0000:00:1f.0 -> ../../../devices/pci0000:00/0000:00:1f.0
lrwxrwxrwx 1 root root 0000:00:1f.2 -> ../../../devices/pci0000:00/0000:00:1f.2
lrwxrwxrwx 1 root root 0000:00:1f.3 -> ../../../devices/pci0000:00/0000:00:1f.3
lrwxrwxrwx 1 root root 0000:00:1f.6 -> ../../../devices/pci0000:00/0000:00:1f.6
lrwxrwxrwx 1 root root 000:01:00.0 -> ../../../devices/pci0000:00/0000:00:01.0/0000:01:00.0
lrwxrwxrwx 1 root root 0000:01:00.1 -> ../../../devices/pci0000:00/0000:00:01.0/0000:01:00.1
lrwxrwxrwx 1 root root 0000:02:00.0 -> ../../../devices/pci0000:00/0000:00:1c.0/0000:02:00.0
lrwxrwxrwx 1 root root 0000:03:00.0 -> ../../../devices/pci0000:00/0000:00:1c.1/0000:03:00.0
lrwxrwxrwx 1 root root 0000:ff:00.0 -> ../../../devices/pci0000:ff/0000:ff:00.0
lrwxrwxrwx 1 root root 0000:ff:00.1 -> ../../../devices/pci0000:ff/0000:ff:00.1
lrwxrwxrwx 1 root root 0000:ff:02.0 -> ../../../devices/pci0000:ff/0000:ff:02.0
lrwxrwxrwx 1 root root 0000:ff:02.1 -> ../../../devices/pci0000:ff/0000:ff:02.1
lrwxrwxrwx 1 root root 0000:ff:02.2 -> ../../../devices/pci0000:ff/0000:ff:02.2
lrwxrwxrwx 1 root root 0000:ff:02.3 -> ../../../devices/pci0000:ff/0000:ff:02.3

Para obter informações mais detalhadas sobre o device, basta ir ao diretorio do dispositivo e listar as entradas do pseudo-device. Por exemplo:

$ cd /sys/bus/pci/devices/0000:02:00.0
$ cat vendor 0x10ec
$ cat device 0x8172
$ cat class 0x028000

3- Outros comandos correlatos
dmesg   – O hardware detectado no boot fica regristrado no arquivo dmesg. Exibe todo o log do dmesg.
dmesg | less  – com parada por páginas.
dmesg | grep hd   – refinar a pesquisa com grep, exibir somente resultados que contenha hd (se máquinas com devices SCSI, procurar por sd).
dmesg | grep -i eth   – procurar pela placa de rede (eth)
lspci – lista todos os barramentos e devices PCI
lspci -v   – aumenta o detalhamento, usando o modo verbose, acrescentando -v ou -vv
lspci -vv
/sbin/lspci -vv
lspci -vv | grep -i audio
lspci | grep VGA
lspci -vs|ns 0:1:0.1 – lista a informação do dispositivo do domínio 0, barramento 1, slot 0 e função 1.
lsusb -v   – mostrar informações sobre os barramentos USB da máquina e sobre os devices conectados a eles. Chave -v “verbose” (resultado expandido em detalhes).
hwinfo – obter informações do harware.
hwinfo –<hw_item>  onde hw_item pode ser: all, bios, block, bluetooth, braille, bridge, camera, cdrom, chipcard, cpu, disk, dsl, dvb, fingerprint, floppy, framebuffer, gfxcard, hub, ide, isapnp, isdn, joystick, keyboard, memory, modem, monitor, mouse, netcard, network, partition, pci, pcmcia, pcmcia-ctrl, pppoe, printer, scanner, scsi, smp, sound, storage-ctrl, sys, tape, tv, usb, usb-ctrl, vbe, wlan, zip
lshw – um utilitário que provê informações detalhadas sobre o hardware.
lshw -html > lshw-arquivo.html   – gerar página em HTML com informações da máquina.
cat /proc/meminfo – tamanho e uso da memória RAM
free -m  – free -m  mostra a quantidade de memória RAM livre e em uso no sistema
top – mostra os processos da CPU, dando detalhes da ocupação da CPU, da memória e outros.

4- Veja mais:
1- Guia do Hardware
2- Livro: Descobrindo o Linux, de João Eriberto Mota Filho
3- Livro: Linux Device Drivers
4- Mini distro específica para testes de hardware
5- Hardware – FAQ, tutoriais, documentação e indicações
6- Entendendo melhor como funcionam os drivers em máquinas Linux
7- sysfs
8- What is the difference between procfs and sysfs?

Anúncios

Deixe um comentário, pois isto é muito motivante para continuarmos este trabalho

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s