Zurück Weiter Inhalt

4. Gebrauch und Eigenschaften

4.1 Werkzeuge zur Überwachung der PCMCIA Geräte

Der cardmgr-Dämon piept normalerweise wenn eine neue Karte eingeführt wird. Der Piepton zeigt den Status der neuen Karte an. Zwei hohe Töne bedeuten, daß die Karte erkannt und konfiguriert wurde. Ein hoher und ein tiefer Ton zeigen an, dass die Karte erkannt aber nicht konfiguriert werden konnte. Lediglich ein tiefer Ton zeigt an, daß die neue Karte nicht erkannt wurde.

Wenn die Module korrekt geladen wurden, sollte das Kommando lsmod, ohne eingeführte Karten, folgende Ausgabe zeigen:

Module:        #pages:  Used by:
ds                 2
i82365             3
pcmcia_core        7    [ds i82365]

Alle PCMCIA Module und der cardmgr-Dämon senden Statusmeldungen an den syslog-Dämon. Diese Meldungen werden dann gewöhnlich in die Datei /var/log/messages oder /usr/adm/messages geschrieben. Diese Dateien sollten bei der Fehlersuche als erstes untersucht werden. Wenn ein Fehlerreport geschrieben wird sollte der Inhalt dieser Datei mitgeschickt werden. Wenn Probleme bestehen die Systemmeldungen zu finden, sollte die Datei /etc/syslogd.conf daraufhin untersucht werden, wie die verschiedenen Nachrichtenklassen behandelt werden.

Cardmgr zeichnet einige Informationen der aktuell genutzten Geräte für jeden Slot in /var/run/stab. Hier ist ein Beispiel für den Inhalt einer solchen Datei:

Socket 0: Adaptec APA-1460 SlimSCSI
0       scsi    aha152x_cs      0       sda     8       0
0       scsi    aha152x_cs      1       scd0    11      0
Socket 1: Serial or Modem Card
1       serial  serial_cs       0       ttyS1   5       65

Im ersten Feld steht der verwendet Slot, das zweite enthält die Geräteklasse, das dritte den Treibernamen, das vierte wird verwendet um die verschiedenen Geräte, die an den gleichen Treiber angeschlossen sind, durchzunumerieren, das fünfte Feld ist der Gerätename und die letzten beiden Felder enthalten die major und minor Gerätenummern (falls angebbar).

Das Kommando cardctl kann verwendet werden um den Status der Slots zu ermitteln oder zu sehen wie sie konfiguriert sind. Hier ist eine Beispielausgabe des cardctl config Kommandos:

Socket 0:
Socket 1:
  Vcc = 5.0, Vpp1 = 0.0, Vpp2 = 0.0
  Card type is memory and I/O
  IRQ 3 is dynamic shared, level mode, enabled
  Speaker output is enabled
  Function 0:
    Config register base = 0x0800
      Option = 0x63, status = 0x08
    I/O window 1: 0x0280 to 0x02bf, auto sized
    I/O window 2: 0x02f8 to 0x02ff, 8 bit
Wenn X läuft wird das Programm cardinfo in einer grafischen Anzeige den Status aller PCMCIA Slots anzeigen, ähnlich wie es cardctl config tut.

4.2 Überblick der PCMCIA Konfigurationsskripte

Jedes PCMCIA Gerät ist mit einer Klasse verknüpft, welche beschreibt, wie es konfiguriert und gehandhabt werden soll. Klassen sind mit Gerätetreibern verknüpft die in /etc/pcmcia/config beschrieben sind. Aktuell sind dort fünf Ein-/Ausgabe-Geräteklassen (Netzwerk, SCSI, CDROM, Festplatten und serielle Geräte) und drei Speicherklassen (FTL, memory und pcmem). Zu jeder Klasse existieren zwei Skripte in /etc/pcmcia/config: Ein Hauptkonfigurationsskript (z.B. /etc/pcmcia/scsi für SCSI-Geräte) und eine Optionsskript (z.B. /etc/pcmcia/scsi.opts). Das Hauptskript für ein Gerät wird aufgerufen um eine Karte zu konfigurieren, die gerade eingeschoben wird und um das Gerät herunterzufahren, wenn die Karte herausgenommen wird. Für Karten mit mehreren Geräten wird das Skript für jedes Gerät gestartet.

