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_TABLEmacro 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_NNNoù 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_tablepour les périphériques PCI,__mod_usb_device_tablepour les périphériques USB, etc. - Le
depmodle programme crée un mappage de table d'alias__mod_alias_NNNvaleurs 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.modprobesysctl, qui est/sbin/modprobepar défaut. Le noyau passe un argument àmodprobequi indique quel pilote est demandé. Pour un périphérique PCI, il s'agit d'un nom tel quepci:v00009710d00009865sv*sd*bc*sc*i*. modproberecherche 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/*.confet/lib/modules/$(uname -r)/modules.alias), il charge ce module.modprobene chargera pas un module qui a été blacklisté par uneblacklistdirective 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 .