Bonjour,
J'ai remarqué que nombre de personnes sur le forum avaient des problèmes pour faire fonctionner des périphériques ISA sous Linux (cartes sons, SCSI, réseaux)
Je me permet donc de poster ici un tutoriel pour faire fonctionner ces type de matériel, j'essayerais de donner la méthode général et de l'illustrer avec l'exemple d'installation d'une carte sonore Yamaha OPL3SAX et d'une carte ISA Adaptec AHA1505.
Si vos pensez que ce tutorial peut être amélioré / complété / corrigé, faites le savoir dans ce sujet.
L'ISA et le PNP sous Linux :
Introduction :
T'as récupéré un ordinosaure à la décharge, le vieux Pentium 133 de mémé ou tout autres PC dattant d'avant l'an 2000 ?
Après avoir installé ton [Ku | Xu | Wu | Edu | U]buntu ou ta Debian sur cette machine tu remarque que certains matériels pourtant fonctionnels sous Windows ne sont pas détecté par le manchot ?
Avant de cracher sur le manchot, vérifie que les matériels non utilisables ne soit pas connecté à la cartes mère par un connecteur ISA et lui ce tutoriel si c'est le cas.
Quelques mots sur l'ISA :
L'Architecture Industrielle Standard, ou en anglais Industrial Standard Architecture plus connu sous le nom du ISA désigne un connecteur présent sur toutes les cartes mère de PC construits entre les années 1980 et l'an 2000, depuis le début du XXIe siècle, le connecteur ISA à pris sa retraite.
Si vous ouvrez votre ordinateur, vous trouverez ces connecteur en bas de la carte mère, ceux-ci sont noirs, longs et utilisent de gros contacteur.