Das Konfigurationsskript entnimmt als erstes einige Informationen aus /var/run/stab. Jedes Skript bildet eine Geräteadresse welche eindeutig das Gerät beschreibt welches es konfiguriert und speichert sie in der ADDRESS Variable. Diese wird an das *.opts Skript weitergegeben. Dieses Skript soll dann die Informationen für die Konfiguration des Gerätes an dieser Adresse liefern. Bei einigen Geräten ist diese Adresse lediglich die Slotnummer, bei anderen enthält sie zusätzliche Informationen, die hilfreich bei der Konfiguration sein können. Zum Beispiel enthalten die Geräteadressen von Netzwerkkarten die Hardware Ethernetadressen. Auf diese Weise kann das network.opts-Skript diese Karte von anderen Netzwerkkarten unterscheiden und somit zwischen verschiedenen Konfigurationen wählen.

Der erste Teil von allen Geräteadressen ist das aktuelle PCMCIA Schema. Dieser Parameter wird verwendet um verschiedene Sätze von Konfigurationen zu unterstützen, die alle auf einem einzelnen externen anwenderspezifischen Variable basieren. Eine Anwendung der Schemata könnte es sein ein Schema für daheim und eines für die Arbeit zu haben, welche verschiedene Parameter für die Netzwerkkonfiguration haben. Das aktuelle Schema wird mit dem Kommando cardctl ausgewählt. Die Voreinstellung, wenn kein Schema gesetzt wird, ist default.

Als eine generelle Regel für die Konfiguration von Linux für Notebooks ist, daß alle PCMCIA Geräte nur über die PCMCIA Geräte-Skripte konfiguriert werden. Man sollte nicht versuchen PCMCIA Geräte wie permanent angeschlossene Geräte zu konfigurieren.

4.3 PCMCIA Netzwerkkarten

Ethernetkarten unter Linux haben normalerweise Namen wie eth0, eth1 und so weiter. Token-Ring Karten werden ähnlich gehandhabt, allerdings haben sie Namen wie tr0, tr1 und so weiter. Das Kommando ifconfig wird verwendet um den Status von Netzwerkkarten zu erfragen oder zu ändern. Eine Besonderheit unter Linux ist, daß diese Netzwerkkarten keine entsprechenden Gerätedateien in dem Verzeichnis /dev besitzen. Daher sollte man sich nicht wundern, wenn man dort auch keine findet.

Wenn eine PCMCIA Ethernetkarte entdeckt wird, so bekommt sie den ersten verfügbaren Schnittstellennamen, dieser wird wahrscheinlich eth0 sein. Cardmgr wird das Skript /etc/pcmcia/network starten, um die Karte zu konfigurieren.

Es ist nicht ratsam diese Konfiguration der PCMCIA Ethernetkarte in dem Startskript des Linux-Systems einzutragen, da es passieren kann, daß die Karte noch nicht vorhanden ist wenn Linux hochgefahren wird. Wenn das System eine automatische Prozedur zur Konfugration des Netzwerks hat, so sollte hier angegeben werden, daß keine Netzwerkkarte vorhanden ist. Stattdessen sollte die Datei /etc/pcmcia/network.opts den Bedürfnissen des Netzwerks angepaßt werden. Die Skripte network und network.opts werden nur ausgeführt, wenn eine Ethernetkarte anwesend ist.

Die Geräteadresse die network.opts übergeben wird besteht aus vier durch Kommata getrennte Felder: Schema, Slotnummer, Geräteinstanz und die Hardware Ethernetaddresse der Karte. Die Geräteinstanz wird verwendet um Geräte durchzunumeriern, für Karten, die mehrere Netzwerkanschlüsse besitzen. Sie wird daher meistens 0 sein. Wenn mehrere Netzwerkkarten für verschiedene Verwendungen benutzt werden sollen, so besteht eine Möglichkeit darin, die Karten über ihre verschiedenen Slotnummer zu konfigurieren wie z.B. hier:

case "$ADDRESS" in
*,0,*,*)
    # Definition der Netzwerkkarte in Slot 0
    ;;
*,1,*,*)
    # Definition der Netzwerkkarte in Slot 0
    ;;
esac

Alternativ können diese Karten über ihre Hardware-Adressen konfiguriert werden:

case "$ADDRESS" in
*,*,*,00:80:C8:76:00:B1)
    # Definition einer D-Link Karte
    ;;
*,*,*,08:00:5A:44:80:01)
    # Definition einer IBM Karte
esac

