Saltar para o conteúdo

Guia do Linux/Avançado/Hardware/Configuração de Hardware

Origem: Wikilivros, livros abertos por um mundo aberto.

Configuração de Hardware

[editar | editar código-fonte]

A configuração consiste em ajustar as opções de funcionamento dos dispositivos (periféricos) para comunicação com a placa mãe bem como a configuração do software correspondente para fazer 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

[editar | editar código-fonte]

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 interrupções de hardware mais usado por periféricos. Daqui para frente será explicado somente detalhes sobre 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:


     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, pera 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 em seu 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 encontrar 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 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

[editar | editar código-fonte]

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

[editar | editar código-fonte]

A DMA é usada para permitir a transferência de dados entre dispositivos I/O e a memória sem precisar do processador para fazê-lo. Ele livra esta carga do 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 podem 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 uso mais comum 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 dele, 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 e 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

[editar | editar código-fonte]

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 do que o problema se trata...

I/O - Porta de Entrada/Saída

[editar | editar código-fonte]

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 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 audio 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