Ich habe eine PCI-Karte mit zwei seriellen und einem parallelen Port installiert. der Chipsatz ist MCS9865 . Ich habe den neuesten Treiber (V1.0.12) von hier heruntergeladen. Ich habe make ausgeführt und make install . jetzt sind die beiden seriellen Ports /dev/ttyD0 und /dev/ttyD1 . Ich habe sie mit picocom getestet und es funktioniert einwandfrei. Das Problem ist, dass beim Neustart des Systems kein /dev/ttyD0 vorhanden ist und /dev/ttyD1 . Ich muss ein weiteres make install durchführen . Gibt es eine Lösung?
 Ausgabe von lspci -v zeigt dies:
03:01.0 Serial controller: NetMos Technology PCI 9865 Multi-I/O Controller (prog-if 02 [16550])
    Subsystem: Device a000:1000
    Flags: bus master, medium devsel, latency 32, IRQ 19
    I/O ports at df00 [size=8]
    Memory at fbeff000 (32-bit, non-prefetchable) [size=4K]
    Memory at fbefe000 (32-bit, non-prefetchable) [size=4K]
    Capabilities: [48] Power Management version 2
    Kernel driver in use: mcs9865-serial
03:01.1 Serial controller: NetMos Technology PCI 9865 Multi-I/O Controller (prog-if 02 [16550])
    Subsystem: Device a000:1000
    Flags: bus master, medium devsel, latency 32, IRQ 18
    I/O ports at de00 [size=8]
    Memory at fbefd000 (32-bit, non-prefetchable) [size=4K]
    Memory at fbefc000 (32-bit, non-prefetchable) [size=4K]
    Capabilities: [48] Power Management version 2
    Kernel driver in use: mcs9865-serial
03:01.2 Parallel controller: NetMos Technology PCI 9865 Multi-I/O Controller (prog-if 03 [IEEE1284])
    Subsystem: Device a000:2000
    Flags: bus master, medium devsel, latency 32, IRQ 7
    I/O ports at dd00 [size=8]
    I/O ports at dc00 [size=8]
    Memory at fbefb000 (32-bit, non-prefetchable) [size=4K]
    Memory at fbefa000 (32-bit, non-prefetchable) [size=4K]
    Capabilities: [48] Power Management version 2
 make install zeigt dies:
cp mcs9865.ko mcs9865-isa.ko /lib/modules/2.6.32-5-amd64/kernel/drivers/serial/
depmod -A
chmod +x mcs9865
cp mcs9865 /etc/init.d/
ln -s /etc/init.d/mcs9865 /etc/rcS.d/S99mcs9865 || true
ln: creating symbolic link `/etc/rcS.d/S99mcs9865': File exists
modprobe mcs9865
modprobe mcs9865-isa
Ich verwende Debian 6.0.5 mit den aktuellsten Paketen.
Akzeptierte Antwort:
So funktioniert das normalerweise:
- Der Quellcode des Moduls enthält Aufrufe an MODULE_DEVICE_TABLEMakro, um eine Tabelle mit Gerätekennungen zu deklarieren, die dieses Modul unterstützt.
- Im kompilierten Modul werden die Aliase als Werte von Symbolen namens __mod_alias_NNNgespeichert wobei die NNN ganze Zahlen sind. Der Wert codiert die Buskennung für das Gerät, z.pci:v00009710d00009865sv*sd*bc*sc*i*für das als Hersteller 0x9710 identifizierte PCI-Gerät, Gerät 0x9865.
 Sie werden auch unter dem Namen__mod_pci_device_tablegespeichert für PCI-Geräte__mod_usb_device_tablefür USB-Geräte usw.
- Der depmodDas Programm erstellt eine Alias-Tabelle, die__mod_alias_NNNzuordnet Werte zum Modulnamen. Diese Tabelle wird in der Dateimodules.aliasgespeichert im Stammverzeichnis des Kernel-Modulverzeichnisses, z./lib/modules/2.6.32-5-amd64/modules.alias.
 Es erstellt auch Dateien wiemodules.pcimap,modules.usbmap, …, die von der veralteten Hotplug-Infrastruktur verwendet werden, die wieder in modprobe subsumiert wurde.
- Wenn der Kernel ein Gerät erkennt, für das kein Treiber vorhanden ist, versucht er, ein Modul zu laden, indem er das von kernel.modprobeangegebene Programm aufruft sysctl, also/sbin/modprobestandardmäßig. Der Kernel übergibt ein Argument anmodprobedie angibt, welcher Treiber angefordert wird. Für ein PCI-Gerät ist dies ein Name wiepci:v00009710d00009865sv*sd*bc*sc*i*.
- modprobesucht nach einem Modul mit dem angegebenen Namen. Wenn es ein Modul mit dem angeforderten Namen findet (nachdem es dem Alias gefolgt ist, das in seinen Konfigurationsdateien definiert ist, die- /etc/modprobe.d/*.confenthalten und- /lib/modules/$(uname -r)/modules.alias), lädt es dieses Modul.- modprobelädt kein Modul, das von einer- blacklistauf die schwarze Liste gesetzt wurde Direktive in seinen Konfigurationsdateien.
 Führen Sie lspci -n aus um die PCI-IDs Ihres Geräts zu sehen, und überprüfen Sie die Kette oben, um zu sehen, wo etwas schief gelaufen ist.
 Manchmal funktioniert ein Treiber für ein Gerät, das dem Gerät, für das er bestimmt ist, sehr ähnlich ist, aber eine andere PCI-ID hat. In diesem Fall ist es möglich, dass der Treiber funktioniert, aber nicht automatisch geladen wird, da er die PCI-ID für Ihr Gerät nicht deklariert. Sie können den Alias manuell in /etc/modprobe/my_aliases.conf hinzufügen .
 Sie können erzwingen, dass ein Modul beim Booten automatisch geladen wird, indem Sie seinen Namen zu /etc/modules hinzufügen .