Um automatisch NFS-Dateisysteme einzubinden oder zu entfernen, ist es sinnvoll, alle diese Dateisysteme als erstes in der Datei /etc/fstab eingezutragen. Allerdings sollte im Optionsfeld der Eintrag noauto stehen. In der Datei network.opts müssen dann alle Dateiverzeichnisse mit ihrem Zielverzeichnis in der Variablen MOUNTS aufgelistet werden. Es ist besonders wichtig entweder cardctl oder cardinfo zu verwenden um eine Netzwerkverbindung zu unterbrechen wenn NFS-Dateisysteme auf diese Weise verwendet werden. Es ist nicht möglich ein NFS-Dateisystem sauber abzubauen wenn lediglich die Karte ohne Warnung herausgenommen wird!

Zusätzlich zur gewöhnlichen Netzwerkkonfiguration kann das Skript network.opts extra Funktionen ausführen, wenn die Netzwerkkarte schon konfiguriert worden ist oder bevor die Netzwerkverbindung abgebaut werden kann. Wenn network.opts eine Shellfunktion start_fn definiert, so wird diese nach der Konfiguration der Karte aufgerufen. Dabei wird der Schnittstellenname als einziges Argument übergeben. Analog wird die Funktion stop_fn, wenn sie definiert ist, aufgerufen wenn bevor die Netzwerkkarte heruntergefahren wird.

Auswahl des Transceivers

Der Transceiver-Typ kann durch Verwendung der Variablen IF_PORT bestimmt werden. Dies kann entweder ein numerischer Wert sein, wie er in früheren PCMCIA Versionen verwendet wurde oder ein Schlüsselwort das den Transceiver-Typ bestimmt. Das voreingestellte Verhalten aller Netzwerktreiber ist es, diesen Typ automatisch zu erkennen wenn dies möglich ist, im anderen Fall 10baseT zu verwenden. Das Kommando ifport kann verwendet werden um den aktuellen Typ zu kontrollieren oder zu ändern. Zum Beispiel:

> ifport eth0 10base2
>
> ifport eth0 
eth0    2 (10base2)

Aktuelle Versionen des 3c589 Treibers versuchen die Netzwerkverbindung automatisch zu entdecken. Allerdings scheint es so, als ob dies noch nicht einwandfrei funktioniert. Damit die automatische Erkennung läuft sollte das Netzwerkkabel an der Karte angeschlossen sein, wenn diese konfiguriert wird. Alternativ kann man nach Anschluß des Netzes den Treiber zwingen die Verbindung noch einmal zu überprüfen:

ifconfig eth0 down up

Anmerkungen zu speziellen Karten

Untersuchung von Problemen mit Netzwerkkarten

4.4 Serielle und Modem PCMCIA Geräte

Unter Linux wird auf serielle Geräte über die speziellen Dateien /dev/cua* und /dev/ttyS* zugegriffen. Die ttyS* Dateien werden für eingehende Verbindungen (z.B. angeschlossene Terminal) und die Dateien cua* für ausgehende Verbindungen (z.B. Modem) verwendet. Jeder physische Anschluß hat sowohl ein ttyS* und eine cua* Gerätedatei: Es hängt von einem selber ab welche man verwendet. Die Konfiguration eines seriellen Gerätes kann mit dem Kommando setserial untersucht und verändert werden.

Wird eine serielle oder Modem PCMCIA Karte entdeckt, so erhält sie die erste freie Geräteadresse. Dies wird gewöhnlich, abhängig von der Zahl der eingebauten seriellen Geräte, /dev/ttyS1 (cua1) oder /dev/ttyS2 (cua2) sein. Die ttyS* Geräte sind diejenigen, die in /var/run/stab angegeben sind. Das Standardskript für serielle Geräte, /etc/pcmcia/serial.opts, wird das entsprechende cua* Gerät auf die Datei /dev/modem linken.

Man sollte nicht versuchen das Systemstartskript für serielle Geräte zur Konfiguration von PCMCIA Modems zu verwenden. Dieses Skript sollte nur zur Konfiguration nicht-entfernbarer Geräte benutzt werden. Für eine spezielle Konfiguration eines Mdems dient die Datei /etc/pcmcia/serial.opts. Desgleichen sollte nicht das Kommando setserial verwendet werden um die I/O-Adresse oder der Interrupt eines seriellen PCMCIA Gerätes zu bestimmen. Dies würde den seriellen Treiber anweisen das Gerät an einer anderen Stelle zu suchen. Dies würde auch nichts an der aktuellen Einstellung der PCMCIA Karte ändern. Das serielle Konfigurationsskript erlaubt einem sowohl setserial-Optionen anzugeben, als auch ob eine Zeile in der Datei /etc/inittab für diese Adresse einzufügen.

