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_TABLE
Makro, 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_NNN
gespeichert 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_table
gespeichert für PCI-Geräte__mod_usb_device_table
für USB-Geräte usw. - Der
depmod
Das Programm erstellt eine Alias-Tabelle, die__mod_alias_NNN
zuordnet Werte zum Modulnamen. Diese Tabelle wird in der Dateimodules.alias
gespeichert 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.modprobe
angegebene Programm aufruft sysctl, also/sbin/modprobe
standardmäßig. Der Kernel übergibt ein Argument anmodprobe
die angibt, welcher Treiber angefordert wird. Für ein PCI-Gerät ist dies ein Name wiepci:v00009710d00009865sv*sd*bc*sc*i*
. modprobe
sucht 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/*.conf
enthalten und/lib/modules/$(uname -r)/modules.alias
), lädt es dieses Modul.modprobe
lädt kein Modul, das von einerblacklist
auf 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 .