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.
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.
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.
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
mem_speed=\#
beim Modul
pcnet_cs
verwendet. Ein Beispiel, wie dies zu machen ist, findet
man in der Standarddatei config.opts
. Man sollte Zeiten bis zu 1000
Nanosekunden verwenden.
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. Dieses ist am einfachsten, wenn die Karte, was häufig der Fall
ist, kompatibel zur NE2000 ist.
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, mit Hilfe der Systemlog-Datei herausfinden 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 als erstes mit dem
Kommando ping
ausprobieren, ob andere Rechner im gleichen Subnetz
unter Verwendung ihrer IP-Adresse erreichbar sind. Danach sollte man
versuchen, das Gateway und zum Schluß Rechner innerhalb anderer
Subnetze mittels ping
zu erreichen. 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, die Abschlußwiderstände etc. sollten ebenfalls gründlich
überprüft werden.
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"
cardmgr
die
Karte korrekt erkennt und den serial_cs
Treiber startet. Wenn
dies nicht funktioniert, muß eventuell ein neuer 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 des Interrupt-Modus zu verwenden. Wenn
dies das Problem zu lösen scheint, ist es wahrscheinlich,
daß ein anderes Gerät den gleichen Interrupt wie das PCMCIA-Gerät verwendet.
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 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
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 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
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.
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.
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
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.
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.
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.
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.
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.