Die Geräteadresse, die dem Skript serial.opts übergeben wird, besteht aus drei durch Kommata getrennte Felder: Das erste enthält das Schema, das zweite die Slotnummer und das dritte die Geräteinstanz. Letztere kann für Karten, die mehrere serielle Anschlüsse unterstützen, verschiedene Werte annehmen. Für Karten, die nur einen Anschluß haben ist dieser Wert immer 0. Wenn gewöhnlich mehrere PCMCIA Modemkarten verwendet werden können diese durch die Slotnummer unterschiedlich konfiguriert werden, wie z.B.:

case "$ADDRESS" in
*,0,*)
    # Optionen Modem in Slot 0
    LINK=/dev/modem0
    ;;
*,1,*)
    # Optionen Modem in Slot 1
    LINK=/dev/modem1
    ;;
esac

Wenn ein PCMCIA Modem bereits konfiguriert ist wenn Linux gestartet wird, kann es passieren, daß das Modem fälschlicher Weise als ein eingebautes identifiziert wird. Dies ist harmlos. Wenn der PCMCIA Treiber Kontrolle über das Modem nimmt, wird diesem eine andere Gerätedatei zugewiesen. Es ist daher gut entweder die Datei /var/run/stab zu durchforsten oder /dev/modem zu verwenden, anstatt zu erwarten, daß ein PCMCIA Modem stets der gleichen Gerätedatei zugeordnet wird.

Wenn der Kernel konfiguriert wurde die Grundtreiber für die seriellen Geräte als ein Modul zu laden, so muß die Datei /etc/pcmcia/config editiert werden, damit diese Module geladen werden. Editiere in diesem Fall den seriellen Geräteeintrag auf diese Weise:

device "serial_cs"
  class "serial" module "char/serial", "serial_cs"

Analyse von Problemen mit seriellen Geräten

4.5 PCMCIA SCSI Controller

Alle derzeit unterstützten PCMCIA Karten sind arbeitsgleiche Karten von folgenden ISA-Bus Karten: Qlogic, Adaptec 152x oder Future Domain TMC-16x0. Die PCMCIA Treiber werden durch Einbindung von einigem PCMCIA spezifischen Programmcode (in qlogic_cs.c, toaster_cs.c oder fdomain_cs.c) aus den normalen Linux SCSI Treibern gebildet.

Bei der Entdeckung neuer SCSI Controller werden die SCSI Treiber nach neuen Geräten suchen. Die Systemlog-Dateien sollten Auskunft darüber geben ob ein Gerät ordentlich erkannt wird. Neue SCSI Geräte werden den ersten verfügbaren Gerätetreibern zugewiesen. Die erste SCSI Festplatte wird /dev/sda, das erste Bandlaufwerk /dev/st0 und das erste CDROM Laufwerk wird /dev/scd0 sein.

Mit Kernel 1.3.* und späteren sind die PCMCIA Kerntreiber fähig vom Kernel aus herauszufinden, welche SCSI Geräte an der Karte angeschlossen sind. Diese werden in der Datei /var/run/stab aufgelistet und die SCSI Konfigurationsskript, /etc/pcmcia.scsi, wird für jedes angeschlossene Gerät aufgerufen und zwar entweder um das Gerät zu konfigurieren oder um es herunterzufahren. Das Standardskript unternimmt nichts um SCSI Geräte zu konfigurieren, wird aber verwendete Dateisysteme ordentlich abbauen wenn eine Karte entfernt wird.

Mit Kernel 1.2.* können die PCMCIA Treiber nich automatisch erkennen, welches Gerät an welcher Karte angeschlossen ist. Wenn man stattdessen eine normale SCSI Gerätekonfiguration hat, so kann man diese in der Datei /etc/pcmcia/scsi.opts auflisten. Zum Beispiel, wenn man normalerweise nur eine Festplatte und ein CDROM Laufwerk verwendet, würde man folgendes verwenden:

# Kernel 1.2.*: Liste der angeschlossenen Komponenten
SCSI_DEVICE="sda scd0"

Die Geräteadressen die dem Skript scsi.opts übergeben werden sind kompliziert, da eine große Zahl verschiedenartiger Geräte an einen SCSI Controller angeschlossen werden können. Die Adressen bestehen entweder aus sechs oder sieben durch Kommata getrennte Felder: Das aktuelle Schema, den Gerätetyp, die Slotnummer, den SCSI-Kanal, ID, die logische Einheitennummer und eventuell die Partitionsnummer. Der Gerätetyp wird sd für Festplatten, st für Bandlaufwerke, sr für CDROM Laufwerke und sg für generische SCSI Geräte sein. Bei den meisten Einstellungen wird der SCSI Kanal und die Einheitennummer 0 sein. Für Festplatten mit verschiedenen Partitionen wird scsi.opts erst für das gesamte Gerät mit einer fünf Felder enthaltenen Adresse aufgerufen. Das Skript sollte dann die Variable PARTS als eine Liste anlegen, die die Partitionen enthält. Danach wird scsi.opts mit einer sieben Felder enthaltenen Adresse für jede Partition aufgerufen. Hier ist zum Beispiel ein Skript zur Konfiguration einer Festplatte an SCSI ID 3 mit zwei Partitionen und einem CDROM Laufwerk an SCSI ID 6:

