# Guia do Linux/Iniciante+Intermediário/Hardware/Configuração de Hardware
## Configuração de Hardware

A configuração de hardware consiste em ajustar as opções de funcionamento dos dispositivos (periféricos) para que se comuniquem com a placa mãe, bem como a configuração do software correspondente para propocrcionar acesso ao hardware. Um sistema bem configurado consiste em cada dispositivo funcionando com suas portas I/O, IRQ, DMA bem definidas, não existindo conflitos com outros dispositivos. Isto também permitirá a adição de novos dispositivos ao sistema sem problemas.
Dispositivos PCI, PCI Express, AMR, CNR possuem configuração automática de recursos de hardware, podendo apenas ser ligados na máquina para serem reconhecidos pela placa mãe. Após isso, deverá ser feita a configuração do módulo do kernel para que o hardware funcione corretamente.
Os parâmetros dos módulos do kernel, usados para configurar dispositivos de hardware, são a IRQ, DMA e I/O. Para dispositivos plug and play, como hardwares PCI, basta carregar o módulo para ter o hardware funcionando.

### IRQ - Requisição de Interrupção

Existem dois tipos básicos de interrupções: as usadas por dispositivos (para a comunicação com a placa mãe) e programas (para obter a atenção do processador). As interrupções de software são mais usadas por programas, incluindo o sistema operacional, e as interrupções de hardware são mais usadas por periféricos. Daqui para frente, serão explicados somente os detalhes sobre as interrupções de hardware.
Os antigos computadores 8086/8088 (XT) usavam somente 8 interrupções de hardware, operando a 8 bits. Com o surgimento do AT, foram incluí­das 8 novas interrupções, operando a 16 bits. Os computadores 286 e superiores tem 16 interrupções de hardware, numeradas de 0 a 15. No kernel 2.4 e superiores do Linux, a função APIC (Advanced Programmable Interruption Controller) permite gerenciar de forma avançada mais de 15 interrupções no sistema operacional. Estas interrupções oferecem ao dispositivo associado a capacidade de interromper o que o processador estiver fazendo, pedindo atenção imediata.
As interrupções do sistema podem ser visualizadas no kernel com o comando cat /proc/interrupts. Abaixo um resumo do uso mais comum das 16 interrupções de hardware:
| Nº | Interrupções de hardware |
| 0 | Timer do Sistema - Fixa |
| 01 | Teclado - Fixa |
| 02 | Controlador de Interrupção Programável - Fixa. Esta interrupção é usada como ponte para a IRQ 9 e vem dos antigos processadores 8086/8088 que somente tinham 8 IRQs. Assim, para tornar processadores 8088 e 80286 comunicáveis, a IRQ 2 é usada como um redirecionador quando se utiliza uma interrupção acima da 8. |
| 03 | Normalmente usado por /dev/ttyS1, mas seu uso depende dos dispositivos instalados no sistema (como fax-modem, placas de rede 8 bits, etc). |
| 04 | Normalmente usado por /dev/ttyS0 e, quase sempre, usada pelo mouse serial, a não ser que um mouse PS2 esteja instalado no sistema. |
| 05 | Normalmente a segunda porta paralela. Muitos micros não tem a segunda porta paralela, assim é comum encontrarmos placas de som e outros dispositivos usando esta IRQ. |
| 06 | Controlador de Disquete - Esta interrupção pode ser compartilhada com placas aceleradoras de disquete, usadas em tapes (unidades de fita). |
| 07 | Primeira porta de impressora. Pessoas tiveram sucesso compartilhando esta porta de impressora com a segunda porta de impressora. Muitas impressoras não usam IRQs. |
| 08 | Relógio em tempo real do CMOS - Não pode ser usado por nenhum outro dispositivo. |
| 09 | Esta é uma ponte para IRQ2 e deve ser a última IRQ a ser utilizada. No entanto, pode ser usada por dispositivos. |
| 10 | Interrupção normalmente livre para dispositivos. O controlador USB utiliza essa interrupção quando presente, mas não é regra. |
| 11 | Interrupção livre para dispositivos |
| 12 | Interrupção normalmente livre para dispositivos. O mouse PS/2, quando presente, utiliza esta interrupção. |
| 13 | Processador de dados numéricos - Não pode ser usada ou compartilhada |
| 14 | Esta interrupção é usada pela primeira controladora de discos rí­gidos e não pode ser compartilhada. |
| 15 | Esta é a interrupção usada pela segunda controladora de discos e não pode ser compartilhada. Pode ser usada caso a segunda controladora esteja desativada. |
Dispositivos ISA, VESA, EISA, SCSI não permitem o compartilhamento de uma mesma IRQ, talvez isto ainda seja possí­vel caso não haja outras opções disponí­veis e/ou os dois dispositivos não acessem a IRQ ao mesmo tempo, mas isto é uma solução precária.
Conflitos de IRQ ocorriam nesse tipo de hardware acima, ocasionando a parada ou mal funcionamento de um dispositivo e/ou de todo o sistema. Para resolver um conflito de IRQs, deve-se conhecer quais IRQs estão sendo usadas e por quais dispositivos (usando cat /proc/interrupts) e configurar as interrupções de forma que uma não entre em conflito com outra. Isto normalmente é feito através dos jumpers de placas ou através de software (no caso de dispositivos jumperless ou plug-and-play).
Dispositivos PCI, PCI Express são projetados para permitir o compartilhamento de interrupções. Se for necessário usar uma interrupção normal, o chipset (ou BIOS) mapeará a interrupção para uma interrupção normal do sistema (normalmente usando alguma interrupção entre a IRQ 9 e IRQ 12) ou usando APIC (se estiver configurado).

