31.2. PCMCIA en détails

Les sections suivantes décrivent ce qui se passe dans votre système Linux lorsqu'un périphérique PCMCIA est branché à votre machine. Les composants interagissent les uns avec les autres et de nombreuses conditions doivent être remplies pour qu'un périphérique PCMCIA soit pris en charge.

Vous trouverez ci-dessous une présentation globale du processus d'initialisation PCMCIA dans Linux :

  1. Le pont PCMCIA (ou socket) doit être configuré correctement comme décrit à la Section 31.2.1, « Initialisation du pont ». Les conditions préalables sont :

    • un pilote approprié pour le pont ;

    • des plages d'E/S et de mémoire supplémentaires pour cartes PC.

  2. Une fois le pont configuré correctement, le pilote du pont détecte la présence d'une carte et déclenche son initialisation comme décrit à la Section 31.2.2, « Initialisation de la carte » :

    1. Déterminez le type de carte.

    2. Appliquez la tension adéquate.

    3. Affectez des plages d'E/S et de mémoire ainsi que des lignes IRQ à la carte.

    4. Déclenchez l'initialisation de la carte ou du périphérique en connectant le pilote de carte approprié.

    5. Pour certaines cartes, le CIS (Card Information Structure) doit être téléchargé.

  3. L'interface est enfin configurée et prête à être utilisée. Pour plus de détails, reportez-vous à la Section 31.2.3, « Configuration de l'interface ».

31.2.1. Initialisation du pont

La plupart des ponts PCMCIA sont des périphériques PCI et sont traités comme tels. En résumé, l'initialisation du pont se pose en ces termes :

  1. L'enfichage à chaud crée un événement PCI.

  2. udev appelle la commande /sbin/hwup pour charger le pilote. La commande /sbin/hwup vérifie dans le fichier /etc/sysconfig/hardware la présence d'une configuration de périphérique. En cas de configuration appropriée, cette configuration est utilisée. Dans le cas contraire, la commande /sbin/hwup appelle la commande modprobe avec la chaîne modalias fournie par le kernel pour charger le module du pilote.

  3. De nouveaux événements d'enfichage à chaud sont envoyés (un par socket PCMCIA).

  4. Les étapes suivantes sont ignorées si seules les cartes CardBus sont utilisées :

    1. Les événements pcmcia_socket déclenchent udev pour appeler la commande /sbin/hwup et charger le module du kernel pcmcia.

    2. Toutes les plages d'E/S et de mémoire spécifiées dans /etc/pcmcia/config.opts sont ajoutées au socket.

    3. Les services de la carte dans le kernel vérifient ces plages. Si les plages de mémoire dans /etc/pcmcia/config.opts sont erronées, cette étape risque de bloquer votre machine. Pour plus d'informations sur le débogage et la résolution de problème, reportez-vous à la Section 31.3.1, « Arrêts de machines sur PCMCIA ».

Une fois ces étapes exécutées, le pont est totalement initialisé. La carte elle-même est ensuite initialisée comme décrit dans la section suivante.

31.2.2. Initialisation de la carte

Les événements provoqués par la connexion d'une carte PCMCIA peuvent se résumer de la manière suivante :

  1. Un événement d'enfichage à chaud se produit. Pour les cartes PC, il s'agit d'un événement pcmcia. Pour les cartes CardBus, il s'agit d'un événement pci.

  2. Pour tout événement, udev appelle la commande /sbin/hwup pour charger un module de pilote. Le nom du module est spécifié dans un fichier hwcfg* sous /etc/sysconfig/hardware ou via la commande modprobe modalias.

  3. Si nécessaire, l'initialisation du périphérique déclenche l'événement d'enfichage à chaud d'un microprogramme. Cela permet de rechercher le microprogramme et de le charger.

  4. Le pilote du périphérique enregistre les interfaces.

Une fois ces étapes exécutées, le système configure l'interface comme décrit dans la section suivante.

Si votre carte est une carte PC, vous aurez peut-être besoin de certains des paramètres suivants dans /etc/sysconfig/pcmcia pour une prise en charge totale et un fonctionnement correct :

PCMCIA_LOAD_CIS

Le microprogramme d'une carte PC est désigné par CIS (Card Information Structure). Il fournit des informations supplémentaires sur l'implémentation de la carte. La commande hwup vérifie l'intégrité du CIS intégré de la carte et tente de charger un autre CIS à partir du disque si le CIS de la carte s'avère être défectueux. Le paramètre par défaut est oui. Pour désactiver le chargement CIS du disque, définissez cette variable sur non.

PCMCIA_ALLOW_FUNC_MATCH

Les pilotes du périphérique Linux contiennent une table d'ID de périphérique qui indique aux pilotes les périphériques à traiter. Ainsi, seuls les périphériques dont les ID sont connus du kernel sont pris en charge. Pour prendre en charge ces cartes dont l'ID n'est pas répertorié, vous pouvez utiliser la correspondance de fonctions. Cela signifie que le pilote n'est pas sélectionné par l'ID, mais par la fonction de la carte (comme une carte réseau), et qu'il est responsable de toute carte PC insérée avec cette fonction (comme les cartes réseau). Le paramètre par défaut est oui. Pour désactiver la correspondance de fonctions, définissez cette variable sur non.

PCMCIA_COLDPLUG_REINSERT

Les cartes insérées avant le démarrage ne sont parfois pas détectées. Pour éviter cette situation, éjectez, puis insérez doucement la carte en définissant PCMCIA_COLDPLUG_REINSERT sur yes. Le paramètre par défaut est no.

31.2.3. Configuration de l'interface

Selon le type de carte, différentes interfaces sont enregistrées une fois l'initialisation terminée. L'enregistrement de l'interface est géré par l'enfichage à chaud udev. Pour plus d'informations sur udev et hotplug, reportez-vous au Chapitre 12, Gestion dynamique du périphérique  du kernel avec udev.