case "$ADDRESS" in
*,sd,*,0,3,0)
    # Dieses Festplatte hat zwei Partitionen
    PARTS="1 2"
    ;;
*,sd,*,0,3,0,1)
    # Optionen Partition 1:
    # aktualisiere /etc/fstab und mounte ein ext2 fs auf /usr1
    DO_FSTAB="y" ; DO_FSCK="y" ; DO_MOUNT="y"
    FSTYPE="ext2"
    OPTS=""
    MOUNTPT="/usr1"
    ;;
*,sd,*,0,3,0,2)
    # Optionen Partition 2:
    # aktualisiere /etc/fstab und mounte ein MS-DOS fs auf /usr2
    DO_FSTAB="y" ; DO_FSCK="y" ; DO_MOUNT="y"
    FSTYPE="msdos"
    OPTS=""
    MOUNTPT="/usr2"
    ;;
*,sr,*,0,6,0)
    # Optionen CD-ROM an SCSI ID 6
    PARTS=""
    DO_FSTAB="y" ; DO_FSCK="n" ; DO_MOUNT="y"
    FSTYPE="iso9660"
    OPTS="ro"
    MOUNTPT="/cdrom"
    ;;
esac

Wenn der Kernel keinen Grundtreiber für besondere SCSI Geräte hat (Festplatte, Bandlaufwerk, etc.), dann wird das Gerät nicht vom PCMCIA Treiber konfiguriert. Als ein Nebeneffekt wird der Gerätename in var/run/stab etwas sein wie sd\#nnnn sein, wobei nnnn eine vierstellige Hexadezimalzahl ist. Dies passiert, wenn cardmgr nicht in der Lage ist die SCSI ID Nummer in einen entsprechenden Linux Gerätenamen zu übersetzen.

Es ist möglich die SCSI Grundtreiber für den Kernel zu modularisieren, so daß diese nur geladen werden, wenn ein PCMCIA SCSI Controller entdeckt wird. Um dies zu erreichen, muß die Datei /etc/pcmcia/config editiert werden, damit cardmgr weiß welche zusätzlichen Module geladen werden müssen um den Controller zu konfigurieren. Zum Beispiel:

device "aha152x_cs"
  class "scsi" module "scsi/scsi_mod", "scsi/sd_mod", "aha152x_cs"

würde das SCSI Kernmodul und die Grundmodule der Festplatten vor dem regulären PCMCIA Treiber laden. Das PCMCIA Konfigurationsskript wird nicht automatisch modularisierte SCSI Module entdecken, so daß die SCSI Unterstützung manuell in die Konfigurationsskripte eingetragen werden muß.

SCSI Geräte sollten immer als erstes, vor dem Notebook oder dem Einführen der Karte, eingeschaltet werden, so daß der SCSI-Bus ordentlich terminiert ist, wenn der Controller konfiguriert wird. Man sollte auch äußerst vorsichtig sein bevor man eine SCSI Controllerkarte entfernt. In diesem Fall sollte man sicher sein, daß alle angeschlossenen SCSI Geräte ordnungsgemäß heruntergefahren wurden. Der sicherste Weg dies zu erreichen ist es entweder cardctl oder cardinfo zu verwenden und eine Kartenentfernung anzufordern, bevor man die Karte physisch entfernt. Bis jetzt müssen alle SCSI Geräte eingeschaltet sein bevor der SCSI Controller eingeführt wird und sollten solange angeschlossen bleiben, bis der Controller wieder entfernt wird oder das Notebook ausgeschaltet wird.

Es besteht die Möglichkeit von Komplikationen bei Karten die bei normalen ISA-Bus Controllern nicht bestehen. Der SCSI Bus enthät ein termination power Signal welches für den ordentlichen Betrieb von passiven SCSI Terminatoren notwendig ist. PCMCIA SCSI Controller unterstützen dieses Signal nicht. Wenn ein solches benötigt wird, muß ein externes Gerät dieses liefern. Einige externe SCSI Geräte können so konfiguriert werden, daß sie dieses Signal liefern. Andere, wie z.B. das Zip Laufwerk oder das Syquest EZ-Laufwerk verwenden aktive Terminierungen und benötigen diese daher nicht. In einigen Fällen kann es notwendig sein spezielle Terminierungseinheiten wie das APS SCSI Sentry 2 zu verwenden, die ein externes Signal haben. Wenn die SCSI Geräte zu einer Kette konfiguriert werden, sollte man sicher sein, ob ein Gerät dieses Signal benögt oder liefern kann.

