Vor dem Beginn sollte man darüber nachdenken, ob es wirklich erforderlich ist das PCMCIA Paket selber zu kompilieren. Die meisten Linux Distributionen werden mit einem vorkompilierten PCMCIA Treiberpaket ausgeliefert. Allgemein muß das Paket nur kompiliert werden, wenn man neue Funktionen der aktuellen Treiber benötigt oder wenn der Kernel derart modifiziert wurde, daß die in der Distribution mitgelieferten Treiber nicht mehr verwendbar sind. Das Kompilieren des PCMCIA Pakets ist technisch nicht schwierig, setzt allerdings eine gewisse Vertrautheit mit Linux voraus.
Die folgenden Dinge müssen installiert sein bevor man mit der Installation des Paketes beginnt:
Man benötigt einen kompletten Linux Quellbaum des Kernels, ein fertiger Kernel allein genügt nicht. Das PCMCIA Modul enthält einige Referenzen auf Kernel Quelltexte. Während man einen neuen Kernel übersetzen will um unnötige Treiber zu entfernen, ist dies für die Installation von PCMCIA nicht notwendig.
Aktuelle stabile Kernelquellen und patches sind unter
http://sunsite.unc.edu/pub/Linux/kernel/v2.0
oder von
http://tsx-11.mit.edu/pub/linux/sources/system/v2.0
Aktuelle Modulwerkzeuge sind dort unter modules-2.0.0.tgz
zu finden. Entwicklungskernel sind in den Entsprechenden v2.1
Verzeichnissen zu finden. Einige aktuelle Entwicklungskernel und
Compiler arbeiten schlecht mit älteren Modulwerkzeugen
zusammen. Bei der Verwendng von 2.1 Kerneln muß man sicher sein,
daß man die Richtige Kombination an shared libraries und
Modulwerkzeugen hat. Die neuesten Modulwerkzeuge sowie Versionen
für ältere Kernel sind unter
http://www.pi.se/blox/modules
zu finden.
Wird der Einsatz einer PCMCIA Ethernetkarte geplant, so ist bei der Konfiguration des Kernels die Unterstützung eines Netzwerks zu aktivieren und die normalen Linux Ethernettreiber sowie die pocket and portable adapter zu deaktivieren. Die PCMCIA Netzwerkkartentreiber sind alle als ladbare Module implementiert. Derartige Treiber die in den Kernel kompiliert wurden verschwenden daher nur Platz.
Wenn SLIP, PPP oder PLIP verwendet werden sollen, so muß der Kernel mit diesen Funktionen konfiguriert werden oder über ladbare Module des Kernels realisiert werden. In der Kernelkonfiguration der 1.2.* Kernel ist es nicht mölich Konfigurationsoptionen wie SLIP Kompression für ladbare Module zu aktivieren. Daher wird es hier wohl besser sein SLIP direkt in den Kernel zu binden wenn man es benötigt.
Soll ein PCMCIA Token Ring Karte verwendet werden, so muß der
Kernel mit Token Ring driver support übersetzt worden
sein, wobei die Option CONFIG_IBMTR
ausgeschaltet sein
sollte.
Sollen PCMCIA IDE Karten verwendet werden, so sollte im Kernel
CONFIG_BLK_DEV_IDE_PCMCIA
aktiviert sein. Diese Funktion gibt
es nur bei den Kerneln 1.3.72 bis 2.1.7. Ältere Kernel haben
keine Unterstützung für wechselbare IDE Geräte, neuere
Kernel benötigen keine spezielle Konfiguration.
Bei der Verwendung von PCMCIA SCSI Karten sollte in der
Kernelkonfiguration CONFIG_SCSI
aktiviert sein. Ebenso
sollten die Haupt-Treiber für die geplanten SCSI Geräte
(SCSI Festplatten, Bandlaufwerke, CD-Rom, generisch)
aktiviert sein, wohingegen die Treiber für spezielle
SCSI-Controller Karten nicht benötigt werden.
Wenn Treiber die für die PCMCIA Geräte benötigt werden
als Module implementiert wurden, so ist die Datei
/etc/pcmcia/config
entsprechend zu modifizieren so daß
diese Module für die richtige Karte geladen werden. Wenn zum
Beispiel ein serieller Treiber modularisiert wurde, so kann die
serielle Gerätedefinition wie folgt geändert werden:
device "serial_cs"
class "serial" module "misc/serial", "serial_cs"
Wenn der Kernel mit der Option CONFIG_MODVERSIONS
(Kontrolle
der Versionsnummer von Modulen) kompiliert wurde, so wird das
Konfigurationsskript nach der Existenz der Datei
/usr/include/linux/modversions.h
, der Moduldatenbank,
suchen. Diese wird erstellt, wenn im Kernelquellverzeichnis der Befehl
make dep
ausgeführt wird.
Dieses Paket enthält eine auf X basierte Kartenstatus Anzeige mit
dem Namen cardinfo
. Dieses Programm basiert auf dem frei
vertriebenen Anwenderinterface mit dem Namen Forms Library
,
welche installiert sein muß wenn man cardinfo
verwenden will. Eine binäre Version ist unter
hyper.stanford.edu:/pub/pcmcia/extras
sowohl im
a.out als auch im ELF Format erhältlich. Es müssen
zusätzlich alle gewöhnlichen X Headerdateien und
Bibliotheken installiert sein.
Hier ist ein Übersicht des Installationsprozesses:
pcmcia-cs-2.9.?.tar.gz
in /usr/src
.make config
in dem neuen pcmcia-cs-2.9.?
Verzeichnismake all
, danach make install
./etc/pcmcia
auf die eigenen Bedürfnisse.make config
werden einige
Konfigurationseinstellungen abgefragt und es wird überprüft
ob das System für die Installation der PCMCIA Unterstützung
entsprechend vorbereitet ist. In den meisten Fällen können
die Standardeinstellungen verwendet werden. Für den Fall, daß
Probleme auftreten ist es ratsam auf die Ausgaben dieses Programmes zu
achten.
Wird das PCMCIA Paket für den Gebrauch auf einem anderen Computer kompiliert, so sollte ein anderes Installationsverzeichnis angegeben werden wenn danach gefragt wird. Dies sollte ein absoluter Pfad sein. Alle PCMCIA Dateien werden relativ zu diesem Pfad installiert. Danach ist man in der Lage den gesamten Verzeichnisbaum in eine tar Datei zu schreiben und zum Zielcomputer zu kopieren werden wo sie im root-Verzeichnis entpackt werden müssen, um das PCMCIA Paket an der richtigen Stelle zu installieren.
Wenn des Paket für einen anderen Computer kreuzkompiliert werden soll, so kann ein anderer Name für den Compiler und Linker angegeben werden. Dies kann auch auf Systemen mit gemischtem a.out und ELF Formaten hilfreich sein. Das Skript wird ebenfalls nach Kompilier- und Fehlersuchoptionen fragen.
Einige der Programme (cardctl
und cardinfo
)
können entweder in der safe oder trusting Form
kompiliert werden. Die safe-Form verhindert, daß
nicht-root Anwender die Kartenkonfiguration ändern
können. Die trusting-Form erlaubt normalen Anwendern
Befehle abzusetzen um Karten anzuhalten, wiederanzufahren,
zurückzusetzen und die aktuelle Konfiguration zu ändern. Das
Konfigurationsskript wird nach einer der beiden Formen fragen. Die
Voreinstellung ist safe.
Es gibt ein paar Einstellungen der Kernelkonfiguration, die Auswirkungen auf die PCMCIA Werkzeuge haben. Das Konfigurationsskript kann diese aus dem laufenden Kernel (meistens) herauslesen. Alternativ, wenn für einen anderen Computer kompiliert wird, kann diese Konfiguration aus einem Kernelquellcode Verzeichnisbaum herausgelesen werden oder sie können interaktiv abgefragt werden.
Das Durchlaufen von make all
gefolgt von make
install
wird die Kernelmodule und Anwendunsprogramme erzeugen und
installieren. Die Kernelmodule werden in
/lib/modules/{
version}/pcmcia
installiert. Die Programme
cardmgr
und cardctl
werden in /sbin
installiert. Wenn cardinfo
erstellt wird, so wird es in
/usr/bin/X11
installiert.
Die Konfigurationsdateien werden in das Verzeichnis
/etc/pcmcia
kopiert. Wird über eine alte Version
installiert, so werden die alten Kofigurationsdateien umbenannt, bevor
die neuen installiert werden. Die alten Skriptdateien bekommen
Endungen wie *.\ 1\ , *.\ 2\  und so weiter.
Wenn nicht bekannt ist welcher PCMCIA Controller Chip eingebaut ist,
so kann die probe
Funktion im Unterverzeichnis von
cardmgr/
verwendet werden um den Chiptyp zu ermitteln. Es
gibt zwei Hauptarten an Chips: Der Databook TCIC-2 Typ und der Intel
i82365SL kompatible Typ.
Ein Dämon auf Anwenderebene überwacht ob eine Karte
eingeschoben oder entfernt wird. Dieser Dämon heißt
cardmgr
. Dieser ist ähnlich in der Funktion wie Barry
Jaspan's pcmdiad
in früheren Versionen. cardmgr
ließt eine Konfigurationsdatei /etc/pcmcia/config
welche die bekannten PCMCIA Karten beschreibt. Es werden darin ebenso die
zusätzlichen Module erwähnt die für den Gebrauch der
PCMCIA-Karte notwendig sind und müssen eventuell auf das eigene
System angepaßt werden. Für weitere Informationen sollte
die man page weiterhelfen.
Einige Linux Distributionen, wie z.B. Slackware, verwenden eine BSD
Anordnung der Systemstartskripte. Wenn die Datei
/etc/rc.d/rc.M
existiert, gehört das System zu dieser
Gruppe. Das Skript rc.pcmcia
, das in /etc/rc.d
installiert ist, kontrolliert den Start und Stopp des PCMCIA
Systems. make install
verwendet das Kommando probe
um den Chiptyp zu ermitteln und das Skript rc.pcmcia
entsprechend anzupassen. Es sollte dann eine Zeile in der Startdatei
/etc/rc.d/rc.M
eingefügt werden, die das PCMCIA
Startskript aufruft:
/etc/rc.d/rc.pcmcia start
Es ist nicht wichtig wo diese Zeile erscheint solange sie nach dem Start
von syslogd
steht.
Red Hat, Caldera und Debian Linux haben Startskripts, die dem System V
folgen. Wenn ein Verzeichnis mit dem Namen /etc/init.d
oder
/etc/rc.d/init.d
existieren, gehört die Distribution zu
dieser Gruppe. Das rc.pcmcia
Skript wird dann entsprechend in
/etc/init.d
oder /etc/rc.d/init.d
installiert. Es
besteht hier keine Notwendigkeit irgendeine Startdatei zu editieren um
PCMCIA zu aktivieren: Dies geschieht automatisch.
Wenn das Verzeichnis /etc/sysconfig
existiert wird eine
separate Konfigurationsdatei zum Starten als /etc/sysconfig
installiert. Wenn in diesem Fall irgendwelche Moduloptionen (wie
z.B. PCIC= oder PCIC_OPTS= Einstellungen) geändert werden sollen,
so ist dies in dieser Datei einzutragen und nicht im Startskript. Bei
Nachfolgenden Installationen wird diese Datei nicht
überschrieben. Einige Systeme werden mit
Systemkonfigurationsdateien ausgeliefert die PCMCIA per Voreinstellung
deaktivieren (wie z.B. S.u.S.E.). Daher sollte der Inhalt solcher
Dateien vorher überprüft werden (bei S.u.S.E.:
/etc/rc.config
).
Einige frühere Versionen verwendeten die PCMCIA-Skripte in /etc/sysconfig
anstelle von /etc/pcmcia
. Die
aktuelle Version und zukünftige werden das Verzeichnis
/etc/pcmcia
auf allen Systemen verwenden. Existierende
PCMCIA-Skripte in /etc/sysconfig
werden nach
/etc/pcmcia
verschoben.
Card Services sollte es automatisch vermeiden auf Ports und
Interrupts zuzugreifen die von anderen Geräten verwendet
werden. Es wird ebenfalls versucht Konflikte mit anderen unbekannten
Geräten zu entdecken. Allerdings ist dies nicht absolut
zuverlässig. In einigien Fällen müssen bestimmte
Bereiche für einen Treiber explizit ausgeschlossen werden. Dies
erreicht man über die Datei /etc/pcmcia/config.opts
.
Hier sind einige Einstellungen für spezielle Notebooks:
In wenigen Fällen ist das probe
Kommando nicht in der
Lage den Controllertyp automatisch zu ermitteln. Bei Halikan NBD 486
Systemen, die einen TCIC-2 Controller an einer ungewöhnlichen
Stelle haben, muß die Datei rc.pcmcia
editiert
werden damit das tcic
Modul geladen wird. Dabei muß der
Parameter PCIC_OPTS
auf tcic_base=0x02c0
gesetzt werden.
Die Treibermodule tcic und i82365 haben zahlreiche Parameter zur Behandlung der Busgeschwindigkeit welche für besonders schnelle Prozessoren angepasst werden müssen. Symptome für Geschwindigkeitsprobleme sind unter anderem Probleme der Kartenerkennung, Blockierung bei hoher Prozessorbelastung, große Fehlerraten oder schlechte Übertragungsraten der Geräte. Man kontrolliere die entsprechenden man pages für nähere Informationen. Hier ist eine kurze Zusammenfassung:
cmd_time
Option, die die Dauer von PCMCIA Buszyklen festlegt,
zu sein. Schnelle 486 Systeme (insbesondere DX4-100) scheinen oft von
einer Erhöhung von 6 (Voreinstellung) auf 12 oder 16 zu
profitieren.fast_pci
Einstellung, welche gesetzt werden sollte, falls die
PCI-Busgeschwindigkeit größer als 25 MHz ist.async_clock
Option die relative
Geschwindigkeit des PCMCIA Busses zum Hauptbus. Wird diese Option
gesetzt, so werden extra Wartezyklen bei einigen Operationen
eingefügt werden. (David hat von einem Notebook
gehört, daß diese Option benötigte.)pcmcia_core
Modul besitzt einen cis_speed
Parameter zum ändern der Geschwindigkeit mit der auf den Speicher
der Card Information Structure (CIS) zugegriffen wird. Bei einigen
Systemen mit schnellen Busgeschwindigkeiten kann die Erhöhung
dieses Parameters (d.h. Verlangsamung des Kartenzugriffs) die
Erkennung einzelner Karten begünstigen.extra_sockets=1
gesetzt ist. rc.pcmcia
konfiguriert werden. Zum Beispiel:
# sollte entweder i82365 oder tcic sein
PCIC=i82365
# Geschwindigkeitsparameter des Treibers sollten hier stehen
PCIC_OPTS="cmd_time=12"
# pcmcia_core Optionen werden hier angegeben
CORE_OPTS="cis_speed=500"
Hier sind ein paar Geschwindigkeitseinstellungen für spezielle Systeme
"freq_bypass=1 cmd_time=8"
verwendet werden."cmd_time=12"
."cmd_time=16"
.probe
-Kommando keinen PCMCIA Controller entdecken. Wenn dies
geschieht muß die Datei rc.pcmcia
von Hand wie folgt
abgeändert werden:
# sollte entweder i82365 oder tcic sein
PCIC=i82365
# Geschwindigkeitsparameter des Treibers sollten hier stehen
PCIC_OPTS="wakeup=1"
Das Konfigurationsskript stellt normalerweise sicher, daß die PCMCIA
Module mit dem installierten Kernel funktionieren. Daher lassen sich
Probleme mit dem Laden der Module meist darauf
zurückführen, daß der Installationsvorgang nicht
korrekt durchgeführt worden ist. Einige solcher Fehlermeldungen
werden direkt auf der Linuxkonsole ausgegeben, andere werden in der
Systemlogdatei aufgezeichnet. Diese heißen normalerweise
/usr/adm/messages
oder /var/log/messages
. Dieses
hängt von der Konfiguration des syslogd
Dämons ab
und wird in der Datei /etc/syslog.conf
festgelegt. Um den
Fehler einzugrenzen sollten dieses Log-Dateien genau untersucht
werden. Auf diese Weise kann auch herausgefunden werden, welches Modul
das Problem verusacht.
Einige der PCMCIA Module benötigen Kerneldienste, die mehr oder
minder vorhanden sind, je nachdem wie der Kernel konfiguriert wurde.
Zum Beispiel verlangt der SCSI Kartentreiber, daß der Kernel mit SCSI
Unterstützung übersetzt wurde. Analog benötigt der
Netzwerktreiber die Kernelnetzwerkunterstützung. Wenn dem Kernel
die notwendigen Treiber fehlen kann es sein, daß sich insmod
,
mit der Begründung von undefinierten Symbolen, weigert ein
Modul zu laden.
Wenn insmod
von wrong version
Fehlern berichtet, so
bedeutet dies das die Module für eine ander Kernelversion als die
aktuell auf dem System laufende übersetzt worden ist. Dies kann
passieren, wenn die Module auf einem anderen Computer mit anderer
Konfiguration übersetzt worden sind und auf den eigenen kopiert
wurden oder wenn der Kernel nach der Installation von PCMCIA
neukonfiguriert wurde.
Eine andere Fehlerquelle besteht darin, daß die Module und der
Kernel mit unterschiedlichen Einstellungen von
CONFIG_MODVERSIONS
übersetzt worden sind. Wenn ein Modul
mit Versionskontrolle neben einem Kernel ohne gleaden wird, so wird
insmod
sich über undefinierte Symbole beschweren.
Zum Schluß sind noch relativ neue binutils Versionen inkompatibel mit den älteren Versionen der Modulwerkzeuge. Dies kann Inkompatibiltäten der Module verursachen. Eine übliche Fehlermeldung in einem solchen Fall ist die Meldung, daß "gcc_compiled" nicht definiert sei. Wenn diese Fehlermeldungen erscheinen, sollte man auf die neuesten Modulwerkzeuge aufrüsten. Diese sind unter
http://www.pi.se/blox/modules
zu bekommen.
In den meisten Fällen wird der Treiber (i82365 oder
tcic
) automatisch einen Interrupt suchen und auswählen
um den Kartenstatus anzuzeigen. Diese automatische Interruptsuche
funktioniert bei einigen intelkompatiblen Controllern nicht, wie
z.B. Cirrus Chips und einige in IBM ThinkPads verwendeten Chips. Wenn
ein Gerät während des Probevorgangs inaktiv ist, kann es
passieren, daß der Interrupt dieses Gerätes als frei
erscheint. In solchen Fällen kann es passieren, daß dieser
Interrupt vom Treiber verwendet wird.
Bei den i82365 und dem tcic
Treibern kann die Option
irq_mask
verwendet werden um die mölichen Interrupts
einzuschränken. Diese Maske schränkt den Satz der
möglichen Interrupts, die für den Gebrauch mit PCMCIA Karten
oder für die Anzeige von Kartenstatusänderungen verwendet
können, ein. Die Option cs_irq
kann ebenfalls verwendet
werden um explizit den Interrupt festzulegen mit welchem der Wechsel
des Kartenstatus überwacht wird.
Wenn ein funktionierender Interrupt nicht gefunden werden kann, so
besteht die Möglichkeit einen Pollmodus zu verwenden. Sowohl der
i82365 als auch der tcic
Treiber akzeptieren die
Option poll_intervall=100
mit welcher sie jede Sekunde den
Kartenstatus bekannt geben werden (pollen). Diese Option
sollte auch verwendet werden, wenn der Spielraum für freie
Interrupts für den Gebrauch mit PCMCIA stark eingeschränkt
ist. Insbesondere für Systeme mit mehreren PCMCIA Controllern
ist die Zahl der Interrupts zur Anzeige der Statusinformationen der
Karten stark eingeschränkt.
Alle diese Optionen sollten in der PCIC_OPTS=
Zeile in der
Datei rc.pcmcia
gesetzt werden.
Per Voreinstellung reservieren sich die PCMCIA Treiber
Speicherfenster im Bereich 0xc0000-0xfffff nach der
Überprüfung dieses Bereiches auf den Gebrauch durch ROM oder
andere Geräte. Dieses Fenster wird in der Datei
/etc/pcmcia/conifg.opts
definiert. Die Überprüfung
dieses Bereichs wird durchgeführt, wenn ein Treiber versucht eine
neue Karte zu konfigurieren. Dieser Prüfvorgang ist nicht
Narrensicher, so daß nicht erkannte Probleme auftreten
können. Wenn ein Speicherbereich erkannt wurde der von einem
anderen Gerät verwendet wird, so kann es passieren, daß die
Karte nicht korrekt erkannt wird. Mit Chipsätzen die es erlauben,
können auch Fehler durch das BIOS shadowing in diesem Bereich
entstehen. Wenn man feststellt, daß alle Karten
fälschlicherweise immer als Speicherkarten erkannt werden, sollte
man sichergehen, daß das BIOS shadowing beim Computer
ausgeschaltet ist. Ein gutes Fenster zu finden erfordert manchmal
einiges herumexperimentieren. Einige gute Fensteralternativen die man
versuchen kann sind die Bereiche 0xd8000-0xdffff, 0xc0000-0xcffff und
0xc8000-0xcffff.
Wenn man DOS PCMCIA Treiber besitzt, kann man versuchen anhand dieser einen guten Speicherbereich herauszufinden. Es ist jedoch zu beachten, daß diese Adressen oft in Segmentform angegeben sind. Es fehlt in diesem Fall die letzte hexadezimale Ziffer (eine absolute Adresse von 0xd0000 würde als 0xd000 angegeben werden). Man sollte also darauf achten diese letzte Ziffer hinzuzufügen falls man solche Werte übernimmmt.
Wenn das Anpassen des Fensters im Speicherbereich das Problem der Kartenerkennung nicht löst, so liegt wahrscheinlich ein Geschwindigkeitsproblem (timing) vor.
Das vertreiben von binären Treibern ist schwierig, da einige Eigenschaften erst beim Übersetzen der Dateien angegeben werden können. Die PCMCIA Module hängen auch von der richtigen Kernelkonfigutation und -version ab. Daher müssten binäre Versionen zusammen mit passenden Kerneln vertrieben werden. Der größte Bedarf an vorübersetzten Modulen besteht bei der Installation von Grund auf. In diesem Fall werden die PCMCIA Module zum Teil direkt für die Installation benötigt.
PCMCIA ist heute Teil der meisten Linuxdistributionen.
Eigentlich ist das Paket nicht so groß. Alle Treibermodule
zusammen benötigen weniger als 200KB an Speicherplatz auf der
Festplatte. Mit den zusätzlichen Werkzeugen werden es
zusätzlich weitere 70KB und das Verzeichnis /etc/pcmcia
belegt ungefähr 30KB. Im Betrieb benötigen die Hauptmodule
ungefähr 48KB Hauptstpeicher. Der cardmgr
-Dämon wird
generell direkt ausgelagert und nur beim Kartenwechsel aktiv. Das
gesamte Paket belegt nicht mehr Platz als DOS Varianten.