Image d'un connecteur ISA
Le PNP sous Linux :
Alors que les premières cartes ISA devaient être réglé par l'utilisateur en donnant manuellement au programme les plages d'entrée/sortie, les numéros de DMA et d'IRQ utilisé par la carte, est apparut plus tard des cartes ISA dites Plug'N Play (Branche en utilise en français, ou PNP en abrégé) fonctionnant sans devoir réfléchir à ces réglages de DMA, d'IRQ ou autre, ceux-ci étant directement trouvé par le programme.
Sous à partir de Windows 95, l'ISA PNP fonctionne sans souci (à condition d'avoir les pilotes de la carte), il faut savoir que sous GNU/Linux, la donne n'est pas la même.
Si les cartes ISA (quelles soit PNP ou non) peuvent fonctionner sous GNU/Linux, il faudra mettre les mains dans le cambouis. Il faut bien avouer que GNU/Linux est encore Plug'N Pray (Branche et pris) avec les carte ISA
Enfin, sachez que sous GNU/Linux, le PNP ne conserne
que les cartes ISA
Prérequis :
Pour suivre ce tutoriel, vous avez besoin des choses suivantes :
- Une carte mère avec au moins un connecteur ISA
- Une carte ISA
- Un GNU/inux
- De la patience
- Le programme ISAPNPTools
Si les quatre premiers éléments sont déjà en votre possession (pourquoi lire cette documentation sinon ?) il vous manque ISAPNPTools.
Ce programme va permettre de trouver les configurations possibles pour chaque carte ISA, malheureusement, il n'est plus disponible sous [Ku | Xu | Wu | Edu | U]buntu 6.06 LTS (Dapper Drake)
Fort heureusement, la version Debian ou [Ku | Xu | Wu | Edu | U]buntu 5.10 ou inférieur est pleiment utilisable sous Dapper Drake.
- Si vous utilisez Debian, Breezy Badger ou antérieur, installez-le via la ligne de commande ou Synaptic
apt-get install isapnptools
- Si vous utilisez Dapper Drake, télécharger la
version Breezy ou
Debian Sarge de ce package (c'est la même)
Et installez-la via la ligne de commande ou GDebit:
dpkg -i isapnptools_1.26-5_i386.deb
Trouver les configurations disponibles :
Pour configurer la carte ISA, nous allons tout d'abord demander à isapnptools de nous donner toutes les configurations possible pour chaque cartes ISA du système (on appel ça un PNP-Dump) et d'enregistrer le resultat dans un fichier nommé isapnp.conf dans /etc/.
Pour faire ce PNP-Dump on utilise la commande pnpdump en redirigeant sa sortie vers /etc/isapnp.conf.
sudo pnpdump > /etc/isapnp.conf
Ensuite, il faut éditer ce fichier /etc/isapnp.conf...
gksu gedit /etc/isapnp.conf
...
... et là, c'est le drame, on se retrouve avec un fichier remplie de ligne plus ou moins incompréhensibles sortant du PNP-Dump. 🙁
Structure du PNP-Dump :
Le PNP-Dump est, contrairement à ce que l'on pourrait croire, structuré.
Préenbule :
Les lignes suivantes sont le préenbule du fichier, elles donnent des directive à ISAPNPTools :
# $Id: pnpdump_main.c,v 1.27 2001/04/30 21:54:53 fox Exp $
# Release isapnptools-1.26
#
# This is free software, see the sources for details.
# This software has NO WARRANTY, use at your OWN RISK
#
# For details of the output file format, see isapnp.conf(5)
#
# For latest information and FAQ on isapnp and pnpdump see:
# http://www.roestock.demon.co.uk/isapnptools/
#
# Compiler flags: -DREALTIME -DHAVE_PROC -DENABLE_PCI -DHAVE_SCHED_SETSCHEDULER -DHAVE_NANOSLEEP -DWANT_TO_VALIDATE
#
# Trying port address 0273
# Board 1 has serial identifier XX XX XX XX XX XX XX XX XX
# Board 2 has serial identifier XX XX XX XX XX XX XX XX XX
# (DEBUG)
(READPORT 0x0273)
(ISOLATE PRESERVE)
(IDENTIFY *)
(VERBOSITY 2)
(CONFLICT (IO FATAL)(IRQ FATAL)(DMA FATAL)(MEM FATAL)) # or WARNING
Laissez-les telles quelles.
Début de la description d'une carte
Voir trouverez ensuite un ligne indiquant qu'une carte à été trouvée et que sa configuration va être décrite :
# Card 1: (serial identifier XX XX XX XX XX XX XX XX XX)
Par exemple, avec ma carte son Yamaha OP3-SA2
# Card 1: (serial identifier 81 ff ff ff ff 20 00 a8 65)
# Vendor Id YMH0020, No Serial Number (-1), checksum 0x81.
# Version 1.0, Vendor version 0.0
# ANSI string -->OPL3-SAX Sound Board<--
#
# Logical device id YMH0021
#
# Edit the entries below to uncomment out the configuration required.
# Note that only the first value of any range is given, this may be changed if required
# Don't forget to uncomment the activate (ACT Y) when happy
Et avec ma carte SCSI Adaptec AHA1505
# Card 2: (serial identifier 0d da a5 f8 6a 05 15 90 04)
# Vendor Id ADP1505, Serial Number 3668310122, checksum 0x0D.
# Version 1.0, Vendor version 1.1
# ANSI string -->Adaptec AVA-1505AE <--
#
# Logical device id ADP1505
# Device supports I/O range check register
#
# Edit the entries below to uncomment out the configuration required.
# Note that only the first value of any range is given, this may be changed if required
# Don't forget to uncomment the activate (ACT Y) when happy
Fin de la description d'une carte :
La fin de la description d'une carte est marqué d'un simple checksum, du type :
# End tag... Checksum 0x00 (OK)
Description d'une carte :
La description des ports d'entrées sortie, de numéros de DMA et d'IRQ d'une carte se trouvent entre le début... et la fin vu aux paragraphes précédent (logique non ?)
Voici par exemple la description
d'une des configuration disponibles pour ma carte Yahama OPL3-SAX :
(CONFIGURE YMH0020/-1 (LD 0
# Multiple choice time, choose one only !
# Start dependent functions: priority preferred
# Logical device decodes 16 bit IO address lines
# Minimum IO base address 0x0220
# Maximum IO base address 0x0220
# IO base alignment 16 bytes
# Number of IO addresses required: 16
# (IO 0 (SIZE 16) (BASE 0x0220) (CHECK))
# Logical device decodes 16 bit IO address lines
# Minimum IO base address 0x0530
# Maximum IO base address 0x0530
# IO base alignment 8 bytes
# Number of IO addresses required: 8
# (IO 1 (SIZE 8) (BASE 0x0530) (CHECK))
# Logical device decodes 16 bit IO address lines
# Minimum IO base address 0x0388
# Maximum IO base address 0x0388
# IO base alignment 4 bytes
# Number of IO addresses required: 4
# (IO 2 (SIZE 4) (BASE 0x0388) (CHECK))
# Logical device decodes 16 bit IO address lines
# Minimum IO base address 0x0330
# Maximum IO base address 0x0330
# IO base alignment 2 bytes
# Number of IO addresses required: 2
# (IO 3 (SIZE 2) (BASE 0x0330) (CHECK))
# Logical device decodes 16 bit IO address lines
# Minimum IO base address 0x0370
# Maximum IO base address 0x0370
# IO base alignment 2 bytes
# Number of IO addresses required: 2
# (IO 4 (SIZE 2) (BASE 0x0370) (CHECK))
# IRQ 5.
# High true, edge sensitive interrupt
# (INT 0 (IRQ 5 (MODE +E)))
# First DMA channel 0.
# 8 bit DMA only
# Logical device is not a bus master
# DMA may execute in count by byte mode
# DMA may not execute in count by word mode
# DMA channel speed type F
# (DMA 0 (CHANNEL 0))
# Next DMA channel 1.
# 8 bit DMA only
# Logical device is not a bus master
# DMA may execute in count by byte mode
# DMA may not execute in count by word mode
# DMA channel speed type F
# (DMA 1 (CHANNEL 1))
# End dependent functions
(NAME "YMH0020/-1[0]{OPL3-SAX Sound Board}")
# (ACT Y)
))
Pour fairre fonctionner un carte, il faudra choisir un bloc de configuration et décommenter certaines lignes.
Pour vous y retrouver, sachez que nombre de lignes sont des commentaires déstiné à vous décrire les entrées/sorties, DMA et IRQ détecté.
Types de lignes à décommenter :
Lignes indiquant une plage d'entrées/sorties
# (IO X (SIZE Y) (BASE ZxZZZZ) (CHECK))
Si vous désirez connaitre la liste des ports d'entrées/sortie utilisés sur votre système, utilisez la commance suivante :
cat /proc/ioports
Ligne indiquant un numéro de DMA.
# (DMA X (CHANNEL Y))
Il est possible que votre carte ISA n'en utilise pas, auquel cas, vous n'aurez pas de ligne de ce type.
Ligne indiquant un IRQ
# (INT X (IRQ Y (MODE +E)))
Lisez les lignes de commentaires se trouvant juste au dessus des lignes d'IRQ, elle vous donneront les numéros d'IRQ utilisablent par votre carte ISA.
Si l'un ne fonctionne pas, il faudra en choisir un autres parmis ceux proposés.
Ligne permettant d'activer une carte
(ACT Y)
Vous
devez décommenter cette ligne pour activer votre carte et lui permettre ainsi de fonctionner.
Test de la configuration :
Une fois que vous avez décommenté les lignes d'une configuration qui vous semble correcte, nous allons tester cette configuration.
Pour celà, nous allons demander à ISAPNPTools de lire le fichier /etc/isapnp.conf
sudo isapnp /etc/isapnp.conf
Vous obtiendrez comme réponse une descriptions rapide des cartes trouvées avec une indication sur les éventuelles erreurs.
Exemple de configuration sans erreurs :
Board 1 has Identity 81 ff ff ff ff 20 00 a8 65: YMH0020 Serial No -1 [checksum 81]
Board 2 has Identity 0d da a5 f8 6a 05 15 90 04: ADP1505 Serial No 3668310122 [checksum 0d]
YMH0020/-1[0]{OPL3-SAX Sound Board}: Ports 0x220 0x530 0x388 0x330 0x370; IRQ5 DMA0 DMA1 --- Enabled OK
YMH0020/-1[1]{OPL3-SAX Sound Board}: Port 0x201; --- Enabled OK
ADP1505/3668310122[0]{SCSI Controller }: Port 0x340; IRQ10 --- Enabled OK
Le "--- Enable OK" indique que la configuration que vous avez choisie peut être utilisée.
En cas d'erreur, vous obtiendrez quelque chose du genre
/etc/isapnp.conf:52 -- Fatal - Error occurred executing request '<IORESCHECK> '
Bien entendu, chaque erreur est précédée de son numéro de ligne (52 ici), ce qui vous permettera de trouver facilement la source du problème.
Si vous trouvez une erreur du type <IORESCHECK> allez à la ligne conserné et supprimez la chaîne de caractère (CHECK), par exemple
(IO 0 (SIZE 32) (BASE 0x0140) (CHECK))
Devient
(IO 0 (SIZE 32) (BASE 0x0140))
Puis recommencez le test de configuration
Un fois que le test ne retourne plus d'erreur, c'est bon. 🙂
Charger le module de la carte et lui donner les bon paramètres
Trouver le modules
Pour trouver le modules utilisé par votre carte isa, il y à deux solutions :
- Soit vous utilisez un moteur de recherche en lui donnant une recherche du "module nom_de_votre_carte"
- Soit vous téléchargez les sources de votre noyau, vous allez dans l'outils de configuration et vous consultez à l'aides du modules réseau/sonore/SCSI correspondant au type de votre carte, généralement, le nom du fichier pilotes y est indiqué.
Dans le cas de mes cartes, les modules étaient les suivant :
- snd-opl3sa2 pour la carte sonore Yamaha OPL3-SAX
- aha152x pour la carte SCSI Adaptec AHA1505
Donner les paramètres au modules
Pour charger le modules, vous devrez utiliser la commande modprobe.
Les paramètres sont généralement les ports d'entrées/sorties (io), de DMA (dma1 et dma2), et d'IRQ (irq) trouvé dans /etc/isapnp.conf
Par exemple :
sudo modprobe aha152x io=0x340 irq=10
Chargement automatique des modules :
Pour charger automatiquement les modules au démarrage de la machine, il faut indiquer les lignes de chargement de modules (les mêmes que modprobe) dans le fichier /etc/modules
Oh... un kernel panic. 🙁
Ne rigolez pas, il arrive que l'activation d'une carte ISA provoque un BSOD... heu non, un kernel panic (on est pas sous Windows ^^)
Redémarrez en mode "Maintenance" pour charger le minimum ou avec un live CD et commentez les lignes de modules de vos cartes ISA dans /etc/modules pour empêcher leur chargement
En faite, le problème est le suivant :
Malgré le faite qu'ISAPNPTools vous dise que votre configuration est correcte, la carte ISA se retrouve à partager son IRQ avec un autre matériel, or, les cartes ISA n'ont jamais étés conçu pour partager leur IRQ !
Pour vous en assurer, listez les IRQ du système :
cat /proc/interrupt
Et vérifiez que l'IRQ utilisé par vos cartes ISA soit libre (pas de nom de matériel)
Pour empêcher celà, vous avez les choix suivant :
- Changer la configuration de vos carte ISA avec ISAPNPTools et le fichier /etc/isapnp.conf parmis ceux quelle proposent et ceux disponibles.
- Retirer du matériel pour libérer des IRQ
- Retirer le support de l'ACPI pour libérer un IRQ et permettre aux cartes PCI de prendre d'autres IRQ et sans doute libérer celui utilisé par votre carte ISA (demande une recompilation de noyau)
Bien sûr, si vous modifiez le numéro d'IRQ de votre carte ISA, modifier en conséquence le fichier /etc/modules
Trucs et astuces :
Activer toutes les possibilitées de sa cartes son :
Si vous configure une carte son, consultez le fichier /usr/share/doc/alsa-base/driver/ALSA-Configuration.txt.gz pour connaître les différents arguments possible pour votre carte.
vim /usr/share/doc/alsa-base/driver/ALSA-Configuration.txt.gz
Par exemple, pour le modules opl3sa2 de ma carte Yamaha, le fichier /usr/share/doc/alsa-base/driver/ALSA-Configuration.txt.gz indique :
Module snd-opl3sa2
------------------
Module for Yamaha OPL3-SA2/SA3 soundcards.
port - control port # for OPL3-SA chip (0x370)
sb_port - SB port # for OPL3-SA chip (0x220,0x240)
wss_port - WSS port # for OPL3-SA chip (0x530,0xe80,0xf40,0x604)
midi_port - port # for MPU-401 UART (0x300,0x330), -1 = disable
fm_port - FM port # for OPL3-SA chip (0x388), -1 = disable
irq - IRQ # for OPL3-SA chip (5,7,9,10)
dma1 - first DMA # for Yamaha OPL3-SA chip (0,1,3)
dma2 - second DMA # for Yamaha OPL3-SA chip (0,1,3), -1 = disable
isapnp - ISA PnP detection - 0 = disable, 1 = enable (default)
Module supports up to 8 cards and ISA PnP. This module does not support
autoprobe (if ISA PnP is not used) thus all ports must be specified!!!
The power-management is supported.
Je doit donc indiquer :
sudo modprobe snd-opl3sa2 port=0x370 sb_port=0x220 wss_port=0x530 midi_port=0x330 fm_port=0x388 irq=5 dma1=0 dma2=1 isapnp=0
pour charger cette carte son.
Les scanners SCSI sur carte ISA
Si vous utilisez un scanner SCSI branché à une carte SCSI ISA, vous vous souvenez sans doute que sous Windows, il fallait démarrer le scanner avant l'ordinateur pour qu'il soit fonctionnel.
Rien de tous ça sous GNU/Linux, si jamais vous n'allumez pas votre scanner avant l'ordinateur, il suffit de décharge les modules SCSI généraux (sg) et celui de votre carte SCSI
sudo rmmod sg && sudo rmmod aha152x
Puis les recharger en donnant les paramètres de votre carte SCSI
sudo modprobe sg && sudo modprobe aha152x io=0x340 irq=10
Vous pouvez par exemple utiliser un script nommé scanner dans votre /etc/init.d/
#!/bin/sh
case "$1" in
start)
echo -n "Chargement du module SCSI generique... "
modprobe sg
echo " [ok]"
echo -n "Chargement du module de la carte SCSI... "
modprobe aha152x io=0x340 irq=10
echo " [ok]"
echo -n "Creation du lien symbolique entre /dev/sg0 et /dev/scanner... "
ln -s /dev/sg0 /dev/scanner
echo " [ok]"
echo "Le serveur de scanner est pret."
;;
restart)
echo -n "Dechargement du module SCSI generique... "
rmmod aha152x
echo " [ok]"
echo -n "Dechargement du module de la carte SCSI... "
rmmod sg
echo " [ok]"
echo -n "Rechargement du module SCSI generique... "
modprobe sg
echo " [ok]"
echo -n "Rechargement du module de la carte SCSI... "
modprobe aha152x io=0x340 irq=10
echo " [ok]"
echo -n "Creation du lien symbolique entre /dev/sg0 et /dev/scanner... "
rm -f /dev/scanner
ln -s /dev/sg0 /dev/scanner
echo " [ok]"
echo "Le serveur de scanner a correctement ete redemmare."
;;
stop)
echo -n "Dechargement du module SCSI generique... "
rmmod aha152x
echo " [ok]"
echo -n "Dechargement du module de la carte SCSI... "
rmmod sg
echo " [ok]"
echo "Le serveur de scanner est stoppe"
;;
*)
echo "Utilisation : /etc/init.d/scanner start|restart|stop"
;;
esac
Ainsi, l'arrêt du scanner se fait en entrant :
sudo /etc/init.d/scanner stop
(On décharge les modules)
Son démarrage avec :
sudo /etc/init.d/scanner start
(On charge les modules)
Et son redémarrage avec :
sudo /etc/init.d/scanner restart
(On décharge puis charge les modules)