Der Adaptec APA-460 SlimSCSI Controller wird nicht unterstützt. Diese Karte wurde ursprünglich unter dem Namen Trantor verkauft. Nach der Übernahme von Trantec durch Adaptec wurde dieser Controller mit einer Adaptec Bezeichnung verkauft. Der APA-460 ist mit keinem existierenden Linuxtreiber kompatibel. David ist sich nicht sicher, wie schwer es sein wird einen Treiber für diesen Controller zu schreiben. Er vermutet, daß niemand die dazu notwendigen technischen Informationen von Adaptec erhalten wird.

Die (nichtunterstützte) Trantor SlimSCSI kann auf folgende Weise erkannt werden:

Trantor / Adaptec APA-460 SlimSCSI
FCC ID: IE8T460
Shipped with SCSIworks! driver software

Die (nichtunterstützte) Adaptec SlimSCSI kann auf folgende Weise erkannt werden:

Adaptec APA-1460 SlimSCSI
FCC ID: FGT1460
P/N: 900100
Shipped with EZ-SCSI driver software

Untersuchung von Problemen mit SCSI Controllern

4.6 PCMCIA Speicherkarten

Das Standardstartskript für Speicherkarten erzeugt Block- und Zeichenorientierte Geräte für den Zugriff auf alle Bereiche der Speicherkarte. Es gibt zwei Treiber für Speicherkarten. Einen älteren Treiber pcmem_cs, der gut mit einfachen statischem RAM Karten zusammenarbeitet, und einen neueren Treiber memory_cs, der meistens für den direkten Zugriff auf Blitzspeicherkarten (flash) verwendet wird. Für eine genauere Beschreibung der Gerätenamen sollte man die man pages befragen. Beide, sowohl Block- als auch Zeichenorientierte Gerätedateien, werden erzeugt. Die Blockgräte werden für einen Festplattenähnlichen Zugriff verwendet (Erzeugung und Anbindung von Dateisystemen, etc.). Die Zeichorientierten Gerätedateien werden für rohen, nichtgepufferten Lese- und Schreiboperationen an beliebigen Stellen verwendet.

Bei den FTL und dem neuen Speichertreibern besteht die Geräteadresse, die an die Skripte ftl.opts und memory.opts weitergegeben werden, aus zwei Feldern: der Slotnummer und der Partitionsnummer. Gewöhnliche Speicherpartitionen werden vor Attributspeicherpartitionen nummeriert. Allgemein ist die interessanteste Partition die mit der Nummer 0 (die Hauptpartition, wo die Daten gespeichert werden). Hier ist ein Beispiel, eines Skriptes, das automatisch, abhängig vom verwendeten Slot eine Blitzspeicherkarte, in das System integriert:

case "$ADDRESS" in
*,0,0)
    # Integriere Dateisystem aber aktualisiere nicht /etc/fstab
    DO_FSTAB="n" ; DO_FSCK="y" ; DO_MOUNT="y"
    FSTYPE="ext2" ; OPTS=""
    MOUNTPT="/ftl0"
    ;;
*,1,0)
    # Integriere Dateisystem aber aktualisiere nicht /etc/fstab
    DO_FSTAB="n" ; DO_FSCK="y" ; DO_MOUNT="y"
    FSTYPE="ext2" ; OPTS=""
    MOUNTPT="/ftl1"
    ;;
esac

Einfache Speicherkarten

Einige ältere Speicherkarten und die meisten einfachen statischen RAM Karten besitzen keine Card Information Structure (CIS), welche das Schema ist, das PCMCIA Karten verwenden um sich selbst zu identifizieren. Normalerweise wird cardmgr annehmen, daß Karten die keine CIS aufweisen einfache Speicherkarten sind und wird den pcmem_cs Treiber laden. Auf diese Weise erhält man den allgemeinen Nebeneffekt, daß andere unerkannte Karten fälschlicherweise als Speicherkarten erkannt werden.

