GNU/Linux >> LINUX-Kenntnisse >  >> Debian

Linux – Debian erkennt serielle PCI-Karte nach Neustart nicht?

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 Datei modules.alias gespeichert im Stammverzeichnis des Kernel-Modulverzeichnisses, z. /lib/modules/2.6.32-5-amd64/modules.alias .
    Es erstellt auch Dateien wie modules.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 an modprobe die angibt, welcher Treiber angefordert wird. Für ein PCI-Gerät ist dies ein Name wie pci: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 einer blacklist auf die schwarze Liste gesetzt wurde Direktive in seinen Konfigurationsdateien.
Verwandt:bash:Syntaxfehler in der Nähe des unerwarteten Tokens „}“?

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 .


Debian
  1. Linux Setuid funktioniert nicht?

  2. Linux – Warum funktioniert Setuid nicht?

  3. Debian 9:Nach Upgrade von 8 funktioniert MySQL (Mariadb) nicht mehr?

  4. Linux – Gerät Eth0 scheint nicht vorhanden zu sein, was die Initialisierung verzögert?

  5. Bios erkennt SSD nach dem Neustart von Ubuntu 16.04 (Dell Xps 15) nicht?

Firefox Debian installieren

Befehl nicht gefunden – Fehlender Pfad zu /sbin unter Debian GNU/Linux

Debian-Linux-Download

So starten Sie Debian 10 neu

So erkennen und verwalten Sie Geräte unter Linux

Apache funktioniert nach dem Neustart nicht unter AWS Linux – 301-Antwortcode