31.2. PCMCIA em detalhes

As seções a seguir descrevem o que acontece no seu sistema Linux quando um dispositivo PCMCIA é conectado à sua máquina. Os componentes interagem entre si e vários requisitos precisam ser atendidos para suportar um dispositivo PCMCIA.

A seguir uma descrição geral do processo de inicialização do PCMCIA no Linux:

  1. A ponte PCMCIA (ou soquete) deve ser configurada de forma apropriada conforme descrito na Seção 31.2.1, “Inicialização da ponte”. Os pré-requisitos são:

    • um driver apropriado para a ponte

    • faixas de memória e E/S adicionais para placas PC

  2. Após a ponte ser configurada de forma apropriada, o driver da ponte detecta a presença de uma placa e aciona a sua inicialização conforme descrito na Seção 31.2.2, “Inicialização da placa”:

    1. Determine o tipo de placa.

    2. Forneça a voltagem apropriada.

    3. Atribua faixas de memória e E/S e linhas IRQ à placa.

    4. Acione a inicialização do dispositivo ou da placa vinculando o driver de placa apropriado.

    5. Para algumas placas, é preciso fazer o upload da CIS (Card Information Structure).

  3. Finalmente, a própria interface é configurada e está pronta para uso. Consulte a Seção 31.2.3, “Configuração de interface” para obter detalhes.

31.2.1. Inicialização da ponte

A maioria das pontes PCMCIA é composta de dispositivos PCI e é tratada como tal. O processo de inicialização da ponte pode ser resumido como a seguir:

  1. O hotplug cria um evento PCI.

  2. udev chama /sbin/hwup para carregar o driver. /sbin/hwup verifica /etc/sysconfig/hardware em busca de uma configuração de dispositivo existente. Se uma configuração apropriada for encontrada, ela será usada. Caso contrário /sbin/hwup chama modprobe com a string modalias fornecida pelo kernel para carregar o módulo de driver.

  3. Novos eventos de hotplug são enviados (um por soquete de PCMCIA).

  4. As etapas a seguir serão omitidas se somente as placas CardBus forem usadas:

    1. Os eventos pcmcia_socket acionam o udev para chamar /sbin/hwup e carregar o módulo de kernel pcmcia.

    2. Todas as faixas de memória e E/S especificadas em /etc/pcmcia/config.opts são adicionadas ao soquete.

    3. Os serviços da placa no kernel verificam essas faixas. Se as faixas de memória em /etc/pcmcia/config.opts estiverem erradas, essa etapa poderá causar falha na sua máquina. Consulte a Seção 31.3.1, “A máquina falha com o PCMCIA” para obter informações sobre como depurar e corrigir esse problema.

Após essas etapas serem concluídas com êxito, a ponte será totalmente inicializada. Após isso, a própria placa será inicializada conforme descrito na seção seguinte.

31.2.2. Inicialização da placa

Os eventos causados pela conexão com uma placa PCMCIA podem ser resumidos como a seguir:

  1. Um evento de hotplug ocorre. Para placas PC, esse é um evento pcmcia. Para placas CardBus, esse é um evento pci.

  2. Para quaisquer eventos, udev chama /sbin/hwup para carregar um módulo de driver. O nome do módulo é especificado em um arquivo hwcfg* sob /etc/sysconfig/hardware ou através de modprobe modalias.

  3. Se necessário, a inicialização do dispositivo aciona um evento hotplug de firmware. Isso pesquisa por firmware e o carrega.

  4. O driver de dispositivo registra as interfaces.

Após essas etapas serem concluídas, o sistema continua com a configuração de interface conforme descrito na seção seguinte.

Se a sua placa for uma placa PC, você talvez precise de alguns dos seguintes parâmetros em /etc/sysconfig/pcmcia para que ela seja totalmente suportada e funcione sem falhas:

PCMCIA_LOAD_CIS

Um firmware de placa PC é chamado de CIS (Card Information Structure). Ele fornece detalhes de implementação adicional da placa. O comando hwup verifica a integridade da CIS integrada da placa e tenta carregar outra CIS do disco se a CIS da placa estiver com defeito. A configuração padrão é yes. Para desabilitar a CIS de carregar a partir do disco, defina esta variável como no.

PCMCIA_ALLOW_FUNC_MATCH

Os drivers de dispositivo do Linux contêm uma tabela de ID de dispositivo que informa aos drivers quais dispositivos devem ser gerenciados. Isso significa que somente os dispositivos cujos IDs são conhecidos pelo kernel são suportados. Para suportar essas placas cujo ID não está listado, é possível usar a correspondência de função. Isso significa que o driver não está selecionado por ID, mas pela função da placa (como uma placa de rede) e seria responsável por qualquer placa PC inserida com essa função (como placas de rede). A configuração padrão é yes. Para desabilitar a correspondência de função, defina esta variável para no.

PCMCIA_COLDPLUG_REINSERT

Placas que foram inseridas antes da inicialização às vezes não são detectadas. Para evitar isso, cause uma ejeção automática e uma inserção automática da placa definindo PCMCIA_COLDPLUG_REINSERT como yes. A configuração padrão é no.

31.2.3. Configuração de interface

Dependendo do tipo de placa, interfaces diferentes são registradas após a inicialização ter sido concluída com sucesso. O registro de interface é gerenciado pelo hotplug do udev. Para obter detalhes sobre udev e hotplug, consulte o Capítulo 12, Gerenciamento de dispositivo de kernel dinâmico com udev.