Der pcmem_cs Treiber erzeugt drei logische Gerätedateien mit einer Karte: pcmem?a ist eine Zeichengerätedatei zum Zugriff auf Attributspeicher, pcmem?b ist eine Blockgerätedatei und pcmem?c ist eine Zeichengerätedatei. Da alle PCMCIA Karten eine Speicherschnittstelle neben allen anderen Funktionen benötigen, kann der pcmem_cs Treiber mit allen Karten verwendet werden um direkten Zugriff auf den Attribut und allgemeinen Speicherraum zu erhalten.

Der pcmem_cs Treiber verwendet ein Verfahren um die Kapazität einer Karte zu raten. Dieses Verfahren schlägt bei schreibgeschützten Karten fehl und kann in einigen anderen Fällen zu Fehlern führen. Wenn eine Karte falsch erkannt wurde, sollte ihre Größe explizit angegeben werden, wenn man Kommandos wie dd oder mkfs verwendet.

Verwendung von Blitzspeicherkarten

Um eine Blitzspeicherkarte wie ein gewöhnliches festplattenähnliches Blockgerät zu verwenden muß als erstes eine flash translation layer Partition auf diesem Gerät mit dem Kommando ftl_format erstellt werden:

ftl_format -i /dev/mem0c0c

Man beachte, daß dieses Kommando auf die Karte über die rohe Speicherkartenschnittstelle zugreift. Einmal formatiert kann die Karte wie ein normales Blockgerät über den ftl_cs Treiber verwendet werden:

mke2fs /dev/ftl0
mount -t ext2 /dev/ftl0 /mnt

Es gibt zwei wesentliche Formate für Blitzspeicherkarten: Die flash translation layer und das Microsoft Flash File System. Das FTL Format is generell mehr flexibel weil es erlaubt, irgendein gewöhnliches, anspruchsvolles Dateisystem (ext2, msdos, etc.) auf dieser Karte zu verwenden genauso als ob es eine normale Festplatte wäre. Das FFS ist ein komplett neuer Typ von Dateisystem. Linux kann zur Zeit keine Karten handhaben, die mit diesem Dateityp formatiert sind.

4.7 Treiber für PCMCIA ATA/IDE Karten

Die Unterstützung von ATA/IDE Treibern verlangt einen Kernel der Verison 1.3.72 oder höher. Der PCMCIA spezifische Teil des Treibers ist fixed_cs. Man sollte sicherstellen, daß cardctl oder cardinfo verwendet werden um ATA/IDE Karten herunterzufahren bevor sie entnommen werden.

Die Geräteadressen, die an fixed.opts weitergeleitet werden, bestehen aus drei oder vier Feldern: das aktuelle Schema, die Slotnummer, die Seriennummer des Laufwerks und ebentuell die Partitionsnummer. So wie bei SCSI Geräten wird fixed.opts zuerst aufgerufen und danach die eigentlichen Geräte. Wenn fixed.opts eine Liste von Partitionen in der Variablen PARTS enthält, wird das Skript noch einmal für jede Partition aufgerufen.

Hier ist eine Beispieldatei fixed.opts, die die erste Partition einer ATA/IDE Karte auf /mnt abbildet:

case "$ADDRESS" in
*,*,*)
    PARTS="1"
    ;;
*,*,*,1)
    DO_FSTAB="y" ; DO_FSCK="y" ; DO_MOUNT="y"
    FSTYPE="msdos"
    OPTS=""
    MOUNTPT="/mnt"
    ;;
esac

Beachte, daß die voreingestellte Datei fixed.opts diese Zeilen in auskommentierter Form enthält. Wenn es gewünscht wird, können verschiedene Konfigurationen basierend auf den Seriennummern der Karten verwendet werden. Um die Seriennummer einer Karte herauszufinden kann das Kommando ide_info verwendet werden. Danach kann ein Teil von fixed.info wie folgt aussehen:

case "$ADDRESS" in
*,*,Z4J60542)
    # Dies ist eine DOS Platte
    PARTS="1"
    ;;
*,*,Z4J60542,1)
    DO_FSTAB="y" ; DO_FSCK="y" ; DO_MOUNT="y"
    FSTYPE="msdos"
    OPTS=""
    MOUNTPT="/mnt"
    ;;
esac

4.8 Multifunktionskarten

Beginnend mit dem Linux-Kernel 1.3.73 kann ein einzelner Interrupt mit mehreren verschiedenen Treibern, wie z.B. dem seriellen Treiber und einem Ethernettreiber, geteilt werden. Wenn eine Multifunktionskarte unter einem neueren Kernel verwendet wird, können alle Funktionen ohne ein- und ausladen von Treibern verwendet werden.

