Inhalt

4. Gebrauch und Eigenschaften

4.1 Werkzeuge zur Überwachung der PCMCIA-Geräte

Der cardmgr-Daemon 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, daß 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-Daemon senden Statusmeldungen an den syslog-Daemon. 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 speichert einige Informationen der aktuell genutzten Karten in jedem Slot in der Datei /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 diese angebbar sind.

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, CD-ROM, Festplatten und serielle Geräte) und drei Speicherklassen (FTL, memory und pcmem) definiert. Zu jeder Klasse existieren zwei Skripte in /etc/pcmcia/config: Ein Hauptkonfigurationsskript, z.B. /etc/pcmcia/scsi für SCSI-Geräte, und ein 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 Variablen. 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 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 aller Geräteadressen ist das aktuelle PCMCIA-Schema. Dieser Parameter wird verwendet, um zwischen verschiedene Sätzen von Konfigurationen zu wählen. Eine Anwendung der Schemata könnte es sein, eine Konfiguration für daheim und eine für die Arbeit zu haben, welche verschiedene Parameter für die Netzwerkkonfiguration benötigen. Das aktuelle Schema wird mit dem Kommando cardctl ausgewählt. Die Voreinstellung, wenn kein Schema gesetzt wird, ist default.

Eine generelle Regel für die Konfiguration von Linux auf 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, die Konfiguration der PCMCIA-Ethernetkarte in die Startskripte 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 Konfiguration 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-Ethernetadresse der Karte. Die Geräteinstanz wird verwendet, um die Geräte von Karten, die mehrere Netzwerkschnittstellen enthalten, durchzunumerieren. 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 Slotnummern zu konfigurieren wie z.B. hier:

case "$ADDRESS" in
*,0,*,*)
    # Definition der Netzwerkkarte in Slot 0
    ;;
*,1,*,*)
    # Definition der Netzwerkkarte in Slot 1
    ;;
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 ersten Schritt in die Datei /etc/fstab einzutragen. Allerdings sollte im Optionsfeld der Eintrag noauto stehen. In der Datei network.opts müssen dann die Verzeichnisse, in die die NFS-Dateisysteme gemountet werden, 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 zusätzliche 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, 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, den Typ automatisch zu erkennen, wenn dies möglich ist, oder 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 Schnittstellen und Modems

Unter Linux wird auf serielle Schnittstellen über die speziellen Dateien /dev/cua* und /dev/ttyS* zugegriffen. Die ttyS* Dateien werden für eingehende Verbindungen (z.B. angeschlossenes Terminal) und die Dateien cua* für ausgehende Verbindungen (z.B. Modem) verwendet. Jeder physische Anschluß hat sowohl eine ttyS* als auch eine cua* Gerätedatei: Es hängt von einem selber ab, welche man verwendet. Jedoch ist ein Trend bei Linux zu erkennen, die cua* Devices nicht mehr zu benutzen. Debian GNU/Linux wird bereits ganz ohne die cua* Devices ausgeliefert. Die Konfiguration einer seriellen Schnittstelle 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 im Computer bereits eingebauten seriellen Schnittstellen, /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 die spezielle Konfiguration eines Modems dient die Datei /etc/pcmcia/serial.opts. Auch sollte nicht das Kommando setserial verwendet werden, um die I/O-Adresse oder den Interrupt eines seriellen PCMCIA-Gerätes zu verändern. Dies würde den seriellen Treiber anweisen, das Gerät an einer anderen Stelle zu suchen. Dies würde aber nichts an der aktuellen Einstellung der PCMCIA-Karte ändern. Das serielle Konfigurationsskript erlaubt einem, sowohl setserial-Optionen anzugeben, als auch festzulegen, ob eine Zeile für diese Schnittstelle in die Datei /etc/inittab eingefügt werden soll.

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älschlicherweise als eine gewöhnliche fest eingebaute serielle Schnittstelle identifiziert wird. Dies ist harmlos. Wenn der PCMCIA-Treiber Kontrolle über das Modem übernimmt, 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. Ändern Sie 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 funktionieren genauso wie folgende 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.

Wenn ein SCSI-Controller entdeckt wird, wird von dem SCSI-Treiber nach neuen SCSI-Geräten gesucht. Die Systemlog-Dateien sollten Auskunft darüber geben, ob ein Gerät ordentlich erkannt wird. Den neuen SCSI-Geräten werden die ersten verfügbaren SCSI-Devices zugewiesen. Die erste SCSI-Festplatte wird /dev/sda, das erste Bandlaufwerk /dev/st0 und das erste CD-ROM-Laufwerk wird /dev/scd0 sein.

Mit Kernel 1.3.x und späteren Versionen 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 das 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, aber gemountete Dateisysteme werden ordentlich aus dem Verzeichnisbaum entfernt, wenn die PCMCIA-Karte aus dem Rechner genommen wird.