#### Prioridade das Interrupções

Cada IRQ no sistema tem um número que identifica a prioridade que será atendida pelo processador. Nos antigos sistemas XT, as prioridades eram identificadas em sequência de acordo com as interrupções existentes:
| IRQ | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
| PRI | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
Com o surgimento do barramento AT (16 bits), as interrupções passaram a ser identificadas da seguinte forma:
| IRQ | 0 1 2 (9 10 11 12 13 14 15) 3 4 5 6 7 8 |
| PRI | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
Note que a prioridade segue em sequência através da ponte da IRQ 2 para IRQ 9. Os dispositivos com prioridade mais baixa são atendidos primeiro, mas é uma diferença de desempenho praticamente imperceptí­vel de ser notada nos sistemas atuais.

### DMA - Acesso Direto a Memória

A DMA é usada para permitir a transferência de dados entre dispositivos I/O e a memória sem precisar do processador fazê-lo. Ela livra desta carga o processador e resulta em uma rápida transferência de dados.
O PC padrão tem dois controladores de DMA. O primeiro controla os canais 0, 1, 2, 3 e o segundo os canais 4, 5, 6, 7, assim temos 8 canais. No entanto, o canal 4 é perdido porque é usado pelo controlador de acesso direto a memória. Os canais 0-3 são chamados de canais baixos porque podem somente mover um byte (8 bits) por transferência enquanto canais altos movem 2 bytes (16 bits) por transferência.
Os dados movidos usando a DMA não são movidos através do controlador de DMA. Isto oferece uma limitação porque a DMA somente pode mover dados entre os dispositivos (portas I/O) e a memória. Não é possí­vel mover dados entre as portas ou entre a memória.
Existem dois controladores de DMA nos computadores AT e superiores. Ao contrário do que acontece com os dois controladores de IRQ, o primeiro controlador é ligado ao segundo e não o segundo ao primeiro. Os canais de DMA altos (5 ao 7) somente podem ser acessados por dispositivos de 16 bits (aqueles que utilizam a segunda parte do slot AT). Como resultado temos 8 canais de DMA, de 0 a 7, sendo que a DMA 4 é usada como ligação entre eles.
Os canais de DMA em uso no sistema podem ser visualizados com cat /proc/dma. Abaixo uma listagem de usos mais comuns dos canais de DMA.
| DMA | Barram. | Uso |
| 0 | - | Usada pelo circuito de refresh da memória DRAM |
| 1 | 8/16 bits | Normalmente usado por placas de som (canal 8 bits), porta paralela ECP, adaptadoras SCSI, placas de rede ou controladora de scanner. |
| 2 | 8/16 bits | Normalmente usado pela controladora de disquetes ou controladoras de tapes. |
| 3 | 8/6 bits | Usado pela porta paralela ECP, placa de som, controladoras de tapes, controladoras SCSI ou controladora de scanner antiga. |
| 4 | - | Usada como ponte para a outra controladora de DMA (0-3) |
| 5 | 16 bits | Normalmente usada pela placa de som (canal 16 bits), placas controladoras SCSI, placas de rede ou controladora de scanner. |
| 6 | 16 bits | Placa de som (canal 16 bits), controladora de scanner ou placa de rede. |
| 7 | 16 bits | Placa de som (canal 16 bits), controladora de scanner ou placa de rede. |
Somente dispositivos ISA e derivados deles, como o EISA e VESA, usam os canais de DMA padrão. Os atuais dispositivos de alta taxa de transferência (normalmente PCI) possuem seu próprio controlador de DMA embutido, muito mais rápido do que a DMA padrão. Este controlador de DMA é chamado de Bus Mastering, muito usado nos discos rí­gidos atuais, e pode atingir taxas de 33,3MB/s (no modo 2) e 66MB/s (no modo 4 - requer um cabo IDE com aterramento para evitar interferências de ruí­dos externos).

#### Conflitos de DMA

Um canal de DMA não pode ser compartilhado entre dispositivos. Ainda é possí­vel configurar dois dispositivos para usarem um mesmo canal de DMA, desde que ele não seja usado ao mesmo tempo. Isto acontece com Scanners paralelos que compartilham a mesma porta paralela com a impressora. Se você for uma pessoa que explora os recursos de multitarefa de seu Linux e seu desempenho, evite estes tipos de dispositivos, prefira aqueles que utilizam seus próprios recursos.
Quando ocorre um conflito de DMA, os dados podem ser misturados e ocorrerem coisas estranhas até o travamento total do sistema. Este tipo de conflito é difí­cil de se diagnosticar, a não ser que o técnico seja experiente o bastante e tenha desconfiado de que problema se trata...

### I/O - Porta de Entrada/Saí­da

Cada dispositivo possui um endereço de porta. O endereço é uma localização da memória, usada pelo computador para enviar dados ao dispositivo, e de onde o dispositivo envia dados ao computador. Ao contrários da IRQ e DMA, o dispositivo pode usar mais de uma porta de Entrada/Saí­da ou uma faixa de endereços. Por exemplo, uma placa de som padrão usa as portas 0x220, 0x330 e 0x388, respectivamente: áudio digital, midi e opl3.
As placas de rede normalmente transferem grandes quantidades de dados, assim ocupam uma faixa de endereços. Uma NE2000, por exemplo, ocupa a faixa de endereços 0x260 a 0x27F (0x260-0x27F). O tamanho da faixa de endereços varia de acordo com o tipo de dispositivo.
Os endereços de I/O, em uso no sistema, podem ser visualizados com o comando cat /proc/ioports.
Endereços das portas de entrada/saí­da não podem ser compartilhados.