31.2. PCMCIA im Detail

Folgene Abschnitte beschreiben, was auf Ihrem Linux-System geschieht, wenn ein PCMCIA-Gerät an Ihren Computer angeschlossen wird. Die Komponenten interagieren untereinander und es müssen viele Anforderungen erfüllt werden, damit das PCMCIA-Gerät unterstützt wird.

Im Folgenden wird der PCMCIA-Initialisierungsvorgang unter Linux grob dargestellt:

  1. Die PCMCIA-Bridge (oder Socket) muss ordnungsgemäß wie in Abschnitt 31.2.1, „Bridge-Initialisierung“ beschrieben eingerichtet werden. Voraussetzungen:

    • Passender Treiber für die Bridge

    • Zusätzliche I/O- und Speicherbereiche für PC-Karten

  2. Nachdem die Brigde ordnungsgemäß eingerichtet wurde, erkennt der Bridge-Treiber, dass eine Karte vorhanden ist, und löst deren Initialisierung gemäß der Beschreibung in Abschnitt 31.2.2, „Initialisierung der Karte“ aus:

    1. Legen Sie den Kartentyp fest.

    2. Geben Sie die richtige Spannung an.

    3. Weisen Sie der Karte E/A- und Speicherbereiche und IRQ-Leitungen zu.

    4. Lösen Sie die Karten- oder Geräteinitialisierung aus, indem Sie eine Bindung mit dem passenden Kartentreiber herstellen.

    5. Bei einigen Karten muss die Card Information Structure (CIS) hochgeladen werden.

  3. Schließlich wird die Schnittstelle an sich eingerichtet und kann verwendet werden. Weitere Informationen hierzu finden Sie in Abschnitt 31.2.3, „Einrichtung der Schnittstelle“.

31.2.1. Bridge-Initialisierung

Die meisten PCMCIA-Bridges sind PCI-Geräte und werden als solche behandelt. Der Bridge-Initialisierungsvorgang kann wie folgt zusammengefasst werden:

  1. Hotplug erstellt ein PCI-Ereignis.

  2. udev ruft /sbin/hwup auf, um den Treiber zu laden. /sbin/hwup überprüft /etc/sysconfig/hardware hinsichtlich einer vorhandenen Gerätekonfiguration. Falls eine passende Konfiguration gefunden wird, wird diese Konfiguration verwendet. Anderenfalls ruft /sbin/hwup modprobe mit der vom Kernel bereitgestellten modalias-Zeichenkette auf, um das Treibermodul zu laden.

  3. Neue hotplug-Ereignisse werden gesendet (eines pro PCMCIA-Socket)

  4. Die folgenden Schritte werden ausgelassen, wenn nur CardBus-Karten verwendet werden:

    1. Die pcmcia_socket-Ereignisse lösen udev aus, um /sbin/hwup aufzurufen und das pcmcia-Kernelmodul zu laden.

    2. Alle E/A- und Speicherbereiche, die in /etc/pcmcia/config.opts angegeben sind, werden dem Socket hinzugefügt.

    3. Die Card Services im Kernel überprüfen diese Bereiche. Falls die Speicherbereiche in /etc/pcmcia/config.opts falsch sind, kann dieser Schritt Ihren Computer zum Absturz bringen. In Abschnitt 31.3.1, „Computer stürzt mit PCMCIA ab“ finden Sie Informationen zur Fehlersuche und Behebung dieses Problems.

Nachdem diese Schritte erfolgreich abgeschlossen wurde, ist die Bridge vollständig initialisiert. Anschließend wird die Karte selbst, wie im folgenden Abschnitt beschrieben, initialisiert.

31.2.2. Initialisierung der Karte

Die Ereignisse, die durch das Einsetzen einer PCMCIA-Karte verursacht werden, können wie folgt zusammengefasst werden:

  1. Ein hotplug-Ereignis tritt ein. Bei PC-Karten ist dies ein pcmcia-Ereignis. Bei CardBus-Karten ist dies ein pci-Ereignis.

  2. Für sämtliche Ereignisse ruft udev /sbin/hwup auf, um ein Treibermodul zu laden. Der Modulname wird entweder in einer hwcfg*-Datei unter /etc/sysconfig/hardware oder über den Befehl modprobe modalias angegeben.

  3. Gegebenenfalls löst die Geräteinitialisierung ein Firmware-Hotplug-Ereignis aus. Dieses sucht nach Firmware und lädt diese.

  4. Der Gerätetreiber registriert die Schnittstellen.

Nachdem diese Schritte abgeschlossen wurden, setzt das System die Einrichtung der Schnittstelle gemäß der Beschreibung im nächsten Abschnitt fort.

Falls es sich bei Ihrer Karte um eine PC-Karte handelt, benötigen Sie möglicherweise die folgenden Parameter in /etc/sysconfig/pcmcia, damit die Karte vollständig unterstützt wird und fehlerfrei arbeitet:

PCMCIA_LOAD_CIS

Die Firmware einer PC-Karte wird als CIS (Card Information Structure) bezeichnet. Sie enthält zusätzliche Implementierungsdetails zur Karte. hwup überprüft die Integrität der integrierten CIS der Karte und versucht, eine andere CIS von der Festplatte zu laden, falls sich herausstellt, dass die CIS der Karte beschädigt ist. Die Standardeinstellung ist yes. Um zu deaktivieren, dass die CIS von der Festplatte geladen wird, legen Sie für diese Variable no fest.

PCMCIA_ALLOW_FUNC_MATCH

Linux-Gerätetreiber enthalten eine Geräte-ID-Tabelle, die angibt, welche Geräte die Treiber behandeln sollen. Das bedeutet, dass nur die Geräte, deren IDs dem Kernel bekannt sind, unterstützt werden. Um die Karten zu unterstützen, deren ID nicht aufgelistet ist, können Sie Function Matching verwenden. Demzufolge wird der Treiber nicht anhand der ID, sondern anhand der Funktion der Karte ausgewählt (z. B. eine Netzwerkkarte) und wäre für sämtliche eingelegte PC-Karten zuständig, die diese Funktion haben (z. B. Netzwerkkarten). Die Standardeinstellung ist yes. Um den Funktionsabgleich zu deaktivieren, legen Sie für diese Variable no fest.

PCMCIA_COLDPLUG_REINSERT

Karten, die vor dem Booten eingelegt werden, werden manchmal nicht erkannt. Um dies zu verhindern, geben Sie die Karte aus und legen Sie sie wieder ein per Soft Eject und Soft Insert), indem Sie PCMCIA_COLDPLUG_REINSERT auf yes setzen. Die Standardeinstellung ist no.

31.2.3. Einrichtung der Schnittstelle

Je nach Kartentyp werden verschiedene Schnittstellen registriert, nachdem die Initialisierung erfolgreich abgeschlossen wurde. Die Registrierung der Schnittstelle erfolgt durch die hotplug-Funktion von udev. Genaue Informationen zu udev und hotplug erhalten Sie in Kapitel 12, Gerätemanagement über dynamischen Kernel mithilfe von udev.