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.
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.
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.
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
mem_speed=\#
beim Modul
pcnet_cs verwendet. Ein Beispiel wie dies zu machen ist findet man in
der Standarddatei config.opts
. Versuche Zeiten bis zu 1000
(Nanosekunden).io_speed=\#
wenn
das Modul pcmcia_core
geladen wird. Um diese Option zu setzen
muß die Variable CORE_OPTS
im Startskript editiert
werden.
cardmgr
die Karte korrekt erkennt und die richtigen Netzwerktreiber startet.
Wenn dies nicht geschieht kann es sein, daß die Karte trotzdem
verwendbar ist, wenn sie mit einer unterstützten Karte baugleich
ist. Dies geht am einfachsten, wenn behauptet wird die Karte sei NE2000
kompatibel.cardmgr
erkannt wird aber
dennoch nicht funktioniert, so kann ein Interrupt oder Port Konflikt
mit einem anderen Gerät vorliegen. Dazu sollte man die Ressourcen
die die Karte verwendet herausfinden (aus der Systemlog-Datei) und
versuchen diese in der Datei /etc/pcmcia/config.opts
auszuschließen um die Karte zu zwingen andere zu verwenden./etc/pcmcia/network.opts
falsch editiert. Auf der anderen
Seite verursachen falsch konfigurierte Karten keine Meldungen./etc/pcmcia/network.opts
, sollte man damit beginnen, auf andere
Systeme im Subnetz das Kommando ping
unter
Verwendung von IP-Adressen versuchen. Danach sollte man versuchen das
Gateway mittels ping
zu erreichen und zum Schluß Rechner
innerhalb anderer Subnetze. Die Verwendung von ping
mit
Computernamen sollte erst nach diesem simpleren Test erfolgen./etc/pcmcia/network.opts
doppelt kontrollieren. Der Anschluß des Kabels, das
T-Stück, Terminatoren etc. sollten ebenfalls gründlich
überprüft werden.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"
cardmgr
die
Karte korrekt erkennt und den serial_cs
Treiber startet. Wenn
dies nicht funktioniert muß eventuell einen neuen Eintrag in der
Datei /etc/pcmcia/config
gemacht werden, so daß die Karte richtig
erkannt wird. Siehe Abschnitt
PCMCIA Speicherkarten für mehr Details.serial_cs
konfiguriert? Erneut sollte die Systemlog-Datei untersucht
werden. Sind Meldungen vom serial_cs
Treiber vorhanden? Wenn
Einträge wie register_serial() failed
erfolgt sind, kann
es sein, daß Konflikte in der I/O-Adresse mit anderen
Geräten vorliegen. Ein anderer Hinweis auf ein Problem ist die
Meldung, daß die Karte eine 8250
sei. Die meisten
modernen Modemkarten sollten als ein 16550A UART
erkannt
werden. Bei dem Verdacht auf einen Adressenkonflikt sollte die Datei
/etc/pcmcia/config.opts
editiert werden und der
Adressenbereich, den das Modem belegt, ausgeschlossen werden.setserial
Programm den Interrupt
auf Null zu setzen und zu kontrollieren ob das Modem so
läuft. Dies veranlaßt das Modem den langsameren
polling-Modus anstelle eines Interrupts zu verwenden. Wenn
dies das Problem zu lösen scheint, ist es wahrscheinlich,
daß ein anderes Gerät den gleichen Interrupt verwendet, wie
er von serial_cs
gewählt wurde. In diesem Fall sollte
eine Zeile in /etc/pcmcia/config.opts
eingefügt werden,
die diesen Interrupt ausschließt.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
aha152x_cs
Treiber (dieser wird von Adaptec, New
Media und ein paar anderen verwendet) scheint die Unterstützung
von disconnect/reconnect eine häufige Fehlerquelle bei
Bandlaufwerken zu sein. Um diese Eigenschaft abzuschalten muß
folgendes in der Datei /etc/pcmcia/config.opts
hinzugefügt werden:
module "aha152x_cs" opts "reconnect=0"
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
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.
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.
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
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.
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.
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.
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.
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.