Il n'est pas nécessaire que vous lisiez cette section, à moins que vous utilisiez au moins trois ports série... (mais pas sur une carte multiports).
N'importe quel port série libre est utilisable. La seule limitation réside dans le nombre d'interruptions (IRQ) et d'adresses de port d'entrée/sortie à utiliser. Cette limitation n'est pas spécifique à Linux, mais est due au bus du PC. Chaque périphérique série (port série, modem interne, carte série) doit posséder ses propres interruption et adresse.
Les cartes série multiports sont spécialement conçues pour partager la même interruption sur tous les ports qu'elles possèdent. Linux communique avec elles en sélectionnant une adresse d'entrée/sortie différente pour chaque port de ces cartes.
Par défaut sur un PC, l'IRQ 4 est partagée entre ttyS0
et
ttyS2
, et l'IRQ 3 entre ttyS1
et ttyS3
. Les
interruptions en cours d'utilisation sont regroupées dans
/proc/interrupts
. Pour se servir de plus de deux ports
série, leur interruption doit être réassignée, par exemple en
choisissant celle d'un port parallèle. En effet, les IRQ 5 et
7 sont sur un PC normalement attribuées aux ports parallèles,
mais peu de personnes en possèdent deux. Vous pouvez donc
réassigner une de ces interruptions à un port série, et
continuer à utiliser joyeusement votre port parallèle !
Cette manipulation requiert le programme setserial
. De
plus, il vous faudra ajuster certains cavaliers sur vos cartes
(à vérifier sur les manuels des cartes) pour fixer les IRQ.
Vous devez vous arranger pour avoir une IRQ unique pour chacun
des ports série. Voici comment je configure les miens dans
/etc/rc.d/rc.local
(cette initialisation doit avoir
lieu lors du démarrage) :
/sbin/setserial /dev/ttyS0 irq 3 # ma souris
/sbin/setserial /dev/ttyS1 irq 4 # mon terminal Wyse
/sbin/setserial /dev/ttyS2 irq 5 # mon modem Zoom
/sbin/setserial /dev/ttyS3 irq 9 # mon modem USR
Assignations standards des IRQ :
IRQ 0 Base de temps 0 IRQ 1 Clavier IRQ 2 Cascade pour le deuxieme controleur d'IRQ IRQ 3 Port serie 2 IRQ 4 Port serie 1 IRQ 5 Port parallele 2 IRQ 6 Disquette IRQ 7 Port parallele 1 IRQ 8 Horloge temps-reel (RTC) IRQ 9 Redirige vers l'IRQ2 IRQ 10 Non assignee IRQ 11 Non assignee IRQ 12 Non assignee IRQ 13 Coprocesseur mathematique IRQ 14 Controleur de disques durs 1 IRQ 15 Controleur de disques durs 2
Il n'existe pas vraiment de Bonne Technique pour choisir les interruptions. Il faut juste s'assurer qu'elles ne sont pas déjà utilisées par la carte mère, ou une autre carte. 2, 3, 4, 5, ou 7 est généralement un bon choix. ``Non assignée'' signifie que rien de standard n'utilise cette IRQ. Notez également que l'IRQ2 et l'IRQ9 sont identiques : vous pouvez donc spécifier aussi bien 2 que 9, le gestionnaire de périphériques est très compréhensif. Si vous possédez une carte série avec un connecteur de bus 16 bits, vous pouvez également utiliser l'IRQ 10, 11, 12 ou 15.
N'utilisez pas les IRQ 0, 1, 6, 8, 13 et 14 ! Elles sont
réservées par la carte mère. Une fois le paramétrage effectué,
vérifiez l'absence de conflit avec /proc/interrupts
.
Vous devez ensuite fixer les adresses des ports. Vérifiez le manuel pour la position des cavaliers. Comme pour les interruptions, chaque périphérique série doit posséder sa propre adresse. Par défaut, les ports sont paramétrés de la manière suivante :
ttyS0 adresse 0x3f8
ttyS1 adresse 0x2f8
ttyS2 adresse 0x3e8
ttyS3 adresse 0x2e8
Choisissez les adresses à affecter à chaque port série, et
positionnez les cavaliers sur la carte en conséquence. Ainsi,
j'ai mon modem sur ttyS3
, ma souris sur ttyS0
,
et mon terminal sur ttyS2
.
Au prochain démarrage, Linux devrait voir vos ports séries aux
adresses que vous avez sélectionnées. Par contre, les IRQ vues
par Linux peuvent ne pas correspondre avec celles que vous avez
configurées. Ne vous inquiétez pas : Linux ne sait pas
détecter les IRQ au démarrage, car c'est assez aléatoire et le
résultat peut être faux. Utilisez setserial
pour spécifier
à Linux quelles interruptions sont associées aux ports, puis
vérifiez après redémarrage de Linux les adresses des ports
d'entrée/sortie avec /proc/ioports
.