Ho installato una scheda PCI con due porte seriali e una parallela. il chipset è MCS9865
. Ho scaricato l'ultimo driver (V1.0.12) da qui. Ho eseguito make
e make install
. ora le due porte seriali sono /dev/ttyD0
e /dev/ttyD1
. Li ho testati con picocom
e funziona perfettamente. il problema è che quando riavvio il sistema non c'è /dev/ttyD0
e /dev/ttyD1
. Devo fare un altro make install
. C'è qualche soluzione?
output di lspci -v
mostra questo:
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
mostra questo:
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
Sto eseguendo debian 6.0.5 con la maggior parte dei pacchetti aggiornati.
Risposta accettata:
Il modo in cui funziona normalmente è:
- Il codice sorgente del modulo contiene chiamate al
MODULE_DEVICE_TABLE
macro per dichiarare una tabella di identificatori di dispositivo supportati da questo modulo. - Nel modulo compilato, gli alias sono memorizzati come valori di simboli chiamati
__mod_alias_NNN
dove gli NNN sono numeri interi. Il valore codifica l'identificazione bus per il dispositivo, ad es.pci:v00009710d00009865sv*sd*bc*sc*i*
per il dispositivo PCI identificato come fornitore 0x9710, dispositivo 0x9865.
Sono inoltre memorizzati con il nome__mod_pci_device_table
per i dispositivi PCI,__mod_usb_device_table
per dispositivi USB, ecc. - Il
depmod
il programma crea una mappatura di una tabella alias__mod_alias_NNN
valori al nome del modulo. Questa tabella è memorizzata nel filemodules.alias
alla radice della directory dei moduli del kernel, ad es./lib/modules/2.6.32-5-amd64/modules.alias
.
Crea anche file comemodules.pcimap
,modules.usbmap
, …, che vengono utilizzati dall'infrastruttura hotplug obsoleta che è stata reintegrata in modprobe. - Quando il kernel rileva un dispositivo per il quale non è presente alcun driver, prova a caricare un modulo chiamando il programma indicato da
kernel.modprobe
sysctl, che è/sbin/modprobe
per impostazione predefinita. Il kernel passa un argomento amodprobe
che indica quale driver è richiesto. Per un dispositivo PCI, questo è un nome comepci:v00009710d00009865sv*sd*bc*sc*i*
. modprobe
cerca un modulo con il nome dato. Se trova un modulo con il nome richiesto (dopo aver seguito l'alias definito nei suoi file di configurazione, che includono/etc/modprobe.d/*.conf
e/lib/modules/$(uname -r)/modules.alias
), carica quel modulo.modprobe
non caricherà un modulo che è stato inserito nella lista nera da unablacklist
direttiva nei suoi file di configurazione.
Esegui lspci -n
per vedere gli ID PCI del tuo dispositivo e controlla la catena sopra per vedere dove qualcosa è andato storto.
A volte un driver funziona per un dispositivo molto simile al dispositivo a cui è destinato, ma ha un ID PCI diverso. In tal caso, è possibile che il driver funzioni, ma non venga caricato automaticamente perché non dichiara l'ID PCI per il tuo dispositivo. Puoi aggiungere l'alias manualmente in /etc/modprobe/my_aliases.conf
.
Puoi forzare il caricamento automatico di un modulo all'avvio aggiungendo il suo nome a /etc/modules
.