Mit Kernel 1.2.x können die PCMCIA-Treiber nicht automatisch erkennen, welches Gerät an welchem SCSI-Controller angeschlossen ist. Wenn man eine normale SCSI-Gerätekonfiguration hat, so kann man diese Geräte in der Datei /etc/pcmcia/scsi.opts auflisten. Zum Beispiel, wenn man normalerweise nur eine Festplatte und ein CD-ROM-Laufwerk verwendet, würde man folgendes verwenden:

# Kernel 1.2.x: 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 kann. Die Adressen bestehen entweder aus sechs oder sieben durch Kommata getrennte Felder: Das aktuelle Schema, der Gerätetyp, die Slotnummer, der SCSI-Kanal, die ID, die logische Einheitennummer (LUN) und eventuell die Partitionsnummer. Der Gerätetyp wird sd für Festplatten, st für Bandlaufwerke, sr für CD-ROM-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 enthaltenden 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 enthaltenden 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 CD-ROM-Laufwerk an SCSI ID 6:

case "$ADDRESS" in
*,sd,*,0,3,0)
    # diese 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 keine Grundtreiber für besondere SCSI-Geräte wie Festplatten, Bandlaufwerke, etc. enthält, dann wird das Gerät nicht vom PCMCIA-Treiber konfiguriert. Als ein Nebeneffekt wird der Gerätename in var/run/stab etwas 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 für SCSI-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ält eine »Termination Power« Leitung, welche für den ordentlichen Betrieb von passiven SCSI Terminatoren notwendig ist. PCMCIA-SCSI-Controller speisen diese Leitung nicht. Falls die Leitung benötigt wird, muß sie von einem anderen SCSI-Geräte gespeist werden. Einige externe SCSI-Geräte können so konfiguriert werden, daß sie diese Leitung speisen. Andere, wie z.B. das ZIP-Laufwerk oder das Syquest EZ-Laufwerk verwenden aktive Terminierungen und benötigen diese Leitung daher nicht. In einigen Fällen kann es notwendig sein, einen speziellen externen Termininator wie den APS SCSI Sentry 2 zu verwenden, der über ein eigenes Netzteil verfügt.

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 als Teil der Adaptec-Produktserie 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.

Der nicht unterstützte Trantor SlimSCSI-Controller kann auf folgende Weise erkannt werden:

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

Der nicht unterstützte Adaptec SlimSCSI-Controller 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 statischen RAM-Karten zusammenarbeitet, und einen neueren Treiber memory_cs, der meistens für den direkten Zugriff auf Flashkarten verwendet wird. Für eine genauere Beschreibung der Gerätenamen sollte man die Manual Pages befragen. Beide, sowohl Block- als auch zeichenorientierte Gerätedateien, werden erzeugt. Die Blockgeräte werden für einen Festplattenähnlichen Zugriff verwendet (Erzeugung und Mounten von Dateisystemen etc.). Die zeichorientierten Gerätedateien werden für rohe (raw), nichtgepufferte 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 wird, aus zwei Feldern, der Slotnummer und der Partitionsnummer. Gewöhnliche Speicherpartitionen werden vor Attributspeicherpartitionen numeriert. Allgemein ist die interessanteste Partition die mit der Nummer 0. Dieses ist die Hauptpartition, auf der die Daten gespeichert werden. Hier ist ein Beispiel eines Skriptes, das automatisch, abhängig vom verwendeten Slot, eine Flashspeicherkarte 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 Nebeneffekt, daß andere unerkannte Karten fälschlicherweise als Speicherkarten erkannt werden.

Der pcmem_cs Treiber erzeugt drei logische Gerätedateien für eine 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 Flashspeicherkarten

Um eine Flashspeicherkarte 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: Das Flash Translation Layer und das Microsoft Flash File System. Das FTL-Format is generell flexibler, weil es erlaubt, irgendein gewöhnliches, anspruchsvolles Dateisystem wie ext2 oder MS-DOS FAT 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 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 für das gesamte Gerät aufgerufen. 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
Beachten Sie, daß die vorgegebene 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 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 kompatible 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 Kernelversionen 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 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 Aufruf soll überprüfen, ob 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 zu entfernen?

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 Schnittstellenkarte 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 kompiliert 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
bezogen 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 funktioniert nicht mit einem PCMCIA-Modem zusammen, das in Betrieb ist, da der serielle Treiber nicht in der Lage ist, die Arbeitsparameter des Modems zu sichern und wiederherzustellen.

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ückversetzen.

4.12 Wie wird ein PCMCIA-Treiber entfernt?

Um das vollständige PCMCIA-Paket zu entfernen, 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 dieses 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.


Inhalt