Simultaner Gebrauch von zwei Kartenfunktionen ist trickreich und verschiedene Hardwarehersteller haben das Teilen von Interrupts auf ihre eigene nicht kompatiblen Weise verwirklicht. Die Treiber für einige Karten (Ositech Jack of Diamonds , 3Com 3c562, Linksys) unterstützen den gleichzeitigen Zugriff ordentlich, während andere (besonders Megahertz) dies nicht tun.

Frühere Kernel Versionen unterstützen das Teilen von Interrupts nicht, so daß es für PCMCIA Treiber nicht möglich ist gleichzeitig auf eine Ethernetkarte und ein Modem zuzugreifen. Die Treiber für das Ethernet und die serielle Schnittstelle werden automatisch geladen. Wie dem auch sei, der Treiber für das Ethernet besitzt per Voreinstellung den Interrupt der Karte. Um das Modem zu verwenden, muß der Ethernettreiber ausgeladen werden und der serielle muß neu konfiguriert werden wie z.B. hier:

ifconfig eth0 down
rmmod 3c589_cs
setserial /dev/modem autoconfig auto_irq
setserial /dev/modem

Das zweite setserial Kommando soll vergleichen, daß das der Treiber für das Modem jetzt den Interrupt verwendet, der vorher von dem Ethernettreiber verwendet worden ist.

4.9 Wann ist es sicher eine PCMCIA Karte einzuführen oder zuentfernen?

Theoretisch kann eine PCMCIA Karte jederzeit eingeführt oder entfernt werden. Es ist jedoch eine gute Idee eine Karte die gerade von einem Programm in Gebrauch ist nicht zu entfernen. Kernel die älter sind als Version 1.1.77 bleiben oft hängen, wenn eine serielle bzw. Modemkarte entfernt wird. Doch dies sollte mittlerweile behoben sein.

4.10 Card Services und Advanced Power Management

Card Services kann mit Unterstützung von APM übersetzt werden, wenn das Paket auf dem System installiert wurde. APM ist Bestandteil von Kernel 1.3.46 und neuer. Es wird derzeit von Rick Faith (faith@cs.unc.edu) betreut. APM Werkzeuge können via ftp von ftp.cs.unc.edu:/pub/users/faith/linux erhalten werden. Die PCMCIA Module werden automatisch für APM konfiguriert, falls eine kompatible Version auf dem System erkannt wird.

Ohne auf APM zurückzugreifen kann der Befehl cardctl suspend vor dem Anhalten des Notebooks und der Befehl cardctl resume nach dem erneuten Anfahren des Notebooks verwendet werden um die PCMCIA Karten herunter- und wieder hochzufahren. Dies arbeitet nicht mit einem PCMCIA Modem zusammen, daß in Betrieb ist, da der serielle Treiber nicht in der Lage ist die Arbeitsparameter des Modems zu sichern und wiedereinzurichten.

APM scheint auf einigen System instabil zu sein. Wenn solche Beobachtungen im Zusammenhang mit APM und PCMCIA gemacht werden, sollte versucht werden den Fehler auf eines dieser beiden Pakete einzuschränken bevor ein Fehlerreport erstellt wird.

Einige Treiber, ganz besonders PCMCIA SCSI Treiber, können aus einem Anhalte- und Wiederanfahrzyklus nicht zurückkehren. Wenn eine PCMCIA SCSI Karte verwendet wird sollte daher das Kommando cardctl eject vor einem Anhalten des Systems ausgeführt werden.

4.11 Wie wird eine PCMCIA Karte abgeschaltet ohne sie zu entnehmen?

Dazu kann entweder das Kommando cardctl oder cardinfo verwendet werden. cardctl suspend \# wird einen Slot anhalten und herunterfahren. Das entsprechende resume Kommando wird die Karte wieder in den ursprünglichen Zustand zurücksetzen.

4.12 Wie wird ein PCMCIA Treiber ausgeladen?

Um das vollständige PCMCIA Paket auszuladen muß das Skript rc.pcmcia folgendermaßen aufgerufen werden:

/etc/pcmcia/rc.pcmcia stop

Dieses Skript benötigt mehrere Sekunden um zu laufen, da jedem Treiber Zeit gelassen wird sanft herunterzufahren. Wenn ein PCMCIA Gerät gerade in Benutzung ist, wird das herunterfahren unvollständig sein und einige Module können im Kernel verbleiben. Um dies zu vermeiden sollten mit cardctl eject alle Slots heruntergefahren werden bevor rc.pcmcia aufgerufen wird. Der Endestatus des cardctl Kommandos zeigt an ob irgendein Slot nicht heruntergefahren werden konnte.


Zurück Weiter Inhalt