J'ai installé une carte PCI avec deux ports série et un port parallèle. le chipset est MCS9865
. J'ai téléchargé le dernier pilote (V1.0.12) à partir d'ici. J'ai lancé make
et make install
. maintenant les deux ports série sont /dev/ttyD0
et /dev/ttyD1
. Je les ai testés avec picocom
et cela fonctionne parfaitement. le problème est que lorsque je redémarre le système, il n'y a pas de /dev/ttyD0
et /dev/ttyD1
. Je dois faire un autre make install
. Existe-t-il une solution ?
sortie de lspci -v
affiche ceci :
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
affiche ceci :
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
J'utilise Debian 6.0.5 avec la plupart des packages mis à jour.
Réponse acceptée :
Voici comment cela fonctionne normalement :
- Le code source du module contient des appels au
MODULE_DEVICE_TABLE
macro pour déclarer une table d'identificateurs d'appareils pris en charge par ce module. - Dans le module compilé, les alias sont stockés sous forme de valeurs de symboles appelés
__mod_alias_NNN
où les NNN sont des entiers. La valeur code l'identification de bus pour l'appareil, par ex.pci:v00009710d00009865sv*sd*bc*sc*i*
pour le périphérique PCI identifié comme fournisseur 0x9710, périphérique 0x9865.
Ils sont également stockés sous le nom__mod_pci_device_table
pour les périphériques PCI,__mod_usb_device_table
pour les périphériques USB, etc. - Le
depmod
le programme crée un mappage de table d'alias__mod_alias_NNN
valeurs au nom du module. Cette table est stockée dans le fichiermodules.alias
à la racine du répertoire des modules du noyau, par ex./lib/modules/2.6.32-5-amd64/modules.alias
.
Il crée également des fichiers commemodules.pcimap
,modules.usbmap
, …, qui sont utilisés par l'infrastructure hotplug obsolète qui a été réintégrée dans modprobe. - Lorsque le noyau détecte un périphérique pour lequel aucun pilote n'est présent, il essaie de charger un module en appelant le programme indiqué par le
kernel.modprobe
sysctl, qui est/sbin/modprobe
par défaut. Le noyau passe un argument àmodprobe
qui indique quel pilote est demandé. Pour un périphérique PCI, il s'agit d'un nom tel quepci:v00009710d00009865sv*sd*bc*sc*i*
. modprobe
recherche un module avec le nom donné. S'il trouve un module avec le nom demandé (après avoir suivi l'alias défini dans ses fichiers de configuration, qui incluent/etc/modprobe.d/*.conf
et/lib/modules/$(uname -r)/modules.alias
), il charge ce module.modprobe
ne chargera pas un module qui a été blacklisté par uneblacklist
directive dans ses fichiers de configuration.
Exécutez lspci -n
pour voir les identifiants PCI de votre appareil et vérifiez la chaîne ci-dessus pour voir où quelque chose s'est mal passé.
Parfois, un pilote fonctionne pour un périphérique très similaire au périphérique auquel il est destiné, mais avec un identifiant PCI différent. Dans ce cas, il est possible que le pilote fonctionne, mais ne soit pas chargé automatiquement car il ne déclare pas l'identifiant PCI de votre appareil. Vous pouvez ajouter l'alias manuellement dans /etc/modprobe/my_aliases.conf
.
Vous pouvez forcer le chargement automatique d'un module au démarrage en ajoutant son nom à /etc/modules
.