Was läuft beim Einstecken einer PCMCIA-Karte ab

Ist die PCMCIA-Unterstützung geladen sieht man das per lsmod. Es müssen die Module pcmcia_core, ds und der PCMCIA-Bridgetreiber (i82365, yenta_socket, oder ähnlich) geladen sein. In /var/log/syslog (manchmal auch /var/log/messages) bekommt man z.B. folgendes zu sehen:

Sep 26 19:13:14 notebook kernel: Linux PCMCIA Card Services 3.2.5
Sep 26 19:13:14 notebook kernel:   kernel build: 2.4.22 #13 Wed Sep 24 23:31:29 CEST 2003
Sep 26 19:13:14 notebook kernel:   options:  [pci] [apm] [pnp]
Sep 26 19:13:14 notebook kernel: PnP: PNP BIOS installation structure at 0xc00fdbb0
Sep 26 19:13:14 notebook kernel: PnP: PNP BIOS version 1.0, entry at f0000:698f, dseg at f0000
Sep 26 19:13:14 notebook kernel: Intel ISA/PCI/CardBus PCIC probe:
Sep 26 19:13:14 notebook kernel: PCI: No IRQ known for interrupt pin A of device 00:03.0. Please try using pci=biosirq.
Sep 26 19:13:14 notebook kernel:   Omega Micro 82C092G rev 00 PCI-to-PCMCIA at slot 00:03, port 0x3e0
Sep 26 19:13:14 notebook kernel:     host opts [0]: none
Sep 26 19:13:14 notebook kernel:     host opts [1]: none
Sep 26 19:13:14 notebook kernel:     ISA irqs (scanned) = 3,4,7,9,11,15 status change on irq 15
Sep 26 19:13:14 notebook cardmgr[202]: watching 2 sockets

Beim Einstecken einer PCMCIA-Netzwerkkarte bekommt man z.B. folgendes in der /var/log/syslog zu sehen:

Sep 26 19:14:35 notebook cardmgr[203]: initializing socket 0
Sep 26 19:14:35 notebook cardmgr[203]: socket 0: NE2000 Compatible Ethernet
Sep 26 19:14:35 notebook kernel: cs: memory probe 0x0d0000-0x0dffff: clean.
Sep 26 19:14:36 notebook cardmgr[203]:   product info: "PCMCIA", "Ethernet", "", ""
Sep 26 19:14:36 notebook cardmgr[203]:   function: 6 (network)
Sep 26 19:14:36 notebook cardmgr[203]: executing: 'modprobe pcnet_cs'
Sep 26 19:14:36 notebook kernel: cs: IO port probe 0x0100-0x04ff: excluding 0x1e0-0x1e7 0x208-0x20f
Sep 26 19:14:36 notebook kernel: cs: IO port probe 0x0800-0x08ff: clean.
Sep 26 19:14:36 notebook kernel: cs: IO port probe 0x0c00-0x0cff: clean.
Sep 26 19:14:36 notebook cardmgr[203]: executing: './network start eth0'
Sep 26 19:14:36 notebook kernel: eth0: NE2000 Compatible: io 0x300, irq 11, hw_addr 00:00:B4:4E:7E:37
Sep 26 19:14:36 notebook cardmgr[203]: + Fill with your own settings...
Sep 26 19:14:36 notebook cardmgr[203]: + Hardware network card
Sep 26 19:14:36 notebook cardmgr[203]: + /sbin/ifconfig eth0 up 192.168.1.98 netmask 255.255.255.0 broadcast 192.168.1.255

Den Ablauf steuert der cardmgr. Dieser erkennt, daß eine PCMCIA-Karte eingesteckt wurde. Beim Einstecken bekommt er einen Typ (Manufacturer-ID) und die Karteninfo als Information mit.

Mit dieser Kennung (in diesem Fall: Manufacturer ID = 0x0149, 0xc1ab, Karteninfo = "PCMCIA", "Ethernet") sieht er dann nach, ob in /etc/pcmcia/config einen Eintrag findet, der so aussieht:

...
card "NE2000 Compatible Ehernet"
  version "PCMCIA", "Ethernet"
  manfid 0x0149, 0xc1ab
  bind "pcnet_cs"
...

Hier ist die Zeile mit manfid ... der Schlüssel. Daran erkennt der cardmgr eine unterstützte Karte. Er gibt den String nach card .... aus, wie es im obigen syslog-Ausschnitt zu sehen ist.

Randnotiz: Es gibt noch andere Vergleichsmöglichkeiten, aber das würde hier zu weit führen.

Als nächstes nimmt er den Eintrag, der in bind ... angegeben ist und sucht ihn in /etc/pcmcia/config und findet in diesem Beispiel:

...
device "pcnet_cs"
  class "network" module "pcnet_cs"
...

Hier hat er das Gerät (engl.: device) pcnet_cs. In der darauf folgenden Zeile wird die zugeordnete Klasse (= network) und das nachzuladende Kernelmodul (hier: pcnet_cs) angegeben.

Der cardmgr laedt jetzt das Kernelmodul nach und startet das Script /etc/pcmcia/<Klasse> (in diesem Fall: /etc/pcmcia/network). In der Regel stehen in /etc/pcmcia/<Klasse>.opts die dazugehörigen Daten. Diese werden zu Angabe der Einstellparameter - bei Netzwerkkarten: IP-Adresse, Router, etc. - herangezogen.

LinuxInterna/PcmciaAbläufe (zuletzt geändert am 2007-12-23 22:46:28 durch localhost)