Le SCSI HOWTO Linux
par Drew Eckhardt,<
[email protected]> (transforme au for-
mat linuxdoc-sgml par Dieter Faulbaum),
<
[email protected]> (Adaptation francaise : Thierry
Danis
[email protected], le 28 Novembre 1997).
Version 2.30, 30 Aout 1996
11.. IInnttrroodduuccttiioonn
CCooppyyrriigghhtt
Ce document est distribue sous les contraintes de la GPL (GNU Public
Licence). Les lignes suivantes sont le texte integral anglais de la
licence.
This documentation is free documentation; you can redistribute it and/or
modify it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This documentation is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this documentation; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
En dehors de l'aspect GPL, j'apprecierais que les personnes
interessees a publier ce document me demandent (<
[email protected]>)
auparavant si une version plus recente existe. A chaque fois qu'une
version un peu ancienne est publiee, on me pose des questions qui ont
deja leur reponse dans les derniers documents, et la reputation de
l'editeur en fait les frais. Je prefererais egalement que toute
reference a un site de distribution gratuit, voire a des distributeurs
commerciaux, soit laissee intacte.
IMPORTANT:
LES RAPPORTS D'ANOMALIES ET AUTRES APPELS A L'AIDE QUI NE SUIVENT PAS
LES PROCEDURES DECRITES DANS LA SECTION ``Signaler une anomalie''
SERONT IGNORES.
Ce HOWTO couvre le sous-systeme SCSI de Linux, tel qu'il existe dans
le noyau version 1.2.10 et dans des codes alpha plus recents. Les
versions plus vieilles du code SCSI ne sont pplluuss ssuuppppoorrtteeeess et peuvent
differer sensiblement en ce qui concerne les pilotes implementes, les
performances et les options disponibles.
Pour toute information supplementaire, vous pouvez vous inscrire a la
liste de diffusion linux-scsi, en envoyant un email a
[email protected] contenant la ligne suivante dans le corps
du message :
subscribe linux-scsi
Vous pouvez vous radier de la liste en envoyant un email a la meme
adresse contenant dans le corps du message :
unsubscribe linux-scsi
Une fois votre inscription effective, vous pouvez envoyer des emails
dans la liste de diffusion a l'adresse suivante :
[email protected]
Je suis conscient que ce document n'est pas des plus conviviaux et
qu'il comporte certainement des erreurs et des imprecisions. Si vous
avez des remarques constructives, n'hesitez pas a me les poster.
22.. LLeess pprroobblleemmeess ccoouurraannttss
Ce chapitre recense un certain nombre de problemes habituellement
rencontres. S'il n'y a rien ici qui reponde a vos questions,
consultez egalement les chapitres relatifs aux cartes d'interface et
aux peripheriques.
22..11.. DDyyssffoonnccttiioonnnneemmeenntt ggeenneerraalliissee
Si vous rencontrez des erreurs aleatoires, il y a fort a parier que la
cause en est un cable defectueux ou une mauvaise terminaison.
Certaines cartes, comme celles architecturees autour du recent
composant NCR, effectuent un filtrage numerique et une negociation
active de signal et sont par le fait moins sensibles aux problemes de
connectique.
D'autres cartes, comme par exemple les Adaptec 154xC, 154xCF et 274x,
sont eexxttrreemmeemmeenntt sensibles et peuvent ne plus fonctionner avec
certains cordons qui ne perturberaient pas d'autres cartes.
Je le repete donc : certaines cartes sont ttrreess sensibles aux problemes
de mauvais cables et de terminaison, aussi est-il important de
verifier ces deux points avant toute chose lorsque des problemes
apparaissent.
Pour diminuer les risques potentiels, vous devez utiliser des cables
qui :
1. se prevalent d'une compatibilite SCSI-II,
2. ont une impedance caracteristique de 132 ohms,
3. proviennent tous d'une meme source, afin d'eviter les ecarts
d'impedance,
4. sont proposees par un vendeur repute (tel qu'Amphenol).
Un leger courant pour la terminaison doit etre fourni par chaque
equipement present sur le bus SCSI, via une diode pour prevenir tout
retour de tension. De cette maniere, une tension suffisante est
disponible en bout de chaine, la ou le bus en a besoin. Pour prevenir
tout endommagement du a un court-circuit, TERMPWR doit etre controle
au travers d'un fusible ou de tout autre dispositif de limitation du
courant.
Si plusieurs equipements, des cables externes ou un FAST SCSI 2 sont
utilises, une terminaison -- active ou forcee -- parfaite doit etre
mise a chaque extremite du bus.
Reportez-vous a la FAQ Comp.Periphs.Scsi (disponible sur tsx-11 dans
/pub/linux/ALPHA/scsi) pour plus de renseignements sur les
terminaisons actives.
22..22.. LLaa lliiggnnee ddee ccoommmmaannddee dduu nnooyyaauu
D'autres parties du document feront plus tard reference a la "ligne de
commande du noyau".
La ligne de commande du noyau est un ensemble d'options que vous
pouvez specifier, soit apres le nom de l'image a l'invite de LILO
(LILO : ), soit dans un champ "append" du fichier de configuration de
LILO (LILO 0.14 et superieurs utilisent le fichier /etc/lilo.conf, les
versions precedentes /usr/lilo/config).
Demarrez votre systeme avec LILO et appuyez sur une des touches ALT,
CTRL ou SHIFT, au moment ou il affiche le prompt. LILO devrait
repondre par :
:
A cet instant, vous pouvez selectionner l'image du noyau sur lequel
continuer le demarrage (en tapant son label) ou avoir la liste des
images, en apppuyant sur ?. Par exemple :
:?
ramdisk floppy disquedur
Pour demarrer (booter) le noyau avec la ligne de commande que vous
avez choisie entrez simplement le nom du noyau, suivi d'une liste
d'options. Chaque option est separee de la precedente par un espace.
L'appui sur ENTREE valide la ligne et continue le processus de
demarrage.
Les options sont de la forme :
variable=liste_de_valeurs
Ici, lliissttee__ddee__vvaalleeuurrss peut etre une simple valeur ou une liste de
valeurs delimitees par des virgules, sans espaces. Exception faite de
la specification du peripherique de boot, chaque valeur doit etre
numerique et peut etre fournie en decimal ou en hexadecimal.
Par exemple, pour demarrer Linux avec une carte compatible Adaptec
1520 non reconnue au demarrage, vous pourriez entrer :
:floppy aha152x=0x340,11,7,1
Si vous ne tenez pas a taper cette commande a chaque demarrage du
systeme, il est egalement possible d'utiliser l'option "append" dans
le fichier de configuration de LILO (LILO 0.13 et plus).
Cela donnera une ligne du genre :
append="aha152x=0x340,11,7,1"
22..33.. UUnn ppeerriipphheerriiqquuee aappppaarraaiitt aa ttoouutteess lleess aaddrreesssseess SSCCSSII
Si c'est le cas, vous avez certainement selectionne comme adresse pour
ce peripherique la meme adresse que le controleur (traditionnellement
l'adresse 7, bien que quelques cartes soient configurees autrement,
comme certaines Future Domain fixees a 6 par exemple).
Changez la configuration des cavaliers.
22..44.. LLee mmeemmee ppeerriipphheerriiqquuee eesstt rreeccoonnnnuu aa cchhaaqquuee uunniittee llooggiiqquuee
Ce peripherique a certainement un firmware bugge.
Une solution temporaire consiste a utiliser la ligne de commande
suivante :
max_scsi_luns=1
Si cela marche, vous pouvez ajouter votre peripherique a la liste des
peripheriques bugges, dans les sources du noyau. La variable en
question s'appelle bbllaacckklliisstt et se trouve dans le fichier
drivers/scsi/scsi.c. Envoyez ensuite le patch a Linus Torvalds
<
[email protected]>.
22..55.. VVoouuss aavveezz ddeess ''sseennssee eerrrroorrss'' aalloorrss qquuee vvoouuss ssaavveezz qquuee vvoottrree
mmaatteerriieell nn''aa ppaass dd''eerrrreeuurrss
Cela est parfois du a un mauvais cordon ou a une terminaison mal
adaptee.
Referez-vous au chapitre ``Dysfonctionnement generalise''.
22..66.. UUnn nnooyyaauu ccoonnffiigguurree aavveecc ssuuppppoorrtt rreesseeaauu nnee mmaarrcchhee ppaass
Les routines d'auto-detection pour la plupart des cartes reseau ne
sont pas passives. Il se peut qu'elles entrent en conflit avec
certaines cartes SCSI et qu'elles en perturbent le bon fonctionnement.
22..77.. DDeess ppeerriipphheerriiqquueess ssoonntt ddeetteecctteess,, mmaaiiss iill eesstt iimmppoossssiibbllee dd''yy
aacccceeddeerr
Un peripherique SCSI a ete detecte par le noyau mais vous etes
incapable d'y acceder (les commandes mkfs /dev/sdc, tar xvf /dev/st2
par exemple echouent).
Vous n'avez pas de fichier special /dev/xxx pour votre peripherique.
Sous Unix, les peripheriques sont en mode bloc ou en mode caractere.
Les peripheriques en mode bloc utilisent un mecanisme de cache, alors
que les peripheriques en mode caractere ne sont pas bufferises. Un
peripherique est donc defini sous Unix par son mode (bloc ou
caractere), son numero majeur (ce numero correspond au pilote qui le
gere -- ainsi, le majeur mode bloc 8 correspond aux disques SCSI) et
un numero mineur (ce mineur definit quelle unite est accedee via cette
specification de peripherique -- ainsi, le peripherique reference par
le majeur caractere 4 et le mineur 0 est la premiere console
virtuelle, mineur 1 est la console suivante, etc.). Cependant, acceder
aux peripheriques par un espace de nommage separe romprait la
tradition d'Unix/Linux ('tout est fichier' !). C'est pourquoi des
fichiers speciaux sont crees sous /dev. Ces fichiers speciaux vous
permettront d'acceder directement a votre troisieme disque SCSI via
/dev/sdc, au premier port serie via /dev/ttyS0, etc.
La meilleure methode pour creer un fichier special est d'utiliser le
script MAKEDEV :
cd /dev
puis
MAKEDEV (en tant que root) pour les peripheriques que vous voulez
creer. Par exemple :
./MAKEDEV sdc
Les caracteres generiques "devraient" marcher. Par exemple :
./MAKEDEV sd\*
"devrait" creer les entrees pour tous les disques SCSI (la commande
precedente devrait avoir cree /dev/sda a /dev/sdp, avec 15 sous-
partitions pour chaque disque).
./MAKEDEV sdc\*
"devrait" creer les entrees pour /dev/sdc et ses 15 sous-partitions
possibles (/dev/sdc1, /dev/sdc2, etc.).
J'ai dit "devrait" parce que c'est le comportement standard d'Unix --
le script MAKEDEV de votre installation pourrait ne pas se conformer a
cette facon de faire ou pourrait avoir restreint le nombre de fichiers
speciaux qu'il peut creer, auquel cas ce qui precede ne serait plus
tout a fait vrai.
Si MAKEDEV ne fait pas le travail pour vous, vous allez devoir creer
les fichiers speciaux a la main grace a la commande mmkknnoodd.
Le mode (bloc ou caractere), le majeur et le mineur sont precises pour
les divers peripheriques SCSI dans le chapitre ``Fichiers speciaux''.
Notez les valeurs trouvees dans ce chapitre et tapez (en tant que
root) :
mknod /dev/peripherique b|c majeur mineur
par exemple :
mknod /dev/sdc b 8 32
mknod /dev/st0 c 9 0
22..88.. LLee SSCCSSII ssee bbllooqquuee
Il peut y avoir de nombreuses raisons au blocage du bus.
Eventuellement, reportez-vous au chapitre dedie a votre carte pour
plus de details.
Certains cas de blocage semblent se produire lorsque plusieurs
peripheriques sont en cours d'utilisation simultanement. Si cela vous
arrive, essayez de contacter le fabricant des peripheriques et
regardez s'il n'existe pas des mises a jour de firmware qui
resoudraient le probleme. A l'occasion, essayez de changer de cable ou
branchez les peripheriques sur une autre machine.
Il se peut egalement que ce soit du a des secteurs defectueux sur un
des disques ou encore a une mauvaise gestion du DMA (Direct Memory
Access) par la carte mere (pour les cartes d'interface qui travaillent
en DMA). En fait, tout un tas d'autres raisons peut expliquer un
blocage du bus.
De temps en temps, comme nous venons de le signaler, des cas de
blocage apparaissent lorsque plusieurs peripheriques sont utilises en
meme temps sur le bus. Si votre controleur est capable de traiter
plusieurs requetes en meme temps, essayer de reduire la taille de la
queue a 1 et regardez si la situation s'ameliore. Cela etant, si vous
utilisez des peripheriques lents (lecteurs de bandes ou lecteurs de
CDROM peu rapides), reduire ainsi la taille de la queue n'est
certainement pas la meilleure solution.
22..99.. CCoonnffiigguurreerr eett rreeggeenneerreerr llee nnooyyaauu
Les pilotes SCSI non utilises consomment inutilement de precieux
octets et peuvent amener les systemes possedant peu de memoire a en
manquer (la memoire du noyau est non paginable (swappable)). Pour
cette raison, il est recommande de generer un noyau ne comportant que
le strict necessaire pour votre machine.
cd /usr/src/linux
Si vous comptez utiliser une partition racine (root device) autre que
la partition racine courante ou une resolution autre que du VGA 80x25,
voire si vous generez une disquette de demarrage, editez le makefile
et assurez-vous que les lignes
ROOT_DEV =
et
SVGA_MODE =
sont correctement positionnees.
Si vous avez applique des patches, assurez-vous que vous tous vos
fichiers sont correctement recompiles. Dans le doute, tapez :
make mrproper
Dans tous les cas, vous devrez configurer le noyau :
make config
Repondez aux questions. Apres avoir sauvegarde votre configuration,
regenerez les dependances et recompilez le noyau :
make depend
make
Une fois la generation du noyau terminee, n'oubliez pas de relancer
lilo (//ssbbiinn//lliilloo). Vous pouvez egalement construire une disquette de
demarrage :
make zdisk
22..1100.. LLeess uunniitteess llooggiiqquueess aauuttrreess qquuee llaa pprreemmiieerree nnee ffoonnccttiioonnnneenntt ppaass
De nombreux peripheriques SCSI verrouillent completement le bus ou
reagissent bizarrement lorsque vous tentez d'acceder a une unite
logique (LUN) qui n'est pas l'unite 0. C'est pourquoi les versions
recentes du noyau Linux n'essaient plus par defaut de tester les
unites logiques autres que 0. Si cela vous gene, vous pouvez
positionner max_scsi_luns sur la ligne de commande du noyau ; vous
pouvez aussi recompiler le noyau en positionnant l'option
CONFIG_SCSI_MULTI_LUN au moment de la configuration.
Il est habituel de mettre
max_scsi_luns=8
sur la ligne de commande de LILO.
Si, malgre tout, vos unites logiques ne sont toujours pas correctement
detectees (cela peut arriver avec de vieux controleurs SCSI->MFM, RLL,
ESDI ou SMD), essayez de supprimer le petit bout de code suivant de la
fonction scan_scsis() du fichier drivers/scsi/scsi.c :
/* Some scsi-1 peripherals do not handle lun != 0.
I am assuming that scsi-2 peripherals do better */
if((scsi_result[2] & 0x07) == 1 &&
(scsi_result[3] & 0x0f) == 0) break;
33.. SSiiggnnaalleerr uunnee aannoommaalliiee
Soumis a des contraintes de place, les developpeurs des parties SCSI
de Linux ne maintiennent pas obligatoirement les vieilles versions du
code. Si vous ne tournez pas avec la derniere version du noyau (la
plupart des distributions de Linux, (MCC, SLS, Yggdrasil, etc.)
peuvent avoir jusqu'a une vingtaine de patches de retard sur le
dernier noyau), il y a une forte probabilite pour que vous ne soyez
pas capable de resoudre votre probleme. Avant de signaler une
anomalie, verifiez si elle existe encore avec la toute derniere
version du noyau.
Si apres avoir mis a jour votre noyau et lu entierement ce document,
vous pensez vraiment avoir decouvert un probleme, envoyez par email un
rapport d'anomalie a la liste de diffusion SCSI, ou il aura des
chances d'etre lu par la plupart des personnes ayant participe au
developpement des pilotes SCSI pour Linux.
Mettez dans votre rapport d'anomalie le maximum d'information sur
votre configuration materielle, le texte exact des messages que Linux
affiche au demarrage, le moment ou l'erreur se produit et a quel
endroit dans les sources l'erreur a ete levee. Referez-vous aux
chapitres ``Capture des messages SCSI'' et ``Localisation de l'origine
d'un panic()''.
Des informations incompletes peuvent conduire a de mauvais diagnostics
ou a un classement vertical de la part du developpeur du pilote, qui
risque d'estimer qu'il a plus important a corriger.
Retenez bien ceci : si nous ne pouvons pas reproduire le probleme et
si vous ne pouvez pas nous dire ce qui ne marche pas, l'anomalie ne
sera jamais corrigee.
33..11.. CCaappttuurree ddeess mmeessssaaggeess SSCCSSII
Si aucun archiveur (logger) de messages ne tourne, il va falloir en
lancer un. Verifiez que le systeme de fichiers /proc est monte :
grep proc /etc/mtab
S'il ne l'est pas, il faut le monter :
mkdir /proc
chmod 755 /proc
mount -t proc /proc /proc
Recopiez ensuite la version du noyau et ses messages dans un fichier
de log :
cat /proc/version > /tmp/log
cat /proc/kmsg >> /tmp/log
Attendez une seconde ou deux (le temps que le ccaatt //pprroocc//kkmmssgg se
termine) puis tapez CTRL-C.
Si un logger de messages tourne, vous allez devoir chercher dans le
fichier de traces adequat (jetez un oeil a /etc/syslog.conf pour
trouver ou se cache ce fichier). Vous pouvez aussi taper la commande
ddmmeessgg.
Si Linux n'est pas lance, formatez une disquette sous DOS. Si votre
distribution monte la disquette en tant que racine (root) plutot qu'un
disque RAM, vous allez devoir formater une disquette et la mettre dans
le lecteur non utilise par la racine (si vous disposez de deux
lecteurs). Si vous n'avez pas de second lecteur, il vous faudra
utiliser l'option de demarrage 'ramdisk'.
Maintenant, demarrez depuis la disquette de boot de votre
distribution, de preference en mode utilisateur simple (single user)
et en demandant a placer la racine (root) dans un disque RAM.
mkdir /tmp/dos
Inserez la disquette dans un lecteur non utilise pour monter la racine
et montez-la :
mount -t msdos /dev/fd0 /tmp/dos
ou
mount -t msdos /dev/fd1 /tmp/dos
Copiez-y ensuite votre fichier de traces :
cp /tmp/log /tmp/dos/log
Demontez votre disquette DOS
umount /tmp/dos
et arretez Linux.
shutdown
Redemarrez sous DOS puis incluez le fichier de traces dans votre mail.
33..22.. LLooccaalliissaattiioonn ddee ll''oorriiggiinnee dd''uunn ppaanniicc(())
Ainsi que d'autres Unix le font, Linux appelle la fonction du noyau
panic() lorsqu'une erreur fatale est detectee. Par contre,
contrairement a d'autres Unix, Linux ne produit pas un fichier de dump
dans la swap. Il ne redemarre pas non plus. Il laisse dans le fichier
de traces des informations interessantes. Par exemple :
Unable to handle kernel NULL pointer dereference at virtual address c0000004
current->tss,cr3 = 00101000, %cr3 = 00101000
*pde = 00102027
*pte = 00000027
Oops: 0000
EIP: 0010:0019c905
EFLAGS: 00010002
eax: 0000000a ebx: 001cd0e8 ecx: 00000006 edx: 000003d5
esi: 001cd0a8 edi: 00000000 ebp: 00000000 esp: 001a18c0
ds: 0018 es: 0018 fs: 002b gs: 002b ss: 0018
Process swapper (pid: 0, process nr: 0, stackpage=001a09c8)
Stack: 0019c5c6 00000000 0019c5b2 00000000 0019c5a5 001cd0a8 00000002 00000000
001cd0e8 001cd0a8 00000000 001cdb38 001cdb00 00000000 001ce284 0019d001
001cd004 0000e800 fbfff000 0019d051 001cd0a8 00000000 001a29f4 00800000
Call Trace: 0019c5c6 0019c5b2 0018c5a5 0019d001 0019d051 00111508 00111502
0011e800 0011154d 00110f63 0010e2b3 0010ef55 0010ddb7
Code: 8b 57 04 52 68 d2 c5 19 00 e8 cd a0 f7 ff 83 c4 20 8b 4f 04
Aiee, killing interrupt handler
kfree of non-kmalloced memory: 001a29c0, next= 00000000, order=0
task[0] (swapper) killed: unable to recover
Kernel panic: Trying to free up swapper memory space
In swapper task - not syncing
Prenez la valeur hexadecimale du registre EIP (le compteur de
programme ; ici, en l'occurence, 19c905). Cherchez ensuite dans le
fichier /usr/src/linux/zSystem.map (ou le fichier System.map
correspondant au noyau que vous etes en train d'executer) la plus
grande valeur inferieure a la valeur du registre EIP. Par exemple,
0019a000 T _fix_pointers
0019c700 t _intr_scsi
0019d000 t _NCR53c7x0_intr
indique dans quelle fonction l'erreur fatale s'est produite.
Recompilez ce fichier en ayant autorise les options de debug (vous
pouvez aussi les autoriser a un niveau plus global en editant le
fichier /usr/src/linux/Makefile et en ajoutant l'option "-g" a la
variable CFLAGS).
#
# standard CFLAGS
#
Par exemple :
CFLAGS = -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer -pipe
devient
CFLAGS = -g -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer -pipe
Regenerez le noyau, incrementalement ou en tapant
make clean
make
Rendez le noyau demarrable (bootable) en creant une entree dans le
fichier /etc/lilo.conf :
image = /usr/src/linux/zImage
label = experimental
N'oubliez pas de relancer LILO en tant que root (//ssbbiinn//lliilloo). Vous
pouvez aussi creer une disquette de demarrage :
make zImage
Redemarrez et notez le nouvel EIP pour l'erreur.
Si vous avez installe script, lancez-le ; il va tracer toute votre
session dans un fichier.
Maintenant, lancez
gdb /usr/src/linux/tools/zSystem
et tapez
info line *<votre EIP>
Par exemple,
info line *0x19c905
GDB devrait repondre quelque chose du genre
(gdb) info line *0x19c905
Line 2855 of "53c7,8xx.c" starts at address 0x19c905 <intr_scsi+641&>
and ends at 0x19c913 <intr_scsi+655>.
Memorisez cette information. Entrez ensuite
list <numero de ligne>
Par exemple,
(gdb) list 2855
2850 /* printk("scsi%d : target %d lun %d unexpected disconnect\n",
2851 host->host_no, cmd->cmd->target, cmd->cmd->lun); */
2852 printk("host : 0x%x\n", (unsigned) host);
2853 printk("host->host_no : %d\n", host->host_no);
2854 printk("cmd : 0x%x\n", (unsigned) cmd);
2855 printk("cmd->cmd : 0x%x\n", (unsigned) cmd->cmd);
2856 printk("cmd->cmd->target : %d\n", cmd->cmd->target);
2857 if (cmd) {;
2858 abnormal_finished(cmd, DID_ERROR << 16);
2859 }
2860 hostdata->dsp = hostdata->script + hostdata->E_schedule /
2861 sizeof(long);
2862 hostdata->dsp_changed = 1;
2863 /* SCSI PARITY error */
2864 }
2865
2866 if (sstat0_sist0 & SSTAT0_PAR) {
2867 fatal = 1;
2868 if (cmd && cmd->cmd) {
2869 printk("scsi%d : target %d lun %d parity error.\n",
quit vous permet de sortir de GDB.
Sauvegardez egalement cette information, car elle permettra de fournir
le contexte dans lequel l'erreur s'est produite, pour le cas ou les
developpeurs n'auraient pas exactement la meme arborescence.
44.. LLeess mmoodduulleess
Ce chapitre fournit des details specifiques sur le support des modules
chargeables et sur la maniere dont ces modules sont utilises avec le
SCSI.
44..11.. IInnffoorrmmaattiioonnss ggeenneerraalleess
Les modules chargeables permettent a l'utilisateur ou a
l'administrateur du systeme d'etendre les fonctionnalites du noyau en
y chargeant des fichiers objet. L'utilisation la plus courante des
modules est l'ajout de pilotes pour de nouveaux peripheriques ou la
prise en compte de differents types de systemes de fichiers.
L'utilisation des modules pour le SCSI presente plusieurs avantages.
Un de ceux-ci est que le responsable d'un parc important de machines
n'a a gerer qu'un seul noyau pour tout le parc et n'a plus qu'a
charger les modules necessaires machine par machine.
Pour ceux qui ont l'intention de creer une nouvelle distribution, il
est possible de lancer un script depuis la disquette de demarrage qui
va demander a l'utilisateur quels modules sont a charger. Cela permet
de gagner de la memoire (qui serait gaspillee si le noyau contenait
tous les pilotes) et cela reduit le risque que l'auto-detection d'une
carte vienne perturber le fonctionnement d'autres cartes.
Les modules sont parfaits pour les portables, qui ont tendance a etre
moins fournis que leurs grands freres de bureaux. Dans ce cas, un
noyau aussi reduit que possible avec chargement des modules a la
demande est l'ideal. De plus, les modules sont bien adaptes au
mecanisme des cartes PCMCIA, puisqu'ils peuvent etre charges puis
decharges au gre des insertions/retraits des cartes PCMCIA. (Note :
actuellement, les pilotes qlogic et 152x supportent le PCMCIA).
Un dernier avantage des modules est que les developpeurs de pilotes
ont plus de facilite a mettre au point et tester leurs pilotes si
ceux-ci sont sous forme de modules (il n'est plus necessaire de
redemarrer la machine a chaque essai, a condition bien sur que le
pilote ne soit pas bugge au point qu'il ait mis en rideau le PC).
Mais, il y a toujours un mais, les modules ont aussi leurs
limitations. Si votre partition racine (root) est sur un peripherique
SCSI, vous ne serez pas capable d'utiliser les versions 'modularisees'
des pilotes SCSI necessaires a l'acces a votre disque. Cela est du au
fait que le noyau doit etre capable de monter la partition racine
avant de pouvoir charger le moindre module depuis le disque. Cela
etant, des reflexions sont en cours pour modifier le chargeur et le
noyau de maniere a ce que celui-ci soit capable de precharger des
modules avant d'essayer de monter la partition racine. Il est fort
probable qu'a l'avenir la limitation actuelle ne soit plus de mise.
44..22.. LLee ssuuppppoorrtt ddeess mmoodduulleess ddaannss lleess nnooyyaauuxx 11..22..NN
Les modules noyau pour le SCSI sont partiellement supportes dans la
serie 1.2.N du noyau. Alors qu'aucun des pilotes de haut niveau
(disque, bande, etc.) ne peut etre modularise, la plupart des pilotes
de bas niveau peuvent etre charges et decharges a la demande (par
exemple les 1542 et 1522). Chaque fois qu'un pilote de bas niveau est
charge, il commence par rechercher les cartes qu'il peut gerer.
Ensuite, pour chaque carte detectee, le bus SCSI est scrute et des
structures de donnees internes sont renseignees, si bien qu'il sera
possible d'utiliser tous les peripheriques attaches aux cartes
reconnues.
Lorsque vous en avez termine avec un pilote de bas niveau, celui-ci
peut etre decharge. Gardez a l'esprit que l'utilisation d'un pilote se
fait au travers des montages, des fichiers ouverts, etc. Si vous
essayez de decharger un module en cours d'utilisation (utilitaire
rrmmmmoodd), le noyau va refuser le retrait du pilote. Lorsqu'un pilote est
decharge, toutes ses structures internes sont liberees, si bien que le
systeme retourne dans l'etat ou il se trouvait avant l'insertion du
module. Vous pourrez recharger le pilote plus tard si vous le desirez.
44..33.. LLee ssuuppppoorrtt ddeess mmoodduulleess ddaannss lleess nnooyyaauuxx 11..33..NN
Le code SCSI a ete completement modularise dans les noyaux 1.3.N. Vous
pouvez donc demarrer avec un noyau n'ayant aucun support SCSI, les
modules se chargeant par la suite, jusqu'a ce que tous les
peripheriques SCSI possibles soient accessibles.
Si vous le voulez, vous pouvez integrer dans le noyau une certaine
partie du code SCSI et charger le reste plus tard sous forme de
modules. Tout cela depend entierement de vous.
Si vous demarrez avec un noyau qui n'a aucun support SCSI, vous devrez
commencer par charger la base SCSI. La base se trouve dans un module
nomme "scsi_mod" ; elle est indispensable a la gestion du SCSI. Elle
ne contient par contre aucun pilote specifique de bas niveau et de ce
fait ne scrutera ni carte, ni peripherique. Cette base n'activera pas
non plus de pilotes de disques SCSI, de lecteurs de bandes, etc. Si
vous avez repondu 'Y' a la question CCOONNFFIIGG__SSCCSSII au moment de
construire le noyau, vous n'aurez pas besoin de charger ce module.
Maintenant que "scsi_mod" est present dans le noyau, vous pouvez
ajouter les modules plus ou moins dans n'importe quel ordre pour
ouvrir l'acces a vos peripheriques. Des compteurs d'utilisation sont
presents pour eviter de retirer un pilote occupe. Si vous utilisez
rmmod, vous en serez averti par un message d'erreur.
Les pilotes de haut niveau pour les disques, les lecteurs de CDROM,
les lecteurs de bandes et le support SCSI generique se trouvent
respectivement dans les modules "sd_mod", "sr_mod", "st" et "sg".
Lorsque vous chargez un pilote de haut niveau, tous les peripheriques
detectes (par les pilotes de bas niveau) et geres par ce pilote sont
automatiquement actives.
L'utilisation des modules avec des pilotes de bas niveau a ete decrite
dans le chapitre ``Le support des modules dans les noyaux 1.2.N''.
Lorsqu'un pilote de bas niveau est charge, le bus est scrute et chaque
peripherique reconnu est ensuite eventuellement pris en charge par un
pilote de plus haut niveau (voir paragraphe precedent).
55.. CCaarrtteess dd''iinntteerrffaaccee
Ce chapitre donne des informations specifiques sur les diverses cartes
d'interface SCSI qui sont supportees d'une maniere ou d'une autre par
Linux.
55..11.. MMaatteerriieell ssuuppppoorrttee eett nnoonn ssuuppppoorrttee
Les pilotes de la distribution du noyau :
Adaptec 152x, Adaptec 154x (les cartes DTC 329x fonctionnent
theoriquement, mais ne sont pas explicitement gerees), Adaptec 174x,
Adaptec 274x/284x (le support pour la 294x necessite une version plus
recente du pilote), BusLogic MultiMaster Host Adapters, les cartes
compatibles avec les protocoles EATA-DMA et EATA-PIO (DPT PM2001,
PM2011, PM2012A, PM2012B, PM2021, PM2022, PM2024, PM2122, PM2124,
PM2322, PM2041, PM2042, PM2044, PM2142, PM2144, PM2322, PM3021,
PM3122, PM3222, PM3224, PM3334, quelques cartes de NEC, AT&T, SNI,
AST, Olivetti et Alphatronix), Future Domain 850, 885, 950 et d'autres
cartes de cette serie (sauf les cartes 840, 841, 880 et 881 a moins
que vous n'appliquiez le patch adequat), Future Domain 16x0 avec les
composants TMC-1800, TMC-18C30 ou TMC-18C50, NCR53c8xx, PAS16, les
ports SCSI, Seagate ST0x, les cartes Trantor T128/T130/T228, Ultrastor
14F, 24F et 34F et les Western Digital 7000.
MCA :
Les cartes MCA compatibles avec une des cartes precedemment citees
fonctionnent.
Les pilotes alpha :
Plusieurs pilotes ALPHA sont disponibles a
ftp://tsx-11.mit.edu/pub/linux/ALPHA/scsi
Certains pilotes fonctionnent apres quelques modifications :
NCR53c8x0/7x0:
Un pilote NCR53c8xx a ete developpe mais il ne marche toujours pas avec les
composants NCR53c700, NCR53c700-66, NCR53c710 et NCR53c720. Une liste des
modifications necessaires pour le faire marcher sur chacun de ces composants
est fournie ci-apres, accompagnee d'un resume de la difficulte de chaque patch.
NCR53c720 (facile) - modifications dans la detection du composant, dans la
phase d'initialisation, dans la traduction des adresses des registres '810
vers l'organisation (mapping) des registres '7xx.
NCR53c710 (facile) - modifications dans la detection du composant, dans la
phase d'initialisation, dans la traduction des adresses des registres '810
vers l'organisation (mapping) des registres '7xx, modification des
gestionnaires d'interruption pour traiter l'interruption IID de l'instruction
INTFLY pour l'emuler (Note aux relecteurs (a supprimer dans la version
definitive) je ne suis pas sur d'avoir bien compris ce que voulait dire
l'auteur : change interrupt handlers to treat IID interrupt from INTFLY
instruction to emulate it),
NCR53c700, NCR53c700-66 (tres complique) - modifications dans la detection
des composants, dans la phase d'initialisation. Modification du code du NCR
pour ne pas utiliser DSA, modification du code de la gestion des commutations
de contextes.
Les cartes SCSI qui ne marcheront pas :
Tous les adapteurs parallele->SCSI, les cartes Rancho SCSI et les
cartes Grass Roots SCSI. Les cartes BusLogic FlashPoint, telles que
les BT-930/932/950, ne sont actuellement pas supportees.
Les cartes SCSI qui ne marcheront JAMAIS :
Les cartes non compatibles Adaptec, les cartes non NCR53c8xx DTC (y
compris les 3270 et les 3280).
Les cartes CMD SCSI.
L'obtention d'informations techniques sur ces cartes necessite la
signature d'un accord de confidentialite (NDA : non-disclosure
agreement) avec DTC/CMD. En consequence, distribuer un pilote pour
Linux est impossible car se conformer a cet accord signifie qu'il
n'est pas possible de fournir les sources, ce qui est en violation de
la GPL. Inversement, se conformer a la GPL signifie que les sources
doivent etre rendus publics, ce qui est en conflit avec la NDA.
Si vous voulez utiliser Linux sur du materiel non supporte, deux
options s'offrent a vous :
1. ecrire vous-meme le pilote (Eric Youngdale et moi-meme repondons
volontiers aux questions techniques sur les pilotes SCSI pour
Linux),
2. faire developper le pilote (les tarifs habituels des sous-traitants
rendent cette solution non viable pour une utilisation
personnelle),
55..11..11.. CCaarrtteess ccoonnttrroolleeuurr mmuullttiipplleess
Avec certaines cartes (voir ``Guide de l'acheteur : comparaison des
fonctionnalites''), vous pouvez utiliser plusieurs controleurs du meme
type sur la meme machine. Dans ce cas, la plus petite adresse SCSI va
etre referencee par le noyau comme scsi0, la suivante comme scsi1,
etc.
Dans tous les cas, il est possible d'utiliser des controleurs de types
differents, sous reserve que leurs adresses n'entrent pas en conflit.
Les cartes controleur sont scrutees dans l'ordre suivant (defini dans
le tableau builtin_scsi_hosts[] du fichier drivers/scsi/hosts.c) :
BusLogic, Ultrastor 14/34F, Ultrastor 14F, Adaptec
151x/152x, Adaptec 154x, Adaptec 174x, AIC7XXX, AM53C974,
Future Domain 16x0, Always IN2000, Generic NCR5380, QLOGIC,
PAS16, Seagate, Trantor T128/T130, NCR53c8xx, EATA-DMA,
WD7000 et le pilote de mise au point.
Dans la plupart des cas (c'est-a-dire si vous n'utilisez pas en meme
temps une BusLogic et une Adaptec), le tableau precedent peut etre
change pour definir un ordre qui vous convient mieux (de maniere a
garder le meme ordre pour les peripheriques de votre ancienne carte
lorsque vous ajoutez une nouvelle carte dans votre systeme); il vous
suffit de deplacer les entrees du tableau.
55..22.. PPrroobblleemmeess hhaabbiittuueellss
55..22..11.. TTiimmeeoouuttss SSCCSSII
Verifiez que les interruptions sont bien autorisees et qu'il n'y a pas
de conflits d'IRQ, de DMA ou d'adresses avec d'autres cartes.
55..22..22.. EEcchheecc ddee ll''aauuttoo--ddeetteeccttiioonn ddeess ccaarrtteess qquuii ss''aappppuuiieenntt ssuurr llee
BBIIOOSS
Si votre controleur SCSI est un des suivants :
Adaptec 152x, Adaptec 151x, Adaptec AIC-6260, Adaptec
AIC-6360, Future Domain 1680, Future Domain TMC-950, Future
Domain TMC-8xx, Trantor T128, Trantor T128F, Trantor T228F,
Seagate ST01, Seagate ST02 ou un Western Digital 7000
et qu'il n'est pas detecte au demarrage (vous avez eu par exemple :
scsi : 0 hosts
ou encore
scsi%d : type
au demarrage), vous avez certainement un probleme avec la routine
d'auto-detection qui ne reconnait pas votre carte controleur.
L'auto-detection echoue pour les pilotes qui s'appuient sur le BIOS si
celui-ci est desactive. Verifiez plutot deux fois qu'une que votre
BIOS est active et qu'il n'entre pas en conflit avec celui d'un autre
peripherique.
L'auto-detection peut egalement echouer si la "signature" de la carte
et son adresse de BIOS ne font pas partie de la liste des cartes
connues.
Si le BIOS est installe, redemarrez sous DOS et utilisez DEBUG pour
trouver la signature de votre carte.
Par exemple, si votre carte se trouve a l'adresse 0xc8000, redemarrez
sous DOS puis tapez :
debug
d c800:0
q
Envoyez ensuite un message a la liste de diffusion SCSI avec le
message ASCII obtenu, sa longueur et son deplacement par rapport a
l'adresse de base (par exemple 0xc8000). Attention : le texte exact
est necessaire et vous aurez certainement a fournir une version ASCII
et une autre binaire du message.
Si aucun BIOS n'est installe et si vous utilisez une Adaptec 152x, une
Trantor T128 ou un controleur Seagate, vous pouvez utiliser la ligne
de commande (LILO) ou bien surcharger des variables au moment de la
compilation de maniere a ce que l'auto-detection fonctionne malgre
tout.
Reportez-vous a la section appropriee de votre carte SCSI, ainsi qu'au
chapitre ``Dysfonctionnement generalise''.
55..22..33.. PPaannnneess ddee ccoonnttrroolleeuurrss uuttiilliissaanntt ddeess EE//SS mmaappppeeeess eenn mmeemmooiirree
(Les cartes Trantor T128 et Seagate sont de telles cartes. Les cartes
Adaptec, Generic NCR5380, PAS16 et Ultrastor n'en sont pas)
Les pannes sont souvent dues a un 'cache' des ports d'entrees/sorties
incorrect. L'espace d'adressage de la carte doit etre indique comme
'non cachable' dans les parametres de la XCMOS. Si ce n'est pas
possible, il vous faudra completement interdire le 'cache'.
Si vous avez manuellement specifie l'adresse de la carte, souvenez-
vous que Linux a besoin de la veritable adresse de la carte et non pas
de l'adresse segmentee (par segments de 16 octets) a laquelle la
documentation pourrait faire reference.
Ainsi, 0xc8000 est une adresse valide, tandis que 0xc800 ne marche pas
et risque de causer des problemes d'integrite de la memoire du noyau.
55..22..44.. kkeerrnneell ppaanniicc :: ccaannnnoott mmoouunntt rroooott ddeevviiccee"" aauu ddeemmaarrrraaggee aavveecc uunnee
ddiissqquueettttee ddee ddeemmaarrrraaggee ccoommppoorrttaanntt uunn ppiilloottee AALLPPHHAA
Vous allez devoir editer l'image binaire du noyau (avant ou apres
l'avoir ecrite sur la disquette) pour modifier quelques champs de deux
octets (en petit indien -- little endian), afin de garantir qu'il
fonctionnera sur votre systeme.
1. le peripherique de pagination (swap) par defaut. Il se trouve a
l'offset 502 et doit valoir 0x00 0x00
2. la taille du disque memoire (RAM disk) se trouve a l'offset 504.
Elle doit valoir la taille de la disquette de demarrage, en Ko. Par
exemple, pour une disquette 5,25", on trouvera 1200. Pour une
disquette 3,5", on aura 1440.
C'est a dire que les octets doivent etre
3,5" : 0xA0 0x05
5,25" : 0xB0 0x04
3. l'identificateur du peripherique de la racine (root device) se
trouve a la position 508 et doit valoir 0x00 0x00 (qui represente
le peripherique de demarrage).
Recopiez le fichier sur la disquette par dddd ou rraawwrriittee. Inserez
ensuite la disquette dans un lecteur puis relancez. Attendez qu'il
vous soit demande d'inserer la disquette racine (root disk) puis
mettez celle fournie avec votre distribution.
55..22..55.. IInnssttaallllaattiioonn dd''uunn ppiilloottee nnoonn iinncclluuss ddaannss llee nnooyyaauu ddee llaa ddiiss--
ttrriibbuuttiioonn
Vous devez commencer avec la version du noyau utilisee par le
developpeur du pilote. Il arrive qu'on trouve la version en question
dans la documentation incluse avec le pilote.
Des versions recentes du noyau sont presentes a l'adresse
nic.funet.fi:/pub/OS/Linux/PEOPLE/Linus
dans les fichiers linux-version.tar.gz
On peut egalement les trouver sur divers sites et autres miroirs (dont
tsx-11.mit.edu).
cd /usr/src
Supprimez l'ancienne arborescence des sources de Linux ou faites-en
une copie :
mv linux linux-old
Desarchivez le fichier
gunzip < linux-0.99.12.tar.gz | tar xvfp -
(pour la version 0.99.12 ici). Appliquez les patches. Habituellement,
les patches sont relatifs a un des repertoires de l'arborescence. En
recherchant la chaine '---' dans le fichier de patch, vous pouvez
savoir a partir d'ou l'appliquer. Ainsi, des lignes
--- ./kernel/blk_drv/scsi/Makefile
--- ./config.in Wed Sep 1 16:19:33 1993
vous pouvez deduire que les fichiers a modifier sont relatifs a
/usr/src/linux.
Desarchivez les sources du pilote a l'endroit approprie :
tar tfv patches.tar
vous fournira d'abord une liste des fichiers. Deplacez quelques
fichiers si necessaire (les sources des pilotes SCSI doivent se
trouver dans le repertoire /usr/src/linux/kernel/drivers/scsi).
Vous pouvez ensuite aller dans le repertoire racine du patch et taper
:
patch -p0 < patch_file
Vous pouvez egalement demander a 'patch' d'eliminer les chemins
initiaux des noms des fichiers a modifier. Ainsi, si les fichiers
commencent par
--- linux-new/kernel/blk_drv/scsi/Makefile
et que vous voulez appliquer le patch directement depuis
/usr/src/linux, vous pouvez faire les operations suivantes :
cd /usr/src/linux
patch -p1 < patches
pour supprimer le "linux-new" des noms des fichiers.
Une fois les patches appliques, verifiez qu'il n'y a pas eu de rejets
(un fichier de rejet a la meme nom que le fichier a modifier, un
suffixe # y etant ajoute).
find /usr/src/linux/ -name "*#" -print
Si vous trouvez des fichiers de rejet, editez-les. Parfois, seules les
chaines d'identification RCS seront differentes. Cela ne posera alors
pas de probleme. Dans d'autres cas, il vous faudra appliquer
d'importantes parties du patch a la main. Il n'est pas dans l'optique
de ce document de decrire les fichiers de differences ou l'utilisation
de patch.
Referez-vous egalement a la section ``Configurer et regenerer le
noyau''.
55..22..66.. IInnssttaallllaattiioonn dd''uunn ppiilloottee qquuii nn''aa ppaass ddee ppaattcchheess
L'auteur d'un pilote ne fournit parfois pas de patches avec les .c et
.h qui forment le pilote. Il se peut aussi que les patches soient
faits pour une vieille version du noyau et qu'ils risquent de ne pas
passer avec le noyau courant.
1. copiez les .c et les .h dans /usr/src/linux/drivers/scsi
2. ajoutez l'option de configuration
Editez /usr/src/linux/config.in puis ajoutez une ligne (une
variable de configuration booleenne pour votre pilote) dans le
chapitre
*
* SCSI low-level drivers
*
Par exemple
bool 'Always IN2000 SCSI support' CONFIG_SCSI_IN2000 y
3. ajoutez les entrees dans le Makefile
Editez /usr/src/linux/drivers/scsi/Makefile et ajoutez une entree
similaire a
ifdef CONFIG_SCSI_IN2000
SCSI_OBS := $(SCSI_OBJS) in2000.o
SCSI_SRCS := $(SCSI_SRCS) in2000.c
endif
juste avant la ligne
scsi.a: $(SCSI_OBJS)
du makefile. Ici, le fichier .c est votre fichier source et le .o est
le fichier objet genere a partir de votre fichier source (le .c est
remplace par le .o).
4. ajoutez les points d'entree
Editez /usr/src/linux/drivers/scsi/hosts.c puis ajoutez un #include
pour le fichier d'entete, mis en conditionnel par la constante que
vous venez de definir dans le fichier de configuration. Par
exemple, apres
#ifdef CONFIG_SCSI_GENERIC_NCR5380
#include "g_NCR5380.h"
#endif
vous pouvez ajouter
#ifdef CONFIG_SCSI_IN2000
#include "in2000.h"
#endif
Vous devez egalement ajouter l'entree pour le Scsi_Host_Template dans
le tableau scsi_hosts[]. Jetez un oeil dans le fichier .h et vous
devriez y trouver un #define qui ressemble a :
#define IN2000 {"Always IN2000", in2000_detect, \
in2000_info, in2000_command, \
in2000_queuecommand, \
in2000_abort, \
in2000_reset, \
NULL, \
in2000_biosparam, \
1, 7, IN2000_SG, 1, 0, 0}
Ajoutez la constante IN2000 dans le tableau scsi_hosts[], rendue con-
ditionnelle par le symbole que vous venez de definir dans le fichier
de configuration.
Par exemple, apres
#ifdef CONFIG_SCSI_GENERIC_NCR5380
GENERIC_NCR5380,
#endif
vous pouvez ajouter
#ifdef CONFIG_SCSI_IN2000
IN2000,
#endif
Referez-vous au chapitre ``Configurer et regenerer le noyau''.
55..22..77.. PPaannnnee dd''uunnee ccaarrttee PPCCII ddaannss uunn ssyysstteemmee CCoommppaaqq
Un certain nombre de machines Compaq logent les extensions 32-bit du
BIOS permettant de tester les controleurs PCI dans une zone memoire
inaccessible au noyau Linux (cela est du a l'organisation de la
memoire). Si Linux est incapable de detecter une carte PCI SCSI connue
comme etant supportee et si le noyau affiche un message du genre
pcibios_init: entry in high memory, unable to access
allez chercher
ftp://ftp.compaq.com/pub/softpaq/Software-Solutions/sp0921.zip
C'est un programme auto-extractible qui vous permettra de reloger le
code du BIOS32.
55..22..88.. UUnn ssyysstteemmee SSCCSSII aavveecc ddeess ccoonnttrroolleeuurrss PPCCII ssee bbllooqquuee aapprreess llee
mmeessssaaggee %%dd HHoossttss
Certains systemes PCI ont un BIOS defectueux qui masque les
interruptions et qui n'arrive pas a les demasquer avant de rendre la
main a l'appelant. Le patch suivant corrige ce probleme :
--- bios32.c.orig Mon Nov 13 22:35:31 1995
+++ bios32.c Thu Jan 18 00:15:09 1996
@@ -56,6 +56,7 @@
#include <linux/pci.h>
#include <asm/segment.h>
+#include <asm/system.h>
#define PCIBIOS_PCI_FUNCTION_ID 0xb1XX
#define PCIBIOS_PCI_BIOS_PRESENT 0xb101
@@ -125,7 +126,9 @@
unsigned long address; /* %ebx */
unsigned long length; /* %ecx */
unsigned long entry; /* %edx */
+ unsigned long flags;
+ save_flags(flags);
__asm__("lcall (%%edi)"
: "=a" (return_code),
"=b" (address),
@@ -134,6 +137,7 @@
: "0" (service),
"1" (0),
"D" (&bios32_indirect));
+ restore_flags(flags);
switch (return_code) {
case 0:
@@ -161,11 +165,13 @@
unsigned char present_status;
unsigned char major_revision;
unsigned char minor_revision;
+ unsigned long flags;
int pack;
if ((pcibios_entry = bios32_service(PCI_SERVICE))) {
pci_indirect.address = pcibios_entry;
+ save_flags(flags);
__asm__("lcall (%%edi)\n\t"
"jc 1f\n\t"
"xor %%ah, %%ah\n"
@@ -176,6 +182,7 @@
: "1" (PCIBIOS_PCI_BIOS_PRESENT),
"D" (&pci_indirect)
: "bx", "cx");
+ restore_flags(flags);
present_status = (pack >> 16) & 0xff;
major_revision = (pack >> 8) & 0xff;
@@ -210,7 +217,9 @@
{
unsigned long bx;
unsigned long ret;
+ unsigned long flags;
+ save_flags(flags);
__asm__ ("lcall (%%edi)\n\t"
"jc 1f\n\t"
"xor %%ah, %%ah\n"
@@ -221,6 +230,7 @@
"c" (class_code),
"S" ((int) index),
"D" (&pci_indirect));
+ restore_flags(flags);
*bus = (bx >> 8) & 0xff;
*device_fn = bx & 0xff;
return (int) (ret & 0xff00) >> 8;
@@ -232,7 +242,9 @@
{
unsigned short bx;
unsigned short ret;
+ unsigned long flags;
+ save_flags(flags);
__asm__("lcall (%%edi)\n\t"
"jc 1f\n\t"
"xor %%ah, %%ah\n"
@@ -244,6 +256,7 @@
"d" (vendor),
"S" ((int) index),
"D" (&pci_indirect));
+ restore_flags(flags);
*bus = (bx >> 8) & 0xff;
*device_fn = bx & 0xff;
return (int) (ret & 0xff00) >> 8;
@@ -254,7 +267,9 @@
{
unsigned long ret;
unsigned long bx = (bus << 8) | device_fn;
+ unsigned long flags;
+ save_flags (flags);
__asm__("lcall (%%esi)\n\t"
"jc 1f\n\t"
"xor %%ah, %%ah\n"
@@ -273,7 +288,9 @@
{
unsigned long ret;
unsigned long bx = (bus << 8) | device_fn;
+ unsigned long flags;
+ save_flags(flags);
__asm__("lcall (%%esi)\n\t"
"jc 1f\n\t"
"xor %%ah, %%ah\n"
@@ -292,7 +309,9 @@
{
unsigned long ret;
unsigned long bx = (bus << 8) | device_fn;
+ unsigned long flags;
+ save_flags(flags);
__asm__("lcall (%%esi)\n\t"
"jc 1f\n\t"
"xor %%ah, %%ah\n"
@@ -303,6 +322,7 @@
"b" (bx),
"D" ((long) where),
"S" (&pci_indirect));
+ restore_flags(flags);
return (int) (ret & 0xff00) >> 8;
}
@@ -311,7 +331,9 @@
{
unsigned long ret;
unsigned long bx = (bus << 8) | device_fn;
+ unsigned long flags;
+ save_flags(flags);
__asm__("lcall (%%esi)\n\t"
"jc 1f\n\t"
"xor %%ah, %%ah\n"
@@ -322,6 +344,7 @@
"b" (bx),
"D" ((long) where),
"S" (&pci_indirect));
+ restore_flags(flags);
return (int) (ret & 0xff00) >> 8;
}
@@ -330,7 +353,9 @@
{
unsigned long ret;
unsigned long bx = (bus << 8) | device_fn;
+ unsigned long flags;
+ save_flags(flags);
__asm__("lcall (%%esi)\n\t"
"jc 1f\n\t"
"xor %%ah, %%ah\n"
@@ -341,6 +366,7 @@
"b" (bx),
"D" ((long) where),
"S" (&pci_indirect));
+ restore_flags(flags);
return (int) (ret & 0xff00) >> 8;
}
@@ -349,7 +375,9 @@
{
unsigned long ret;
unsigned long bx = (bus << 8) | device_fn;
+ unsigned long flags;
+ save_flags(flags);
__asm__("lcall (%%esi)\n\t"
"jc 1f\n\t"
"xor %%ah, %%ah\n"
@@ -360,6 +388,7 @@
"b" (bx),
"D" ((long) where),
"S" (&pci_indirect));
+ restore_flags(flags);
return (int) (ret & 0xff00) >> 8;
}
55..33.. AAddaapptteecc 115522xx,, 115511xx,, 11550055,, 228822xx,, SSoouunndd BBllaasstteerr 1166 SSCCSSII,, SSCCSSII PPrroo,,
GGiiggaabbyyttee eett aauuttrreess pprroodduuiittss bbaasseess ssuurr ll''AAIICC 66226600//66336600 ((ssttaannddaarrdd))
Configurations supportees :
adresses du BIOS : 0xd8000, 0xdc000, 0xd0000, 0xd4000, 0xc8000, 0xcc000,
0xe0000, 0xe4000.
Ports : 0x140, 0x340
IRQs : 9, 10, 11, 12
DMA : non utilise
E/S : port mappe
Auto-detection :
Cela marche avec de nombreuses cartes qui ont un BIOS installe. Toutes les autres cartes,
y compris les Adaptec 1510 et les Sound Blaster 16 SCSI, necessitent d'utiliser une ligne
de commande du noyau ou une surcharge au moment de la compilation.
Surcharge de l'auto-detection :
Au moment de la compilation :
Definissez PORTBASE, IRQ, SCSI_ID, RECONNECT, PARITE de maniere adequate (voir Definitions)
Ligne de commande du noyau :
aha152x=<PORTBASE>[,<IRQ>[,<SCSI-ID>[,<RECONNECT>[,<PARITE>]]]]
Le champ SCSI-ID est l'identificateur SCSI de la carte controleur.
Aucun autre peripherique connecte sur ce bus SCSI ne doit avoir ce
numero. Habituellement, il est fixe a 7.
Pour forcer l'auto-detection a l'adresse 0x340, l'IRQ 11, SCSI-ID 7 et
autoriser la connexion/deconnexion, vous devez utiliser la ligne de
commande suivante :
aha152x=0x340,11,7,1
Problemes prehistoriques, resolus en mettant a jour le noyau :
1. le pilote n'arrive pas a gerer les cartes VLB. Il y avait un
probleme de temporisation avec les noyaux anterieurs a la version
1.0.5.
Les constantes :
AUTOCONF : utiliser la configuration reportee par le controleur (uniquement pour les 152x)
IRQ : surcharge du niveau d'interruption (9,10,11 ou 12) (11 par defaut)
SCSI_ID : surcharge du SCSI ID de l'AIC-6260 (0-7) (7 par defaut)
RECONNECT : surcharge l'indicateur de deconnexion/reselection (une valeur non nulle
signifie 'autoriser', une valeur nulle signifie 'interdire')
DONT_SNARF : n'enregistre pas les ports (pl12 et inferieurs)
SKIP_BIOSTEST : ne teste pas la signature du BIOS (pour la AHA-1510 ou en cas de BIOS debraye)
PORTBASE : force le port de base. Il ne faut pas essayer l'auto-detection
55..44.. AAddaapptteecc 115544xx,, AAMMII FFaassttDDiisskk VVLLBB,, DDTTCC 332299xx ((ssttaannddaarrdd))
Configurations supportees :
Ports : 0x330 et 0x334
IRQs : 9, 10, 11, 12, 14, 15
Canaux DMA : 5, 6, 7
E/S : port mappe, controle de bus (bus master)
Auto-detection :
detecte uniquement les cartes en 0x330 et 0x334.
Surcharge de l'auto-detection :
aha1542=<PORTBASE>[,<BUSON>,<BUSOFF>[,<VITESSEDMA>]]
Notes :
1. BusLogic produit une serie de cartes logiciellement compatibles
avec les Adaptec 1542. Ces cartes existent en ISA, VLB, EISA et
plusieurs varietes en PCI.
2. Des cartes sans suffixe et les premieres cartes a suffixe 'A'
n'acceptent pas le 'decoupage' / 'reassemblage' (scatter/gather),
et, de ce fait, ne fonctionnent pas. Moyennant une redefinition du
mot 'fonctionnement', on peut les faire marcher a condition de
mettre AAHHAA11554422__SSCCAATTTTEERR a 0 dans le fichier drivers/scsi/aha1542.h.
Problemes prehistoriques, resolus en mettant a jour le noyau :
1. Les versions du noyau anterieures a la version 0.99.10 ne gerent
pas la version 'C' des controleurs.
2. Les versions du noyau anterieures a la version 0.99.14k ne gerent
pas les options suivantes pour les cartes version 'C' :
+o support du BIOS pour le mapping etendu des disques > 1G
+o support du BIOS pour plus de 2 disques
+o support du BIOS pour la scrutation automatique du bus SCSI
3. Les versions du noyau anterieures a la version 0.99.15e ne gerent
pas les versions 'C' avec support du BIOS pour plus de 2 disques
active et le support du BIOS pour le mapping etendu des disques >
1G desactive
4. Les versions du noyau anterieures a la version 0.99.14u ne
supportent les versions 'CF' de ce type de cartes
5. Il existait un sequencement critique (race condition) dans les
versions du noyau anterieures a la version 1.0.5 lorsque plusieurs
peripheriques etaient accedes simultanement.
Problemes frequents :
1. erreurs 'non attendues' avec des cartes 154xC ou 154xCF.
Certaines cartes 154xC parmi les premiers exemplaires generaient un
signal a haute frequence sur un des signaux SCSI, provoquant des
reflexions dans des cables de mauvaise impedance.
Les nouvelles cartes ne sont pas vraiment meilleures et sont
pointilleuses sur la qualite des cables et sur la sensibilite des
terminaisons.
Referez-vous aux chapitres Problemes frequents ``#2'' et ``#3'',
``Problemes habituels'', ou ``Dysfonctionnement generalise''.
2. erreurs 'non attendues' avec des cartes 154xC ou 154x lorsqu'a la
fois des peripheriques internes et externes sont connectes.
C'est probablement un probleme de terminaison. Afin de pouvoir
utiliser l'option logicielle permettant de desactiver la
terminaison interne de la carte, vous devez positionner le cavalier
1 sur OFF.
Referez-vous aux chapitres Problemes frequents ``#1'' et ``#3'',
``Problemes habituels'', ou ``Dysfonctionnement generalise''.
3. le sous-systeme SCSI se bloque completement.
Dans certains cas, le blocage semble se produire lors de
l'utilisation simultanee de plusieurs peripheriques. Si cela
arrive, contactez le fabricant de ces peripheriques et voyez si une
eventuelle mise a jour du firmware resoudrait le probleme. En
dernier recours, vous pouvez modifier AAHHAA11554422__MMAAIILLBBOOXX a 1 dans le
fichier aha1542.h. Cela va limiter le nombre de commandes presentes
sur le bus SCSI a 1 a la fois. Il se peut que ca resolve le
probleme. Par contre, une fois encore, si vous avez des
peripheriques lents (lecteur de bandes, lecteur de CDROM), ce
contournement risque de ne pas etre une solution utilisable.
Reportez-vous aux chapitres Problemes frequents ``#1'' et ``#2'',
``Problemes habituels'' ou ``Le SCSI se bloque''.
4. Le message "Interrupt received, but no mail" est affiche au
demarrage et vos peripheriques SCSI ne sont pas detectes.
Desactivez les options du BIOS pour la gestion du mapping etendu
pour les disques > 1G, pour la gestion de plus de 2 peripheriques
et pour la scrutation automatique du bus (autoscanning). Ou alors,
passez a une version de Linux 0.99.14k (ou plus recente).
5. Si des erreurs de temporisation infinie apparaissent sur des cartes
version 'C', entrez dans le programme de configuration Adaptec puis
autorisez la negociation synchrone.
6. Linux 1.2.x affiche le message
"Unable to determine Adaptec DMA priority. Disabling board."
Cela est du a un conflit sur certains systemes avec un pilote
BusLogic obsolete. Vous pouvez soit regenerer votre noyau sans ce
pilote, soit lui fournir une option sur la ligne de commande lui
indiquant de scruter une adresse autre que celle de votre
controleur. Par exemple, si votre carte Adaptec repond a l'adresse
0x334 et qu'il n'y a aucune autre carte en 0x330, utilisez la ligne
de commande suivante :
buslogic=0x330
7. Le systeme se bloque lors d'acces simultanes a plusieurs
peripheriques sur des cartes 1542C ou 1540C avec la deconnexion
activee.
Quelques versions du firmware des Adaptec avaient des erreurs. Une
mise a jour avec la version du BIOS v2.11 est censee corriger ce
probleme.
55..55.. AAddaapptteecc 117744xx
Configurations supportees :
Emplacements : 1-8
Ports : non significatif (carte EISA)
IRQs : 9, 10, 11, 12, 14, 15
Canaux DMA : non significatif (carte EISA)
E/S : port mappe, controle de bus
Auto-detection :
fonctionne avec toutes les configurations gerees
Surcharge de l'auto-detection :
aucune
Remarque :
1. Cette carte n'est plus fabriquee par Adaptec.
Problemes courants :
1. Si le pilote de l'Adaptec 1740 affiche le message "aha1740: Board
detected, but EBCNTRL = %x, so disabled it."
votre carte a ete desactivee parce qu'elle ne tournait pas en mode
etendu (enhanced mode). Les cartes qui fonctionnent en mode 1542
standard ne sont pas gerees.
55..66.. AAddaapptteecc 227744xx,, 228844xx ((ssttaannddaarrdd)) 229944xx ((AALLPPHHAA))
Une nouvelle version qui gere egalement les cartes Adaptec 294x est
disponible a l'adresse
ftp://ftp.ims.com/pub/Linux/aic7xxx
Configurations supportees :
274x 284x 294x
Emplacements EISA : 1-12 N/A N/A
Ports : N/A TOUS TOUS
IRQs : ALL TOUTES TOUTES
Canaux DMA : N/A TOUS N/A
E/S : port mappe, controle de bus
Surcharge de l'auto-detection :
Ligne de commande du noyau :
aha274x=extended
(pour forcer le mapping etendu)
Remarques :
1. Le BIOS doit etre active
2. Le canal B des cartes 2742AT est ignore
3. CONFIG_PCI (lors de la generation du noyau) doit etre positionnee
si vous utilisez une carte PCI.
55..77.. AAllwwaayyss IINN22000000 ((ssttaannddaarrdd))
Configurations supportees :
Ports : 0x100, 0x110, 0x200, 0x220
IRQs : 10, 11, 14, 15
DMA : non utilise
E/S : port mappe
Auto-detection :
le BIOS n'est pas necessaire
Surcharge de l'auto-detection :
aucune
Problemes courants :
1. un probleme connu concerne les systemes avec des disques IDE et la
pagination (swapping).
55..88.. CCaarrtteess ccoonnttrroolleeuurrss mmuullttii--mmaaiittrreess BBuussLLooggiicc
(cette section est Copyright 1995 par Leonard N. Zubkoff
<
[email protected]>) (le fichier README.BusLogic constitue une
documentation plus complete du pilote BusLogic ; lisez-le)
Pilote SCSI BusLogic Multi-Maitres pour Linux
Version 1.2.2 pour Linux 1.2.13
Version 1.3.2 pour Linux 1.3.88
ftp://ftp.dandelion.com/BusLogic-1.2.2.tar.gz
ftp://ftp.dandelion.com/BusLogic-1.3.2.tar.gz
16 Avril 1996
Leonard N. Zubkoff
Dandelion Digital
[email protected]
BusLogic Inc. concoit et fabrique un ensemble de controleurs SCSI de hautes
performances, qui partagent une interface de programmation commune pour diverses
architectures de bus, par le biais de leur technologie ASIC Multi-Maitres (Multi-
Master ASIC). Ce pilote gere tous les controleurs BusLogic Multi-Maitres actuels,
et devrait gerer toutes les cartes Multi-Maitres a venir avec peu (voire aucune) de
modifications. Les controleurs bases sur la nouvelle architecture FlashPoint ne
sont pas geres par ce pilote ; reportez-vous au fichier README.FlashPoint pour la
marche a suivre pour passer d'une carte FlashPoint LT non geree a une carte BT-948
supportee.
Mes buts principaux lorsque j'ai ecrit ce pilote BusLogic completement nouveau pour
Linux etaient d'exploiter les performances maximales que les controleurs SCSI Bus-
Logic et les peripheriques SCSI modernes sont capables d'atteindre et de fournir
un pilote extremement fiable sur lequel des applications critiques puissent s'appu-
yer. Tout peut etre configure sur la ligne de commande du noyau, des performances
jusqu'aux detections d'erreurs. Cela permet a chaque installation d'ajuster les pa-
rametres de performance et de gestion des erreurs aux besoins locaux.
BusLogic est une compagnie avec laquelle il a ete tres agreable de travailler, et
je recommande chaleureusement leurs produits a la communaute Linuxienne. En Novem-
bre 1995, j'ai eu l'opportunite de devenir site beta testeur pour leur dernier pro-
duit Multi-Maitres - le controleur SCSI BT-948 PCI Ultra -, puis de nouveau pour le
controleur BT-958 PCI Wide Ultra en Janvier 1996. Cela a ete un benefice reciproque,
car nous avons apporte a BusLogic un environnement de test que leurs propres equi-
pes ne pouvaient pas avoir et la communaute Linuxienne a dispose de controleurs de
hautes performances qui avaient correctement ete testes sur Linux avant meme que
les produits ne soient commercialises. Cette relation avec BusLogic m'a en outre
donne l'occasion d'interagir directement avec leur equipe technique et ainsi de
leur donner connaissance des besoins et des potentialites du monde Linux. Leur in-
teret et leur support sont tres apprecies.
Contrairement a d'autres vendeurs, si vous contactez le support technique de Bus-
Logic et que vous annoncez que vous tournez sous Linux, ils ne vont pas vous retor-
quer que votre utilisation de leur produit n'est pas supportee. Leurs dernieres pu-
blications commerciales mentionnent meme "Les controleurs SCSI BusLogic sont compa-
tibles avec tous les systemes d'exploitation importants, incluant : ... Linux ...".
BusLogic, Inc. se trouve a 4151 Burton Drive, Santa Clara, California, 95054, USA,
et vous pouvez les contacter par telephone au 408/492-9090 ou par fax au 408/492-
1542. BusLogic dispose d'un site Web (
http://www.buslogic.com), d'un site FTP ano-
nyme (ftp.buslogic.com) et d'une BBS au 408/492-1984. Le support technique de Bus-
Logic peut etre joint par courrier electronique a l'adresse
[email protected],
par telephone au 408/654-0760 ou par fax au 408/492-1542. Des renseignements sur
leurs representants en Europe et au Japon sont disponibles sur leur site Web.
LES CONTROLEURS GERES
La liste suivante comporte les controleurs SCSI BusLogic geres a la date de ce
document. Il est recommande qu'une personne se portant acquereur d'une carte
BusLogic non listee dans la table suivante contacte l'auteur de ce document pour
verifier si elle est supportee ou si elle le sera un jour.
Les series "W" :
BT-948 PCI Ultra Fast Terminaison unique SCSI-2
BT-958 PCI Ultra Wide Terminaison unique SCSI-2
BT-958D PCI Ultra Wide Differentielle SCSI-2
Les series "C" :
BT-946C PCI Fast Terminaison unique SCSI-2
BT-956C PCI Fast Wide Terminaison unique SCSI-2
BT-956CD PCI Fast Wide Differentielle SCSI-2
BT-445C VLB Fast Terminaison unique SCSI-2
BT-747C EISA Fast Terminaison unique SCSI-2
BT-757C EISA Fast Wide Terminaison unique SCSI-2
BT-757CD EISA Fast Wide Differentielle SCSI-2
BT-545C ISA Fast Terminaison unique SCSI-2
BT-540CF ISA Fast Terminaison unique SCSI-2
Les series "S":
BT-445S VLB Fast Terminaison unique SCSI-2
BT-747S EISA Fast Terminaison unique SCSI-2
BT-747D EISA Fast Differentielle SCSI-2
BT-757S EISA Fast Wide Terminaison unique SCSI-2
BT-757D EISA Fast Wide Differentielle SCSI-2
BT-545S ISA Fast Terminaison unique SCSI-2
BT-542D ISA Fast Differentielle SCSI-2
BT-742A EISA Terminaison unique SCSI-2 (742A version H)
BT-542B ISA Terminaison unique SCSI-2 (542B version H)
Les series "A" :
BT-742A EISA Terminaison unique SCSI-2 (742A versions A - G)
BT-542B ISA Terminaison unique SCSI-2 (542B versions A - G)
Les controleurs AMI FastDisk, veritables clones BusLogic, sont geres par ce pilote.
REMARQUES SUR L'INSTALLATION DES CARTES BT-948/958/958D
Les controleurs SCSI BT-948/958/958D PCI Ultra ont des fonctionnalites qui peuvent
necessiter une certaine attention lors de l'installation de Linux.
o Affectation des ports d'entree/sortie PCI
Lorsqu'elles sont configurees avec les valeurs par defaut usine, les cartes BT-
948/958/958D vont uniquement reconnaitre les affectations des ports d'E/S faites
par le BIOS PCI de la carte mere. Les BT-948/958/958D ne repondront plus aux
ports d'E/S compatibles ISA auxquels les controleurs SCSI BusLogic precedents re-
pondaient. Le pilote gere les affectations des ports d'E/S PCI. C'est la configu-
ration a privilegier. Toutefois, si le pilote BusLogic obsolete doit etre utilise
pour une raison quelconque, comme par exemple une distribution Linux qui n'utili-
serait pas encore le nouveau pilote dans son noyau de demarrage, BusLogic a fourni
une option de configuration AutoSCSI qui autorise les ports d'E/S compatibles ISA.
Pour activer cette option de compatibilite ascendante, appelez l'utilitaire
AutoSCSI par CTRL-B au demarrage du systeme et choisissez "Adapter Configura-
tion", "View/Modify Configuration", puis changez les parametres "ISA Compatible
Port" de "Disable" a "Primary" ou "Alternate". Une fois que ce pilote a ete
installe, l'option "ISA Compatible Port" doit etre remise a "Disable" pour eviter
tout conflit de futurs ports d'E/S. Les anciennes cartes BT-946C/956C/956CD ont
egalement cette option de configuration, mais le defaut usine est "Primary".
o L'ordre de scrutation des emplacements PCI
Dans les systemes comportant plusieurs controleurs PCI BusLogic, l'ordre dans
lequel les emplacements PCI sont scrutes peut apparaitre inverse pour les cartes
BT-948/958/958D par rapport aux cartes BT-946C/956C/956CD. Pour demarrer depuis
un disque SCSI, il est necessaire que le BIOS du controleur et le noyau soient
d'accord sur quel disque est le disque de demarrage (boot disk). Cela implique
qu'ils reconnaissent les controleurs PCI dans le meme ordre. Le BIOS PCI de la
carte mere fournit un moyen standard d'enumerer les controleurs PCI. Ce moyen est
utilise par le noyau Linux. Certaines implementations du BIOS PCI enumerent les
emplacements PCI par ordre croissant des numeros de bus et des numeros de contro-
leurs, alors que d'autres le font dans le sens contraire.
Malheureusement, Microsoft a decide que Windows 95 enumererait toujours les
emplacements PCI dans l'ordre croissant des numeros de bus et des numeros de
controleurs independamment de l'enumeration du BIOS PCI et ils ont exige que leur
facon de faire soit supportee par le BIOS des controleurs pour etre certifie
Windows 95. En consequence, les defauts usine des cartes BT-948/958/ 958D enume-
rent les controleurs par numeros croissants. Pour desactiver ce fonctionnement,
appelez l'utilitaire AutoSCSI par CTRL-B au demarrage du systeme, puis choisissez
"Adapter Configuration", "View/Modify Configuration", appuyez sur CTRL-F10 et
changez l'option "Use Bus And Device # For PCI Scanning Seq." a 0FF.
Ce pilote va interroger la valeur de l'option de Sequence De Scrutation PCI, de
maniere a reconnaitre les controleurs dans le meme ordre qu'ils ont ete enumeres
par le BIOS du controleur.
LA LISTE DE DIFFUSION DES ANNONCES BUSLOGIC
La liste de diffusion des annonces BusLogic constitue un forum d'information pour
les utilisateurs Linux des nouveautes (nouvelles versions du pilote et autres
annonces concernant le support pour Linux des controleurs BusLogic). Pour vous
inscrire a la liste, envoyez un message a l'adresse suivante :
"
[email protected]", avec la ligne "subscribe" dans le corps
du message.
55..99.. LLeess ccoonnttrroolleeuurrss BBuussLLooggiicc FFllaasshhPPooiinntt
(cette section est Copyright 1995 par Leonard N. Zubkoff
<
[email protected]>)
Il n'y a pas de pilote Linux pour les cartes FlashPoint LT/DL/LW (BT-930/932/950),
et quand il va y en avoir ou s'il y en aura n'est pas tres clair. Les cartes Flash-
Point ont une architecture differente des cartes Multi-Maitres et n'ont pas de
processeurs sur la carte ; elles disposent d'un simple sequenceur SCSI. Elles sont
concues pour les ordinateurs de bureau et ne sont pas specialement concues pour
des systemes d'exploitation multitaches performants comme Linux.
Les cartes Multi-Maitres BT-948/958 ont un processeur embarque et l'interface de
programmation par "boite a lettres" permet de faire du parallelisme et du pipeli-
ning entre le controleur et le systeme d'exploitation, alors que les cartes Flash-
Point necessitent de frequentes interventions du processeur principal. Etant donne
que les delais de prise en compte des interruptions augmentent sur un systeme
charge, les BT-948/958 continuent d'avoir d'excellentes performances au contraire
des FlashPoint, qui s'ecroulent rapidement. De plus, le firmware des BT-948/958
possede la connaissance de bas niveau pour une interaction efficace avec le bus
SCSI. Avec un sequenceur SCSI comme dans les FlashPoint, le noyau Linux doit en
revanche contenir lui-meme toutes ces informations de bas niveau, et il est en
general long d'arriver a faire marcher tout cela proprement. Etant donne le faible
ecart de prix entre ces deux modeles, les cartes BT-948 et BT-958 sont de toute
evidence le meilleur choix pour Linux.
<debut de citation>
ANNONCE
Mise a jour des BusLogic FlashPoint vers les BT-948
1er Fevrier 1996
Depuis leur apparition en Octobre 1995, les BusLogic FlashPoint LT ont pose
des problemes sous Linux, si bien qu'aucun pilote n'est encore disponible
pour cette nouvelle carte Ultra SCSI. Bien que le produit soit officiellement
declare comme une carte pour machine de bureau et ne soit pas particulierement
efficace dans des environnements multitaches performants tels que Linux, la
FlashPoint LT a ete annoncee comme etant le dernier cri, le nec plus ultra, par
les vendeurs d'ordinateurs et elle s'est retrouvee sur certains de leurs systemes
haut de gamme, a l'exclusion de ceux equipes des anciennes cartes Multi-Maitres.
Cela a cause du tort a de nombreuses personnes qui ont par megarde achete un
systeme en s'attendant a ce que tous les produits BusLogic soient geres par Linux,
et qui ont finalement decouvert que la FlashPoint n'etait pas supportee et ne le
serait pas avant longtemps, si elle devait l'etre un jour.
Apres que ce probleme a ete identifie, BusLogic est entree en contact avec
ses principaux clients OEM pour annoncer que les cartes Multi-Maitres BT-946C/
956C seraient toujours disponibles, et que les utilisateurs Linux qui avaient
par megarde commande des systemes a base de FlashPoint pourraient mettre a jour
leur machine avec une BT-946C. Si cela a aide de nouveaux acheteurs, cela n'etait
qu'une solution partielle au probleme plus general du support de la FlashPoint pour
les utilisateurs de Linux. Cette annonce n'apportait aucun soutien a ceux qui
avaient initialement achete une FlashPoint pour un systeme d'exploitation qui la
gerait et qui decidaient plus tard de passer a Linux ou ceux qui avaient achete
une FlashPoint, croyant qu'elle etait geree et qui etaient incapables de la
retourner.
Mi-Decembre, j'ai demande a rencontrer le responsable de la gestion de BusLogic
pour discuter du support pour le logiciel libre (free software) et pour Linux
de la FlashPoint. Des bruits plus ou moins exacts avaient circule publiquement
sur l'attitude de BusLogic envers Linux et j'avais le sentiment que le mieux
etait d'en discuter directement. J'envoyai un message par email un soir a 11
heures et la reunion eut lieu le lendemain apres-midi. Malheureusement, les
rouages administratifs tournent lentement, particulierement lorsqu'une compagnie
est en cours d'acquisition, c'est pourquoi il a fallu attendre jusqu'a maintenant
que tous les details soient parfaitement clairs et qu'une annonce publique puisse
etre faite.
BusLogic n'est pas prete aujourd'hui a publier les informations necessaires
a ce que des parties tierces puissent ecrire des pilotes pour la FlashPoint.
Les seuls pilotes existants pour la FlashPoint ont ete ecrits par l'equipe
technique de BusLogic et il n'existe pas de documentation suffisamment detaillee
pour permettre a un developpeur exterieur d'ecrire un pilote sans aide consequente.
Alors qu'il y a des gens chez BusLogic qui ne veulent pas entendre parler de
divulgation de details sur l'architecture de la FlashPoint, le debat n'est pas
entierement clos. Dans tous les cas, meme si la documentation etait disponible
aujourd'hui, il faudrait certainement pas mal de temps pour qu'un pilote reellement
utilisable soit ecrit, surtout que je ne suis pas convaincu que l'effort en vaille
la peine.
De toute facon, BusLogic continue a fournir une solution SCSI de hautes performan-
ces pour Linux et ils ne desirent pas voir quelqu'un incapable de travailler sous
Linux sous pretexte qu'il a une FlashPoint LT. En consequence, BusLogic a mis en
place un programme de mise a jour permettant a n'importe quel utilisateur de Linux
dans le monde de changer sa FlashPoint LT pour une nouvelle carte BT-948 Multi-Mai-
tres PCI Ultra SCSI. La BT-948 est la successeur Ultra SCSI de la BT-946C, et
possede toutes les fonctionnalites des controleurs BT-946C et FlashPoint LT, y
compris une terminaison adaptative (smart termination) et une PROM flashable pour
faciliter les mises a jour du firmware. Elle est bien sur compatible avec le pilote
actuel de Linux. Le prix pour cette mise a jour a ete fixe a 45 dollars americains,
et le programme de mise a jour est realise par le Support Technique de BusLogic,
qui peut etre contacte par courrier electronique a l'adresse
[email protected],
par telephone au +1 408 654-0760 ou par fax au +1 408 492-1542.
J'ai un site en beta test pour le controleur BT-948 et les versions 1.2.1 et 1.3.1
de mon pilote BusLogic contiennent deja le support pour les BT-948. Une gestion sup-
plementaire (non indispensable) pour les cartes Multi-Maitres Ultra SCSI sera ajou-
tee dans une future version. En resultat de ce mecanisme de test 'cooperatif', plu-
sieurs problemes du firmware ont ete deceles et corriges (assurez-vous que vous
avez la version 5.05R ou plus). Mon systeme de test Linux tres charge a fourni un
environnement de test ideal pour tester le mecanisme de detection et de correction
d'erreurs SCSI, qui est bien moins souvent mis en evidence sur les machines de
production, mais qui est crucial pour la stabilite generale du systeme. Il a ete
tres pratique de pouvoir travailler directement avec leur ingenieur responsable du
firmware en reproduisant les problemes sous le controle de l'environnement de debug
du firmware. Il est certain que les techniques ont enormement evolue depuis le
temps ou je travaillais sur un firmware pour du materiel embarque. Je travaille
actuellement sur des mesures de performances et j'espere avoir prochainement des
chiffres et des statistiques.
BusLogic m'a demande d'envoyer cette annonce puisqu'un important pourcentage des
questions relatives au support de la FlashPoint m'a directement ete envoye par
email ou a ete poste dans les groupes de news de Linux auxquels je participe. Pour
resumer, BusLogic offre aux utilisateurs Linux de mettre a jour leur carte Flash-
Point LT (BT-930) non geree par une carte geree BT-948 pour une somme de 45 dollars
americains.
Contactez le support technique de BusLogic a l'adresse
[email protected] ou au
+1 408 654-0760 pour beneficier de leur offre.
Leonard N. Zubkoff
[email protected]
<fin de citation>
55..1100.. SSmmaarrttCCaacchhee IIVV eett SSmmaarrttRRAAIIDD ((ssttaannddaarrdd)) EEAATTAA:: DDPPTT SSmmaarrttCCaacchhee,,
SSmmaarrttCCaacchhee PPlluuss,, SSmmaarrttCCaacchhee IIIIII,,
Cartes gerees : toutes, du moment qu'elles supportent le protocole
EATA-DMA.
Parmi ces cartes, on trouve :
La famille des DPT Smartcache (Plus) :
PM2011 ISA Fast Terminaison unique SCSI-2
PM2012B EISA Fast Terminaison unique SCSI-2
La famille des DPT Smartcache III :
PM2021 ISA Fast Terminaison unique SCSI-2
PM2021W ISA Wide Terminaison unique SCSI-2
PM2022 EISA Fast Terminaison unique SCSI-2
PM2022W EISA Wide Terminaison unique SCSI-2
PM2024 PCI Fast Terminaison unique SCSI-2
PM2024W PCI Wide Terminaison unique SCSI-2
PM2122 EISA Fast Terminaison unique SCSI-2
PM2122W EISA Wide Terminaison unique SCSI-2
PM2124 PCI Fast Terminaison unique SCSI-2
PM2124W PCI Wide Terminaison unique SCSI-2
PM2322 EISA Fast Terminaison unique SCSI-2
PM2322W EISA Wide Terminaison unique SCSI-2
La famille des DPT Smartcache VI :
PM2041W ISA Wide Terminaison unique SCSI-2
PM2041UW ISA Ultra Wide Terminaison unique SCSI-2
PM2042W EISA Wide Terminaison unique SCSI-2
PM2042UW EISA Ultra Wide Terminaison unique SCSI-2
PM2044W PCI Wide Terminaison unique SCSI-2
PM2044UW PCI Ultra Wide Terminaison unique SCSI-2
PM2142W EISA Wide Terminaison unique SCSI-2
PM2142UW EISA Ultra Wide Terminaison unique SCSI-2
PM2144W PCI Wide Terminaison unique SCSI-2
PM2144UW PCI Ultra Wide Terminaison unique SCSI-2
PM2322W EISA Wide Terminaison unique SCSI-2
PM2322UW EISA Ultra Wide Terminaison unique SCSI-2
La famille des DPT SmartRAID :
PM3021 ISA Fast Terminaison unique SCSI-2
PM3021W ISA Wide Terminaison unique SCSI-2
PM3122 EISA Fast Terminaison unique SCSI-2
PM3122W EISA Wide Terminaison unique SCSI-2
PM3222 EISA Fast Terminaison unique SCSI-2
PM3222W EISA Wide Terminaison unique SCSI-2
PM3224 PCI Fast Terminaison unique SCSI-2
PM3224W PCI Wide Terminaison unique SCSI-2
PM3334W PCI Wide Terminaison unique SCSI-2
PM3334UW PCI Ultra Wide Terminaison unique SCSI-2
mais egalement les versions 'differentielles' des controleurs ci-
dessus.
et quelques controleurs de :
NEC, AT&T, SNI, AST, Olivetti, Alphatronix.
Configurations supportees :
Emplacements : Tous
Ports : Tous
IRQs : Tous les niveaux sur changements d'etat (edge triggered)
Canaux DMA : Tous les ISA, non significatifs pour les EISA/PCI
E/S : port mappe, controle de bus
Canaux SCSI : Tous
Auto-detection :
fonctionne avec toutes les configurations gerees
La derniere version du pilote EATA-DMA est disponible a l'adresse :
ftp.i-Connect.Net:/pub/Local/EATA/
Liste de diffusion :
La liste de diffusion EATA constitue un forum pour les utilisateurs
Linux des pilotes EATA-DMA et EATA-PIO pour les discussions et les
annonces des nouvelles versions et autres annonces. Pour vous abonner
a la liste, envoyez un message a "
[email protected]"
avec la ligne "subscribe" dans le corps du message.
Support du repertoire /proc/scsi :
Pour avoir acces a des statistiques plus poussees, entrez les
commandes suivantes :
eecchhoo ""eeaattaa__ddmmaa llaatteennccyy"" >>//pprroocc//ssccssii//eeaattaa__ddmmaa//<<nnoo__ddrriivveerr>>
Pour ensuite desactiver les statistiques, faites :
eecchhoo ""eeaattaa__ddmmaa nnoollaatteennccyy"" >>//pprroocc//ssccssii//eeaattaa__ddmmaa//<<nnoo__ddrriivveerr>>
Problemes habituels :
1. La Slackware ne trouve pas le controleur.
Solution : utilisez une des disquettes de boot ascsi*.
2. Le pilote IDE arrive a detecter l'interface ST-506 de la carte EATA
dans les anciens noyaux (<v1.3).
a. Cela ressemble a l'un des 2 exemples suivants :
hd.c: ST-506 interface disk with more than 16 heads detected,
probably due to non-standard sector translation. Giving up.
(disk %d: cyl=%d, sect=63, head=64)
hdc: probing with STATUS instead of ALTSTATUS
hdc: MP0242 A, 0MB w/128KB Cache, CHS=0/0/0
hdc: cannot handle disk with 0 physical heads
hdd: probing with STATUS instead of ALTSTATUS
hdd: MP0242 A, 0MB w/128KB Cache, CHS=0/0/0
hdd: cannot handle disk with 0 physical heads
Si le pilote IDE a des problemes a cause de cela (vous ne pouvez
pas acceder a vos veritables peripheriques IDE par exemple),
changez le port d'E/S et/ou les IRQ de la carte EATA.
b. Si le pilote IDE trouve des equipements qu'il sait traiter, par
exemple des disques durs d'une capacite <=504MB, il va allouer
le port d'E/S et l'IRQ de maniere a ce que le pilote eata ne
puisse pas les utiliser. Dans ce cas, changez aussi le port
d'E/S et le niveau d'interruption (IRQ != 14, 15).
3. Le firmware de certaines vieilles cartes SK2011 est defectueux.
Contactez le support client de DPT pour une mise a jour.
Remarques :
1. CCOONNFFIIGG__PPCCII doit etre positionnee si vous utilisez une carte PCI.
55..1111.. FFuuttuurree DDoommaaiinn 1166xx00 wwiitthh TTMMCC--11880000,, TTMMCC--1188CC3300,, TTMMCC--1188CC5500 oouu ccoomm--
ppoossaanntt TTMMCC--3366CC7700
Configurations supportees :
BIOS : 2.0, 3.0, 3.2, 3.4, 3.5
Adresses BIOS : 0xc8000, 0xca000, 0xce000, 0xde000
Ports : 0x140, 0x150, 0x160, 0x170
IRQs : 3, 5, 10, 11, 12, 14, 15
DMA : non utilise
E/S : port mappe
Auto-detection :
fonctionne avec toutes les configurations gerees. Requiert un BIOS active
Surcharge de l'auto-detection :
aucune
Problemes prehistoriques, regles par une mise a jour :
1. Les vieilles versions ne gerent pas le composant TMC-18C50 et se
plantent avec les nouvelles cartes.
2. Les routines d'auto-detection des vieilles versions n'ont pas les
plus recentes signatures des BIOS.
3. Les versions avant celle incluse dans Linux 1.0.9 et 1.1.6 ne
gerent pas le nouveau composant SCSI ou le BIOS 3.4.
Remarque :
1. Le BIOS des Future Domain scrute souvent les peripheriques SCSI de
l'identificateur le plus eleve jusqu'a l'ID 0, dans l'ordre inverse
des autres BIOS SCSI. sda va alors correspondre au dernier
peripherique (par analogie avec le DOS, D: au lieu de C:). Vous
aurez certainement besoin d'utiliser l'option de surcharge
'disktab' avec LILO.
55..1122.. NNCCRR55338800 ggeenneerriiqquuee // TT113300BB ((ssttaannddaarrdd))
Configurations supportees et non supportees :
Ports : Tous
IRQs : Tous
canaux DMA : le DMA n'est pas utilise
E/S : port mappe
Auto-detection :
aucune
Surcharge de l'auto-detection :
A la compilation :
definissez GENERIC_NCR5380_OVERRIDE. Ce doit etre un tableau de
nuplets de la forme {'port', 'irq', 'dma', 'type de carte'}. Par exemple :
#define GENERIC_NCR5380_OVERRIDE {{0x330, 5, DMA_NONE, BOARD_NCR5380}}
pour une carte NCR5380 de port 0x330 et d'IRQ 5.
#define GENERIC_NCR5380_OVERRIDE {{0x350, 5, DMA_NONE, BOARD_NCR53C400}}
pour une carte T130B sur le port 0x350.
Les vieilles versions du code suppriment l'entree BOARD_*.
Les valeurs symboliques IRQ_NONE et IRQ_AUTO peuvent etre employees pour le
champ IRQ.
Ligne de commande du noyau :
ncr5380=port,irq
ncr5380=port,irq,dma
ncr53c400=port,irq
255 peut etre utilise pour 'pas d'irq' et 254 pour 'auto-detection de l'irq'.
Problemes frequents :
1. Utilisation d'une carte T130B avec le vieux pilote NCR5380
generique (version 6 pre-publique) qui ne gerait pas la ligne de
commande pour le ncr53c400.
Les registres des cartes compatibles NCR5380 ont un deplacement de
8 par rapport a l'adresse de base. Ainsi, si votre adresse est
0x350, utilisez :
ncr5380=0x358,254
sur la ligne de commande du noyau.
Problemes prehistoriques, regles par une mise a jour :
1. Le noyau se bloque lors d'acces disques avec une carte T130B ou
d'autres cartes NCR53c400.
Les versions 6 pre-publiques du pilote generique NCR5380 ne
geraient pas les interruptions sur ces cartes. Mettez a jour votre
pilote.
Remarques :
1. Le pilote generique ne gere pas le DMA actuellement et le pseudo-
DMA n'est pas mieux supporte par le pilote generique.
55..1133.. NNCCRR5533cc88xxxx ((ssttaannddaarrdd))
Configurations supportees et non supportees :
Adresses de base : Toutes
IRQs : Toutes
Canaux DMA : non significatif (PCI)
E/S : port mappe, controle de bus
Auto-detection :
requiert un BIOS PCI, utilise les routines du BIOS PCI pour rechercher les
controleurs et pour lire les donnees de configuration
Le pilote utilise les valeurs pre-programmees dans certains regsitres
pour son initialisation, aussi un BIOS doit-il etre active.
Problemes prehistoriques, regles par une mise a jour :
1. D'anciennes versions de Linux avaient un probleme avec la
pagination (swapping). Reportez-vous au chapitre ``Le systeme se
fige en swappant''
2. Les noyaux des distributions incluent la version 4 ou 5 du pilote,
qui ne gere pas certaines fonctionnalites bien utiles comme la
deconnexion / reconnexion (l'effet le plus manifeste en est le
blocage complet des peripheriques SCSI lors du rembobinage d'une
bande), controleurs multiples et operations sans BIOS.
La derniere version du pilote est disponible a l'adresse :
ftp://tsx-11.mit.edu/pub/linux/ALPHA/scsi/ncr53c810
La versions courante est pour la 1.2.10 (et les derniers patches),
bien que la prochaine version soit destinee exclusivement aux noyaux
1.3.x. Ces patches ne sont pas totalement propres, a cause de patches
pour le format ELF (et d'autres) qui se trouvaient dans mon
arborescence de travail. Si vous ne pouvez pas corriger vous-memes les
(quatre) problemes d'application des patches, ne les utilisez surtout
pas. Seul le dernier patch est necessaire ; ce ne sont pas des
versions incrementales.
Si vous ne pouvez pas attendre et desirez utiliser le dernier pilote
NCR avec un noyau 1.3.x, Harald Evensen <
[email protected]> a
adapte les patches pour les noyaux 1.3.x
ftp://ftp.pvv.unit.no/pub/Linux/ALPHA/ncr
Ces patches devraient s'appliquer sans problemes.
S'il vous plait, lisez tous les fichiers README dans ces repertoires.
Vous devriez egalement rejoindre la liste de diffusion NCR si vous
etes interesse a avoir les dernieres versions du pilote. Les
corrections de bugs intermediaires et les annonces sont faites sur
cette liste.
Pour vous inscrire, envoyez un courrier a
[email protected] avec
subscribe ncr53c810
dans le corps du message. Pour vous retirer de la liste, envoyez a la
meme adresse un message contenant
unsubscribe ncr53c810
Problemes frequents :
1. De nombreuses personnes ont rencontre des problemes de composants
fonctionnant bien sous DOS mais plantant sous Linux avec un
probleme de temporisation (timeout) lors du test 1 (interruption
perdue).
Cela est souvent du a un desaccord entre la valeur selectionnee par
le cavalier reglant le niveau d'interruption (IRQ) pour un
emplacement ou un peripherique de la carte mere et la valeur fixee
dans la CMOS. VERIFIEZ TOUJOURS QUE :
+o L'IRQ que vous employez est utilisee uniquement par le composant
NCR de votre carte ou par l'emplacement dans lequel la carte NCR
est installee
+o Les cavaliers de selection des IRQ pour le composant de la carte ou
pour son emplacement correspondent a la configuration de la CMOS
+o Certaines cartes meres PCI savent faire une affectation
"automatique" des IRQ. Cela ne fonctionnera pas.
Cela peut egalement etre du aux INTB, INTC ou INTD PCI
selectionnees sur une carte PCI dans un systeme qui ne gere que
l'INTA PCI. Si vous utilisez une carte NCR qui vous permet de
choisir par cavalier la ligne d'interruption PCI utilisee, assurez-
vous que vous avez configure l'INTA.
Enfin, le PCI doit utiliser des interruptions sur niveau (level-
sensitive) plutot que sur front (edge triggered). Verifiez que
votre carte est positionnee pour generer des interruptions sur
niveau. Si cela ne marche toujours pas, essayez les interruptions
sur front, au cas ou votre systeme serait defectueux.
Ce probleme est assez frequent avec quelques cartes Viglen, pour
lesquelles la configuration des cavaliers d'interruptions n'est pas
documentee dans le manuel. On m'a dit que ce qui devrait etre une
IRQ5 est en fait une IRQ9. Votre cas sera peut-etre different.
2. Des blocages et d'autres problemes apparaissent lors de
l'utilisation d'une carte video PCI S3 928 et Tseng Lab ET4000W32.
Il y a des bugs materiels dans certaines versions de ces
composants. Ne les utilisez pas.
3. Un message au demarrage vous indique que l'organisation (mapping)
des E/S a ete desactivee parce que les bits 0..1 de l'adresse de
base 0 indiquaient un mapping non E/S. Le message exact est :
the I/O mapping was disabled because base address 0 bits 0..1 indicated a
non I/O mapping
Cela est du a un bug du BIOS sur certaines machines : la lecture dou-
ble mots de registres de configuration retourne les mots de 16 bits de
poids forts et de poids faibles inverses.
4. Certaines machines ont des problemes si l'ecriture differee PCI ou
la bufferisation CPU->PCI sont activees. Si vous avez des
problemes, desactivez ces options.
5. Certains systemes avec le firmware NCR SDMS dans la ROM du BIOS de
la carte et dans le BIOS du systeme ne sont pas capables de booter
sous DOS. Desactiver l'image dans un des BIOS devrait resoudre le
probleme.
6. Si vous rencontrez le message
"scsi%d: IRQ0 not free, detaching"
ou
"scsi%d: IRQ255 not free, detaching"
le composant NCR avait tous ses bits a 0 ou a 1 dans le registre de
configuration PCI. Soit vous avez des problemes de configuration
(reportez-vous au chapitre ``Problemes frequents 1''), soit le BIOS de
votre carte mere est defectueux.
Un contournement serait d'editer le fichier drivers/scsi/ncr53c7,8xx.c
puis de changer pci_init() pour mettre :
irq = my_irq;
avant
return normal_init (tpnt, board, chip, (int) base,
(int) io_port, (int) irq, DMA_NONE, 1, bus, device_fn,
options);
7. Certains systemes ont des composants BIOS honteusement bugges. Ne
faites pas de rapport d'anomalie avant d'etre certain que vous avez
recu les plus recentes ROM de votre vendeur.
8. Les lignes de commande ncr53c810=xxx, etc. ne marchent pas.
Dans les noyaux d'origine, les points d'entree correspondants ne
sont intentionnellement pas inclus dans le fichier init/main.c :
Le pilote fait malgre tout des auto-detections pour une carte dont
des parametres ont ete passes sur la ligne de commande. Ainsi, si
une ligne de commande est utilisee alors que la carte a ete
reconnue par la routine de configuration PCI, vous allez au devant
de gros problemes.
La seule raison pour laquelle vous pourriez avoir besoin d'une
surcharge par la ligne de commande serait de contourner un bug du
materiel PCI et du BIOS. Dans ce cas, certaines routines de
correction d'erreurs ne marcheront pas, rendant la surcharge plus
qu'inutile.
Enfin, pratiquement toutes les personnes qui _pensent_ avoir besoin
d'une surcharge sur la ligne de commande le font parce qu'elles ont
eu un message de la part du pilote. Si le pilote vous signale que
vous avez une probleme de configuration, votre systeme est
defectueux ou alors vous avez un probleme de configuration et
aucune ligne de commande ne pourra y remedier.
Si quelqu'un a ajoute les points d'entree adequats dans le fichier
init/main.c pour les lignes de commande, elle ne sont pas gerees et
peuvent parfaitement ne pas fonctionner.
9. Certaines cartes NCR (Nexstor est la plus connue) qui n'utilisent
pas un BIOS NCR sortent en timeouts. Certaines de ces ROMs gerent
les transferts synchrones et asynchrones, mais etablissent une
negociation de transferts synchrones au demarrage du systeme, ce
qui laisse les disques dans un etat non defini. Lorsque le pilote
NCR Linux issu de la distribution essaie de dialoguer avec ces
peripheriques, il expire en timeout et ne s'en sort pas car il ne
fait ni reset du bus, ni renegociation.
Si vous rencontrez ce probleme, vous pouvez desactiver les
transferts synchrones dans le programme de configuration de la
carte ou mettre a jour votre pilote NCR avec une version recente
ALPHA qui sait traiter la negociation synchrone.
10.
Les cartes Tyan S1365 '825 ont des problemes de temporisation
(timeouts), tout particulierement lorsque les deconnexions sont
autorisees. Les documentations de certaines de ces cartes inversent
les positions du cavalier d'activation de la terminaison - si bien
que celle-ci est activee alors que vous auriez voulu la desactiver,
et inversement.
Essayez de changer la position du cavalier.
Remarques :
1. CCOONNFFIIGG__PPCCII doit etre positionnee
55..1144.. SSeeaaggaattee SSTT00xx//FFuuttuurree DDoommaaiinn TTMMCC--88xxxx//TTMMCC--99xxxx ((ssttaannddaarrdd))
Configurations supportees et non supportees :
Adresses de base : 0xc8000, 0xca000, 0xcc000, 0xce000, 0xdc000, 0xde000
IRQs : 3, 5
Canaux DMA : le DMA n'est pas utilise
E/S : mappees en memoire
Auto-detection :
teste uniquement les adresses, le niveau d'interruption (IRQ) etant suppose
valoir 5 ; necessite un BIOS installe.
Surcharge de l'auto-detection :
A la compilation :
Definir OVERRIDE a la valeur de l'adresse de base, CONTROLLER a FD ou SEAGATE
en fonction de la configuration et IRQ a la valeur de niveau d'interruption
de la carte.
Ligne de commande du noyau :
st0x=adresse,irq ou tmc8xx=adresse,irq (uniquement pour les noyau 0.99.13b et
plus recents)
Problemes prehistoriques, regles par une mise a jour :
1. Les versions des noyaux 0.99.12 et anterieurs avaient un probleme
d'acquittement (handshaking) avec certains peripheriques lents.
Notamment, voici ce qui se passait lorsque vous ecriviez des
donnees sur le bus :
a. ecrire l'octet dans le registre de donnee ; le registre de
donnees est place sur le bus,
b. temps_restant = 12us,
c. attendre tant que temps_restant > 0 et que le signal REQ n'est
pas genere,
d. si temps_restant > 0, generer le signal ACQ,
e. attendre tant que temps_restant > 0 et le signal REQ est genere,
f. redescendre le signal ACQ
Ce probleme apparaissait sur certains peripheriques lents qui
traitaient chaque commande apres l'avoir lue et pour lesquels le
protocole REQ/ACQ (requete / acquittement) prenait plus de 12us -
REQ n'etait pas faux au moment ou le pilote l'attendait, si bien
que le pilote finissait pas envoyer plusieurs octets de donnees a
chaque impulsion REQ.
2. Avec Linux 0.99.12, j'ai introduit un bug en corrigeant le code
d'arbitrage. Sur certains systemes, la selection des peripheriques
sortait en echec. Ce probleme a ete corrige en 0.99.13.
Problemes frequents :
1. Certains commandes sortent en timeouts lorsque Linux essaie de lire
une table de partition ou de faire d'autres acces disques.
La carte est fournie avec une configuration prevue par defaut pour
MSDOS, c'est-a-dire que les interruptions sont desactivees. Pour
les reactiver sur les cartes Seagate, fermez les pattes F-G (choix
de l'IRQ 5) sur le cavalier W3 (ST01) ou JP3 (ST02).
2. Le pilote ne parvient pas a gerer certains peripheriques, en
particulier des derouleurs de bandes SCSI bon marche et des
lecteurs de CDROM.
La Seagate reporte le protocole REQ/ACQ du bus SCSI dans les
signaux IO CHANNEL READY et, eventuellement, OWS du bus du PC.
Malheureusement, vous n'etes pas averti de l'expiration du timer de
surveillance (watchdog timer) et vous n'avez aucun moyen de savoir
avec certitude que le signal REQ est descendu ; vous risquez
finalement de voir passer une seule impulsion REQ comme plusieurs
impulsions REQ.
Etre capable de traiter ce cas implique de mettre en oeuvre une
boucle active pour surveiller la descente du signal REQ, avec un
delai de surveillance au cas ou vous auriez manque la transition a
cause d'une interruption, etc. Vous observerez une degradation des
performances ; il pourrait etre judicieux de ne pas appliquer cette
methode a tous les peripheriques SCSI. La selection peut se faire
peripherique par peripherique via le champ "broken" des entrees du
tableau scsi_devices. Si vous avez des problemes, vous pourrez
tenter d'ajouter votre peripherique a la liste des equipements pour
lesquels le champ "broken" n'est pas positionne a 0 (actuellement,
il n'y a que les lecteurs de CDROM TENEX).
3. Une carte Future Domain (en particulier les 840, 841, 880 et 881)
ne marche pas.
Quelques-unes des cartes Future Domain utilisent l'organisation
(mapping) des registres des Seagate ; les bits MSG et CD du
registre d'etat sont inverses.
Editez le fichier seagate.h, echangez les definitions de SSTTAATT__MMSSGG
et SSTTAATT__CCDD puis recompilez le noyau avec la variable CCOONNTTRROOLLLLEERR
definie a SSEEAAGGAATTEE et les variables IIRRQQ et OOVVEERRRRIIDDEE correctement
positionnees.
4. Lors d'une tentative de partionnement de votre disque (par fdisk),
vous avez un message indiquant que les ioctl HDIO_REQ ou
HDIO_GETGEO ont echoue, ou encore
You must set heads sectors and cylinders.
You can do this from the extra functions menu.
Reportez-vous a la section ``Partitionnement des disques''
5. Apres avoir specifie manuellement la geometrie du disque, les
essais de lecture de la table des partitions provoquent les
messages d'erreurs "partition boundary not on a cylinder boundary",
"physical and logical boundaries don't match", etc.
Reportez-vous a la section ``Partitionnement des disques''
6. Sur certains systeme qui fonctionnaient avant la version 0.99.13,
les nouvelles versions de Linux echouent. Les anciennes versions
affectaient les registres CONTROL et DATA dans un ordre different
de celui explique dans la documentation Seagate, ce qui perturbait
certains systemes. Les nouvelles versions se conforment au
document, mais cela perturbe maintenant d'autres systemes.
Le code du fichier seagate.c ressemble maintenant a :
cli();
DATA = (unsigned char) ((1 << target) | (controller_type == SEAGATE ? 0x80 : 0x40));
CONTROL = BASE_CMD | CMD_DRVR_ENABLE | CMD_SEL |
(reselect ? CMD_ATTN : 0);
sti();
Votre probleme peut etre corrige en changeant ce code en :
cli();
CONTROL = BASE_CMD | CMD_DRVR_ENABLE | CMD_SEL |
(reselect ? CMD_ATTN : 0);
DATA = (unsigned char) ((1 << target) | (controller_type == SEAGATE ? 0x80 : 0x40));
sti();
Constantes :
FAST ou FAST32 pour la mise en oeuvre de transferts aveugles
ARBITRATE va forcer le controleur a arbitrer le bus en mode de
compatibilite SCSI-II, plutot que d'attendre le signal BUS FREE
avant de continuer. Cela devrait nous permettre de traiter une
commande par unite logique le jour ou j'integrerai mes
modifications de reorganisation dans les sources de
l'arborescence de reference.
SLOW_HANDSHAKE autorise la compatibilite avec des peripheriques deficients,
qui n'acquittent pas suffisamment rapidement (par exemple
certains lecteurs de CDROM) pour le code des cartes Seagate.
SLOW_RATE=x, x etant un entier specifiant un taux de transfert par defaut
si le protocole d'acquittement (handshaking) ne fonctionne
pas correctement.
55..1155.. PPAASS1166 SSCCSSII ((ssttaannddaarrdd))
Configurations supportees et non supportees :
Ports : 0x388, 0x384, 0x38x, 0x288
IRQs : 10, 12, 14, 15
IMPORTANT : les IRQ DOIVENT etre differentes des IRQ utilisees par la
partie de gestion du son de la carte
DMA : n'est pas utilise par la partie SCSI de la carte
E/S : port mappe
Auto-detection :
n'a pas besoin du BIOS
Surcharge de l'auto-detection :
A la compilation : definissez PAS16_OVERRIDE comme un tableau de nuplets
de la forme {'port', 'irq'}. Par exemple :
#define PAS16_OVERRIDE {{0x388, 10}}
pour une carte de port 0x388, IRQ 10.
Ligne de commande du noyau :
pas16=port,irq
Constantes :
AUTOSENSE - si elle est definie, la commande SCSI 'REQUEST SENSE' sera
automatiquement emise pour les commandes qui se terminent
avec un status 'CHECK CONDITION'.
PSEUDO_DMA - autorise le PSEUDO-DMA materiel ; devrait resulter en un
gain de performance de l'ordre de x3 / x4 par rapport aux
E/S scrutees (polled I/O).
PARITY - activation du controle de parite. N'est pas gere.
SCSI2 - activation de la gestion de 'files marquees' pour le SCSI-II
(SCSI-II tagged queuing). Non teste.
UNSAFE - autorise les interruptions pendant les transferts
pseudo-DMA. Vous activerez cela uniquement si vous avez
des problemes de perte de caracteres durant les
communications a haute vitesse. Cependant, meme dans ce cas,
vous auriez plutot interet a jouer avec les tailles de blocs de
transfert.
USLEEP - autorise la gestion des peripheriques qui ne se deconnectent
pas. Non teste.
Problemes frequents :
1. Commandes en timeouts, interruptions, etc.
Utilisez les patches pour les NCR5380 que j'ai postes sur le reseau
il y a quelque temps (ils devraient etre integres dans la prochaine
version alpha). Ces patches corrigent un sequencement critique
(race condition) des precedentes versions du pilote NCR5380. Ils
corrigent egalement un probleme de gestion de plusieurs
peripheriques pour les controleurs bases sur le NCR5380.
Si cela echoue, vous devrez interdire l'option PSEUDO_DMA en
changeant la ligne #define PSEUDO_DMA du fichier
drivers/scsi/pas16.c en #undef PSEUDO_DMA.
Remarquez que cette solution doit etre consideree uniquement en
dernier recours, car elle penalise gravement les performances.
55..1166.. TTrraannttoorr TT112288//TT112288FF//TT222288 ((ssttaannddaarrdd))
Configurations supportees et non supportees :
Adresses de base : 0xcc000, 00xc8000, 0xdc000, 0xd8000
IRQs : aucune, 3, 5, 7 (toutes cartes)
10, 12, 14, 15 (T128F uniquement)
DMA : non utilise
E/S : memoire mappee
Auto-detection :
fonctionne sur toutes les configurations supportees ; necessite un BIOS
installe.
Surcharge de l'auto-detection :
A la compilation : la variable T128_OVERRIDE doit etre un tableau
de nuplets de la forme {'adresse', 'irq'}. Par exemple :
#define T128_OVERRIDE {{0xcc000, 5}}
pour une carte a l'adresse 0xcc000, IRQ 5.
Les valeurs symboliques IRQ_NONE et IRQ_AUTO peuvent etre employees pour le
champ IRQ.
Ligne de commande du noyau :
t128=adresse,irq
-1 peut etre utilise pour "pas d'irq", -2 pour "auto-detection de l'irq".
Constantes :
AUTOSENSE - si elle est definie, la commande SCSI 'REQUEST SENSE' sera
automatiquement emise pour les commandes qui se terminent
avec un status 'CHECK CONDITION'.
PSEUDO_DMA - autorise le PSEUDO-DMA materiel ; devrait resulter en un
gain de performance de l'ordre de x3 / x4 par rapport aux
E/S scrutees (polled I/O).
PARITY - activation du controle de parite. N'est pas gere.
SCSI2 - activation de la gestion de 'files marquees' pour le SCSI-II
UNSAFE - autorise les interruptions pendant les transferts
pseudo-DMA. Vous activerez cela uniquement si vous avez
des problemes de perte de caracteres durant les
communications a haute vitesse. Cependant, meme dans ce cas,
vous auriez tout interet a jouer avec les tailles de blocs de
transfert.
USLEEP - autorise la gestion des peripheriques qui ne se deconnectent
pas. Non teste.
Problemes frequents :
1. Commandes en timeouts, interruptions, etc.
Utilisez les patches pour les NCR5380 que j'ai postes sur le reseau
il y quelque temps (ils devraient etre integres dans la prochaine
version alpha). Ces patches corrigent un sequencement critique
(race condition) des precedentes versions du pilote NCR5380. Ils
corrigent egalement un probleme de gestion de plusieurs
peripheriques pour les controleurs bases sur le NCR5380.
Si cela echoue, vous devrez interdire l'option PSEUDO_DMA en
changeant la ligne ##ddeeffiinnee PPSSEEUUDDOO__DDMMAA du fichier
drivers/scsi/pas16.c en ##uunnddeeff PPSSEEUUDDOO__DDMMAA.
Remarquez que cette solution doit etre consideree uniquement en
dernier recours, car elle penalise gravement les performances.
55..1177.. UUllttrraassttoorr 1144ff ((IISSAA)),, 2244ff ((EEIISSAA)),, 3344ff ((VVLLBB)) ((ssttaannddaarrdd))
Configurations supportees :
Ports : 0x130, 0x140, 0x210, 0x230, 0x240, 0x310, 0x330, 0x340
IRQs : 10, 11, 14, 15
Canaux DMA : 5, 6, 7
E/S : port mappe, controle de bus
Auto-detection :
ne marche pas pour les cartes sur le port 0x310. Le BIOS n'est pas necessaire.
Surcharge de l'auto-detection :
uniquement a la compilation (definissez PORT_OVERRIDE)
Problemes frequents :
1. L'adresse 0x310 n'est pas reconnue par le code d'auto-detection et
peut creer des conflits si le reseau est active.
Utilisez une adresse differente.
2. L'utilisation d'une carte Ultrastor a l'adresse 0x330 peut
provoquer des blocages du systeme lorsque les pilotes sons sont en
phase d'auto-detection.
Utilisez une adresse differente.
3. D'autres pilotes effectuent des auto-detections dangereuses a
diverses adresses. Si vous avez des problemes de detection ou si le
systeme se bloque au demarrage, essayez une autre adresse.
0x340 est reputee etre une adresse qui marche.
4. Linux ne detecte aucun peripherique SCSI, mais reconnait votre
disque dur connecte a une carte SCSI Ultrastor comme un disque
normal, sans que le pilote de disque arrive a le gerer. Notez que
lorsque cela se produit, vous avez probablement le message
hd.c: ST-506 interface disk with more than 16 heads detected,
probably due to non-standard sector translation. Giving up.
(disk %d: cyl=%d, sect=63, head=64)
Si c'est le cas, vous utilisez la carte Ultrastor en mode emulation
WD1003. Vous devez alors :
a. basculer la carte Ultrastor en mode natif. C'est ce qu'il y a de
mieux a faire, etant donne que les disques SCSI sont
sensiblement plus rapides que les disques IDE, specialement avec
les patches de lectures/ecritures groupees. Certains ont obtenu
des debits soutenus de plus de 2Mo/s a travers le systeme de
gestion de fichiers, apres application de ces patches.
Notez que cela ne sera pas necessaire si vous n'utilisez pas de
disque dur ou si vous branchez plus de deux disques durs sur la
carte Ultrastor.
b. utilisez la ligne de commande du noyau
hd=cylindres,tetes,secteurs
pour surcharger les parametres de configuration par defaut, de
maniere a pouvoir demarrer vous-meme, tout en vous assurant que le
nombre de cylindres <= 2048, le nombre de tetes <= 16 et le nombre
de secteurs <= 255 soient tels que cylindres * tetes * secteurs
soit le meme dans les deux representations.
Vous devez egalement preciser la geometrie du disque au moment
d'utiliser fdisk sous Linux. Si vous omettez de le faire, de mau-
vaises valeurs risqueraient d'etre ecrites dans la table des parti-
tions. Ces valeurs seront correctes pour Linux, mais provoqueront
des erreurs sous MSDOS, qui se base sur les triplets <tete/cylin-
dre/secteur> de la table des partitions.
Une fois que Linux a demarre, vous pouvez vous epargner la peine de
preciser manuellement a chaque demarrage la geometrie en modifiant
comme il le faut la macro HD_TYPE du fichier include/linux/config.h
et en recompilant le noyau.
55..1188.. WWeesstteerrnn DDiiggiittaall 77000000 ((ssttaannddaarrdd))
Configurations supportees :
Adresses du BIOS : 0xce000
Ports : 0x350
IRQs : 15
Canaux DMA : 6
E/S : port mappe, controle de bus
Auto-detection :
necessite un BIOS active.
Problemes frequents :
1. Il existe plusieurs versions du composant et du firmware. La
version 3 de la carte est connue pour ne pas fonctionner, alors que
les cartes de version 5 marchent. De meme, les composants sans
suffixe ne fonctionnent pas, alors que ceux marques d'un 'A'
marchent.
2. La carte gere quelques adresses BIOS qui n'apparaissent pas dans la
liste des adresses supportees. Si vous vous trouvez dans cette
situation, utilisez une des adresses supportees et envoyez un
rapport d'anomalie suivant la procedure decrite dans le chapitre
``Signaler une anomalie''.
55..1199.. AAMM5533//7799CC997744 ((AALLPPHHAA))
ftp://tsx-11.mit.edu/pub/linux/ALPHA/scsi/AM53C974-0.3.tar.gz
Configurations supportees :
Ports : Tous
IRQs : Tous
Canaux DMA : 6
E/S : port mappe, controle de bus (sans intelligence)
55..2200.. qqllooggiicc ((ssttaannddaarrdd))
He, Drew, ou est ce chapitre (I (D.F.). Je ne l'ai vu que dans la
table des matieres ;-) ?
66.. DDiissqquueess
Les informations contenues dans ce chapitre concernent les disques.
66..11.. MMaatteerriieell ssuuppppoorrttee eett nnoonn ssuuppppoorrttee
Tous les peripheriques SCSI a acces direct, d'une taille de bloc de
256, 512 ou 1024 octets devraient fonctionner. Les autres tailles de
bloc ne marchent pas (notez que cela peut souvent etre corrige en
modifiant la taille des blocs et/ou des secteurs en utilisant la
commande SCSI MODE SELECT).
La taille des secteurs fait reference au nombre d'octets de donnees
presents par secteur sur un peripherique (les lecteurs de CDROM
utilisent par exemple une taille de secteur de 2048 octets).
La taille des blocs fait reference a la taille des blocs logiques
utilises pour s'interfacer avec le peripherique. Bien que cette valeur
soit habituellement identique a la taille des secteurs, certains
peripheriques regroupent plusieurs secteurs physiques plus petits (par
exemple 256 octets dans le cas des peripheriques Syquest de 55 Mo) en
un seul bloc logique plus important ou l'inverse (des blocs de 512
octets sur les lecteurs de CDROM compatibles SUN, par exemple).
Les peripheriques amovibles incluent les disques Bernouilis, les
disques flopticals, les disques magneto-optiques et les Syquest.
En theorie, les peripheriques d'une taille inferieure a 1 To (tera-
octets) devraient marcher. Il n'y a en particulier aucun probleme avec
les minuscules disques de 9 Go.
66..22.. PPrroobblleemmeess ffrreeqquueennttss
66..22..11.. MMeessssaaggee ''CCyylliinnddrree ssuuppeerriieeuurr aa 11002244''
Au moment du partitionnement, un message d'avertissement "cylinder >
1024" s'affiche ou bien vous etes incapable de demarrer depuis une
partition possedant des cylindres au-dela du cylindre 1024.
C'est une limitation du BIOS.
Reportez-vous aux chapitres ``Geometrie'' et ``Partitionnement'' pour
des explications plus detaillees.
66..22..22.. VVoouuss eetteess iinnccaappaabbllee ddee ppaarrttiittiioonnnneerr ""//ddeevv//hhdd**""
Les /dev/hd* font reference a des peripheriques IDE. Utilisez /dev/sd*
pour vos disques SCSI.
Reportez-vous aux chapitres ``Fichiers speciaux'', ``Geometrie'' et
``Partitionnement'' pour les noms de fichiers corrects et la marche a
suivre pour le partionnement.
66..22..33.. IImmppoossssiibbiilliittee dd''eejjeecctteerr llee mmeeddiiaa dd''uunn ppeerriipphheerriiqquuee aammoovviibbllee
Linux tente de verrouiller la porte du lecteur lorsqu'un media est
monte, afin d'eviter les endommagements du systeme de fichiers
resultants d'un changement de support.
Demontez vos disques amovibles avant de les ejecter.
66..22..44.. IImmppoossssiibbiilliittee ddee ddeemmaarrrreerr ddeeppuuiiss uunn ddiissqquuee SSCCSSII eenn uuttiilliissaanntt
LLIILLOO
Dans certaines conditions, le pilote SCSI et le BIOS ne sont pas
d'accord sur le mapping du BIOS correct a utiliser. Le resultat est
que LILO se bloque apres avoir affiche les lettres 'LI' au moment du
boot.
Comme contournement, trouvez quelle geometrie est utilisee sous DOS
puis creez une entree pour votre disque dans le fichier
/etc/lilo/disktab.
Vous pouvez eventuellement egalement utiliser l'option "linear" pour
LILO.
66..22..55.. FFddiisskk rreeppoonndd ppaarr
You must set heads sectors and cylinders.
You can do this from the extra functions menu.
et la geometrie du disque n'est pas memorisee lorsque fdisk est
reexecute.
Reportez-vous au chapitre ``Partitionnement''.
66..22..66.. UUnn sseeuull ppeerriipphheerriiqquuee eesstt ddeetteeccttee ssuurr uunnee ccaarrttee ppoonntt ((bbrriiddggee
bbooaarrdd)) aavveecc pplluussiieeuurrss ppeerriipphheerriiqquueess
Linux ne recherche pas les unites logiques (LUNs) superieures a 0 sur
les peripheriques SCSI qui retournent une version ANSI SCSI 1. Si vous
voulez que toutes les unites logiques soient reconnues, allez modifier
la fonction scan_scsis() du fichier drivers/scsi/scsi.c.
66..22..77.. LLee ssyysstteemmee ssee ffiiggee eenn sswwaappppaanntt
La version 1.1.38 devrait avoir corrige le probleme. Essayez de faire
une mise a jour de votre pilote.
66..22..88.. LLeess ddiissqquueess CCoonnnneerr CCFFPP11006600SS ssoonntt eennddoommmmaaggeess
Cela est du a un erreur du microcode dans les fonctions de lecture
anticipee et dans le cache.
>D'apres Soenke Behrens, du support technique de Conner :
Ces dernieres semaines, nous avons recu des appels de plusieurs clients
qui nous affirmaient avoir de serieux problemes avec les disques SCSI
Conner CFP1060x de 1Go en utilisant le systeme d'exploitation Linux.
Des erreurs etaient detectees par e2fsck a chaque demarrage du systeme
(inodes abimes) entre autres.
Une correction est maintenant disponible pour les clients possedant
des CFP1060x (versions de microcode 9WA1.62/1.66/1.68) sous Linux. Pour
appliquer la mise a jour, vous aurez besoin d'une disquette bootable DOS,
et des pilotes ASPI qui permettent l'acces au disque dur. La mise a jour
telecharge un nouveau code de gestion de files (mise en file et lecture)
dans la memoire SCSI non-volatile du disque.
Si vous avez des problemes avec des disques dont le microcode est a la
version 9WA1.60, contactez votre centre Conner le plus proche pour une
mise a jour. La version du microcode peut etre trouvee sur l'etiquette
du disque ou, sur sa face inferieure, sur l'etiquette d'un des circuits
integres.
Si vous vous sentez assez sur de vous pour faire vous-meme la mise a jour,
appelez le support technique de Conner, apres avoir note la version de
votre microcode. Le support technique de Conner en Europe peut etre joint
au +44-1294-315333. Le support americain peut etre joint au 1-800-4CONNER.
Salutations,
Soenke Behrens
Support Technique Europe
66..33.. FFiicchhiieerrss ssppeecciiaauuxx
Les disques SCSI utilisent le majeur bloc 8. Il n'y a pas d'acces en
mode "raw", comme sous BSD.
16 mineurs sont attribues pour chaque disque SCSI, mineur % 16 == 0
representant le disque entier, 1 <= (mineur % 16) <= 4 les 4
partitions principales et 5 <= (mineur % 16) <= 15 les partitions
etendues.
Exemple de configuration avec un seul controleur :
Peripherique Adresse Unite logique disque SCSI
Seagate 84M 0 0 /dev/sda
Disque 0 SCSI->SMD bridge 3 0 /dev/sdb
Disque 1 SCSI->SMD bridge 3 1 /dev/sdc
Derouleur de bande Wangtek 4 0 aucun
Maxtor 213M 6 0 /dev/sdd
etc.
La convention de nommage standard est
/dev/sd{lettre} pour le disque entier ((mineur % 16) == 0)
/dev/sd{lettre}{partition} pour les partitions de ce disque (1 <=
(mineur % 16) <= 15)
Par exemple :
/dev/sda peripherique mode bloc de majeur 8 et de mineur 0
/dev/sda1 peripherique mode bloc de majeur 8 et de mineur 1
/dev/sda2 peripherique mode bloc de majeur 8 et de mineur 2
/dev/sdb peripherique mode bloc de majeur 8 et de mineur 16
etc.
66..44.. PPaarrttiittiioonnnneemmeenntt
Vous pouvez partitionner vos disques SCSI en utilisant l'outil de
votre choix, sous DOS, OS/2, Linux ou n'importe quel autre systeme
d'exploitation supportant le schema de partionnement standard.
Le meilleur moyen d'utiliser le programme fdisk de Linux est de
specifier le peripherique sur la ligne de commande. Par exemple, pour
partitionner le premier disque SCSI, tapez :
fdisk /dev/sda
Si vous ne precisez pas explicitement le peripherique, le programme de
partionnement pourrait prendre par defaut /dev/hda, qui n'est pas un
disque SCSI.
Il peut arriver que fdisk affiche
You must set heads sectors and cylinders.
You can do this from the extra functions menu.
Command (m for help):
ou qu'il sorte un message comme quoi "HDIO_REQ ou HDIO_GETGEO ioctl" a
echoue. Dans ce cas, specifiez manuellement la geometrie du disque
(``Geometrie'') au moment de lancer fdisk ou entrez-la dans
/etc/disktab si vous avez l'intention de booter sur ce disque en
utilisant LILO.
Si vous avez manuellement precise la geometrie du disque, les
utilisations ulterieures de fdisk vous donneront le meme message
d'erreur. C'est normal, puisque les PC ne stockent pas les
informations de geometrie dans la table des partitions. Cela ne cause
AUCUN PROBLEME et vous n'aurez pas de soucis a acceder aux partitions
creees par Linux. Certains programmes mal ecrits peuvent en etre genes
; contactez votre revendeur et insistez pour qu'il corrige son code si
cela arrivait.
Un message d'avertissement vous signale parfois que votre partition se
termine au-dela du cylindre 1024. Si vous creez une telle partition,
vous ne serez pas capable de demarrer dessus avec LILO. Cela etant,
rien n'empeche de creer une partition racine (root) partiellement ou
entierement situee au-dela de ce cylindre 1024. Il est en effet
toujours possible de creer une petite partition /boot sous la barriere
des 1024 ou de demarrer le noyau directement depuis une autre
partition.
66..55.. GGeeoommeettrriiee
Sous Linux, chaque disque est vu tel que le controleur SCSI le voit :
N blocs, numerotes de 0 a N - 1, sans erreurs, la ou le DOS / BIOS
considerent avoir affaire a des disques intelligents et appliquent une
transformation arbitraire <tete/cylindre/secteur> a cet adressage
lineaire.
Cela peut poser un probleme lorsque vous partitionnez votre disque
sous Linux, puisqu'il n'y a pas de moyen portable de recuperer la
geometrie estimee par le DOS/BIOS. Dans la plupart des cas, un ioctl()
HDIO_GETGEO peut etre implemente pour obtenir ce mapping.
Malheureusement, lorsque le vendeur (au hasard Seagate) choisit un
mapping retors, non standard et non documente, cela n'est plus
possible et il est necessaire de preciser manuellement la geometrie.
Si vous en arrivez la, plusieurs options sont possibles :
1. Si cela ne vous gene pas d'utiliser DOS ou de demarrer depuis le
disque avec LILO, creez une traduction telle que tete * cylindre *
secteur * 512 < taille de votre disque en octets (un megaoctet est
defini par 2^20 octets).
1 <= tete <= 256
1 <= cylindre <= 1024
1 <= secteur <= 63
2. Utilisez le mapping du BIOS. Dans certains cas, cela implique qu'il
faudra reconfigurer le disque de maniere a ce qu'il soit a
l'adresse SCSI 0 et qu'il faudra desactiver le second disque IDE
(si vous en avez un).
Sous DOS, vous pouvez utiliser un programme tel que NU (Norton
Utilities). Vous pouvez aussi lancer le programme suivant :
begin 664 dparam.com
MBAZ``##_B+^!`+N!`(H'0SP@=/D\,'5:@#]X=`6`/UAU4(!_`3AU2H!_`P!U
M1(I7`H#J,(#Z`7<Y@,*`M`C-$PCD=3-14HC()#\PY.@R`.@J`%J(\/[`,.3H
M)0#H'0!8AL2Q!M+L0.@7`+K"`;0)S2'#NIP!ZR"ZQ0'K&[K5`>L6N]T!,=*Y
M"@#W\8#",$N(%PG`=>^)VK0)S2'#=7-A9V4Z(&1P87)A;2`P>#@P#0H@("!O
L<B`@9'!A<F%M(#!X.#$-"B1);G9A;&ED(&1R:79E#0HD("`D```````D``!O
`
end
Lorsque vous le lancerez, il affichera le nombre de secteurs, de
cylindres et de tetes du disque dont l'adresse BIOS a ete fournie sur
la ligne de commande (0x80 pour le premier disque, 0x81 pour le second
disque, etc.).
Par exemple, dparam 0x80
60 17 1007
signifie que C: a 60 secteurs, 17 tetes et 1007 cylindres.
77.. LLeess lleecctteeuurrss ddee CCDDRROOMM
Ce chapitre contient des informations specifiques aux lecteurs de
CDROM.
77..11.. MMaatteerriieell ssuuppppoorrttee eett nnoonn ssuuppppoorrttee
Les lecteurs de CDROM SCSI avec une taille de bloc de 512 ou 2048
octets doivent marcher. D'autres tailles de bloc ne fonctionneront
pas.
77..22.. PPrroobblleemmeess ffrreeqquueennttss
77..22..11.. IImmppoossssiibbiilliittee ddee mmoonntteerr llee CCDDRROOMM
La syntaxe correcte pour monter un CDROM ISO-9660 est la suivante :
mount -t iso9660 /dev/sr0 /point_de_montage -o ro
Il est evident que pour que cela fonctionne, il faut avoir integre
dans le noyau (ou en module) le support SCSI pour votre controleur,
pour le pilote SCSI et le systeme de fichiers iso9660.
Notez aussi que dans les noyaux 1.1.32, les peripheriques en lecture
seule tels que les CDROM ne peuvent pas etre montes avec les options
par defaut (lecture/ecriture (read/write)).
77..22..22.. IImmppoossssiibbiilliittee dd''eejjeecctteerr llee CCDDRROOMM
Linux tente de verrouiller la porte du lecteur lorsqu'un media est
monte, afin d'eviter les endommagements du systeme de fichiers
resultants d'un changement de support.
77..22..33.. IImmppoossssiibbiilliittee dd''eeccoouutteerr ddeess CCDD aauuddiioo
Essayez donc workman ou xcdplayer.
77..22..44.. WWoorrkkmmaann oouu xxccddppllaayyeerr nnee mmaarrcchheenntt ppaass
Les fonctions de controle des fonctionnalites audio font partie de
l'ensemble des commandes de la norme SCSI-II. Les lecteurs qui ne sont
pas SCSI-II n'ont donc que peu de chances de marcher. De plus,
quelques lecteurs de CDROM SCSI-I et SCSI-II utilisent un ensemble de
commandes proprietaires au lieu des commandes de la norme SCSI-II. Il
existe une version de xcdplayer pour les lecteurs NEC - jetez un oeil
sur tsx-11.mit.edu au repertoire /pub/linux/BETA/cdrom.
Ces programmes peuvent egalement marcher avec quelques lecteurs de
CDROM non SCSI, si leurs pilotes implementent les memes ioctls que les
pilotes SCSI.
77..22..55.. LLeess ddiissqquueess ssuupppplleemmeennttaaiirreess ssuurr lleess cchhaarrggeeuurrss SSCCSSII nnee mmaarrcchheenntt
ppaass
La plupart des chargeurs de CDROM attribuent une unite logique a
chaque disque. Verifiez que vous avez bien un fichier special
(/dev/...) pour chaque plateau de votre chargeur (reportez-vous aux
chapitres ``Fichiers speciaux'' et ``Les unites logiques autres que la
premiere ne fonctionnent pas''.
77..33.. FFiicchhiieerrss ssppeecciiaauuxx
Les CDROM SCSI utilisent le majeur 11.
Les mineurs sont attribues dynamiquement (reportez-vous aux chapitres
``Disques'', ``Fichiers speciaux'' pour des exemples) le premier CDROM
trouve ayant le mineur 0, le deuxieme le mineur 1, etc.
La convention standard de nommage est la suivante :
/dev/sr{chiffre}, bien que certaines distributions aient utilise
/dev/scd{chiffre}. Par exemple :
/dev/sr0 /dev/scd0
/dev/sr1 /dev/scd1
88.. LLeess lleecctteeuurrss ddee bbaannddeess
Les informations de ce chapitre concernent les lecteurs de bandes.
88..11.. MMaatteerriieell ssuuppppoorrttee eett nnoonn ssuuppppoorrttee
Les peripheriques utilisant des tailles de blocs fixes ou variables
plus petites que la taille du buffer du pilote SCSI (32Ko dans les
sources de la distribution du noyau) sont geres.
Les parametres (taille de bloc, bufferisation, densite) sont regles
via des ioctls (habituellement par le programme mmtt) ; ils restent
actifs meme si le peripherique est ferme puis reouvert (ici,
peripherique est a prendre au sens : fichier special representant ce
peripherique).
Theoriquement, tous les lecteurs doivent marcher, y compris :
+o Lecteurs Archive Viper QIC (dont les modeles 150Mo et 525Mo)
+o Lecteurs Exabyte 8mm
+o Lecteurs Wangtek 5150S
+o Lecteurs Wangdat DAT
88..22.. PPrroobblleemmeess ffrreeqquueennttss
88..22..11.. LLee lleecctteeuurr ddee bbaannddee nn''eesstt ppaass rreeccoonnnnuu aauu ddeemmaarrrraaggee
Essayez de demarrer avec une bande dans le lecteur.
88..22..22.. IImmppoossssiibbiilliittee ddee lliirree ccoorrrreecctteemmeenntt ddeess bbaannddeess ccoommppoorrttaanntt
pplluussiieeuurrss ffiicchhiieerrss
En lisant des bandes avec plusieurs fichiers, le premier tar est
correct, mais le suivant echoue sans remontee d'erreurs. Un second
essai de tar reussit.
Les programmes utilisateur, tels que tar, ne savent pas interpreter
les marques de fichiers. Le premier tar lit la bande jusqu'a la fin du
fichier. Le second tar essaie de lire la marque de fichier (file mark)
et n'obtient aucune donnee. Par contre, la bande a depasse la marque
de fichier, si bien que la troisieme lecture lit le deuxieme fichier
de la bande.
Utilisez mmtt sur le fichier special attaquant le lecteur en mode 'non-
rembobinage' (no-rewind) pour avancer jusqu'au fichier suivant.
88..22..33.. LLaa ddeeccoommpprreessssiioonn eecchhoouuee
Les programmes de decompression ne sont pas capables de gerer les
zeros qui comblent le dernier bloc du fichier.
Pour eliminer les avertissements et les erreurs, mettez vos fichiers
compresses dans un fichier tar. Plutot que de faire :
tar cfvz /dev/nst0 fichier.1 fichier.2 ...
faites :
tar cfvz tmp.tar.z fichier.1 fichier.2 ...
tar cf /dev/nst0 tmp.tar.z
88..22..44.. PPrroobblleemmeess ddee lleeccttuurree ddee bbaannddeess ffaaiitteess ssuurr dd''aauuttrreess ssyysstteemmeess
Vous n'arrivez pas a relire une bande faite sur un autre systeme
d'exploitation ou bien un autre systeme d'exploitation n'arrive pas a
relire les bandes faites sous Linux.
Les differents systemes utilisent souvent des tailles de blocs
differentes. Sur un lecteur de bande utilisant une taille fixe, vous
allez avoir des erreurs en essayant de lire des blocs inscrits avec
une autre taille.
Pour lire ces bandes, vous devez ajuster la taille des blocs de votre
pilote de bandes a la taille avec laquelle la bande a ete ecrite. Vous
pouvez aussi essayer de le configurer pour qu'il utilise une taille
variable.
REMARQUE : cette taille est une taille physique de bloc et n'est pas
le facteur de blocage utilise par tar, dump et consors.
Vous pouvez le faire par la commande mmtt :
mt setblk <taille>
ou
mt setblk 0
pour indiquer au pilote d'utiliser une taille de bloc variable.
Notez que ces options de mmtt ne sont pas supportees par la version GNU
de mt qui est incluse dans certaines distributions de Linux. Utilisez
plutot la version mt derivee de BSD. Les sources devraient etre
disponibles a l'adresse
tsx-11.mit.edu:/pub/linux/ALPHA/scsi
SSTT__BBUUFFFFEERR__BBLLOOCCKKSS (definie dans le fichier
/usr/src/linux/drivers/scsi/st_options.h dans les noyaux recents et
/usr/src/linux/drivers/scsi/st.c dans les anciens noyaux) est
initialisee de maniere a autoriser une taille maximale des buffers de
32Ko. Editez le fichier precedent pour augmenter cette limite.
88..22..55.. MMeessssaaggee dd''eerrrreeuurr ""NNoo ssuucchh ddeevviiccee""
Tous les essais pour acceder a la bande se terminent par un message du
genre
"No such device".
Verifiez le type du fichier special representant votre lecteur. Ce
doit etre un fichier en mode caractere, les majeur et mineur devant
etre en concordance avec les valeurs definies dans le chapitre
``Fichiers speciaux''.
88..22..66.. LLeess lleeccttuurreess ddee bbaannddeess aa uunnee cceerrttaaiinnee ddeennssiittee mmaarrcchheenntt,, mmaaiiss
lleess eeccrriittuurreess eecchhoouueenntt
Plusieurs lecteurs de bandes acceptent les lectures a une densite
inferieure pour compatibilite avec des materiels plus anciens, mais
ils n'ecrivent pas a ces memes densites.
C'est le cas en particulier des lecteurs QIC, qui peuvent relire des
vieilles cassettes de 60Mo, mais qui ne savent plus ecrire que des
bandes de 120, 150, 250 ou 525Mo.
88..22..77.. LLee rreeppoossiittiioonnnneemmeenntt ddee llaa bbaannddee bbllooqquuee llee bbuuss SSCCSSII
Cela est frequent avec les equipements SCSI qui ne gerent qu'une
commande en attente a la fois (reportez-vous au chapitre
``Peripheriques multiples'' pour une explication plus detaillee, et
``Guide de l'acheteur : comparaison des fonctionnalites'' pour voir
quels lecteurs souffrent de cette limitation), bien que cela puisse
egalement etre du a un lecteur de bandes refusant les deconnexions.
Dans tous les cas, vous pouvez contourner ce probleme en editant le
fichier drivers/scsi/sr.c et en ajoutant une ligne
#define ST_NOWAIT
au debut. Regenerez ensuite le noyau.
Cela va avoir pour effet de retarder les eventuelles erreurs jusqu'a
la prochaine commande SCSI executee. Il est pour cela preferable de
faire
mt status
apres qu'une commande de repositionnement a ete demandee par mmtt. Cela
vous evitera d'ecraser des fichiers sur la bande si le positionnement
a echoue.
Vous pouvez aussi envisager de changer votre controleur pour un modele
mieux supporte ou de vous equiper d'un lecteur de bande plus recent,
si vous avez besoin d'utiliser ce contournement et que vous desiriez
ecrire plusieurs fichiers sur une meme bande.
88..33.. FFiicchhiieerrss ssppeecciiaauuxx
Les lecteurs de bandes SCSI utilisent le majeur 9.
Linux utilise le type dev_t sur 16 bits, dont 8 bits sont reserves
pour le mineur. Pour cette raison, les mineurs pour les bandes SCSI
sont affectes dynamiquement et commencent au plus petit numero
d'adapteur SCSI, peripherique ou unite logique.
Les mineurs des fichiers speciaux rembobinant les bandes commencent a
0, 0 etant le premier lecteur de bande SCSI (/dev/st0 cree par mmkknnoodd
//ddeevv//sstt00 cc 99 00), le deuxieme lecteur etant /dev/st1 (mmkknnoodd //ddeevv//sstt11 cc
99 11), etc.
Les mineurs des fichiers speciaux ne rembobinant pas les bandes ont le
bit de poids fort a 1, c'est-a-dire que /dev/nst0 a ete cree par :
mmkknnoodd //ddeevv//nnsstt00 cc 99 112288.
La convention standard de nommage est
/dev/nst{chiffre} pour les operations sans rembobinage
/dev/st{chiffre} pour les operations avec rembobinage
99.. PPiilloottee ggeenneerriiqquuee
Les informations contenues dans ce chapitre sont specifiques au pilote
SCSI generique.
99..11.. MMaatteerriieell ssuuppppoorrttee
Le pilote SCSI generique fournit une interface normalisee permettant
d'envoyer des commandes SCSI a tous les peripheriques SCSI - disques,
bandes, CDROM, chargeurs multi-disques, etc.
Tout equipement electriquement compatible avec votre carte SCSI doit
fonctionner.
99..22.. PPrroobblleemmeess ffrreeqquueennttss
Aucun :-)
99..33.. FFiicchhiieerrss ssppeecciiaauuxx
Les fichiers speciaux du pilote SCSI generique utilisent le mode
caractere, de majeur 21. A cause des memes contraintes que
precedemment, les mineurs sont attribues dynamiquement a partir de 0,
un par peripherique,
/dev/sg0
correspondant au plus petit peripherique ou unite logique sur le
premier controleur.
1100.. GGuuiiddee ddee ll''aacchheetteeuurr
Une question frequente est :
"Linux gere un nombre plutot eleve de controleurs differents. Quel
controleur dois-je acheter ?"
La reponse depend des performances que vous esperez ou dont vous avez
besoin, de la carte mere et des peripheriques que vous avez
l'intention de connecter a votre machine.
1100..11.. TTyyppeess ddee ttrraannssffeerrtt
Le facteur le plus important affectant les performances (en terme de
debit et de temps de reponse lors des E/S SCSI) est le type de
transfert utilise. La table ci-dessous liste les divers types de
transfert, les effets de chacun sur les performances et quelques
recommandations sur leur emploi.
TTyyppee ddee ttrraannssffeerrtt
Description / Performance / Recommandations
SSccrruuttaattiioonn ppuurree ((PPuurree PPoolllleedd))
Une carte d'E/S scrutee conduit le processeur central a faire
tout le traitement SCSI, y compris le protocole REQ/ACQ.
Meme un processeur rapide va etre plus lent a gerer les
sequences REQ/ACQ qu'une simple machine a etats finis. Le debit
peut descendre a 150Ko/s sur une machine rapide et parfois
60Ko/s sur une machine lente (a travers le systeme de fichiers).
Le pilote doit egalement se mettre en boucle (tight loop) tant
que le bus SCSI est occupe, ce qui conduit a une utilisation de
100% du processeur et a des temps de reponse deplorables lors
des E/S SCSI. Les lecteurs de CDROM lents qui ne se
deconnectent/reconnectent pas vont completement ecrouler le
systeme avec de telles cartes.
Non recommandees.
SSccrruuttaattiioonn iinntteerr--vveerrrroouuiilllleeee ((IInntteerrlloocckkeedd PPoolllleedd))
Les cartes utilisant des E/S a scrutation inter-verrouillee sont
principalement les memes que les cartes precedentes, le
protocole REQ/ACQ etant effectue conjointement avec les signaux
de protocole du bus PC. Tous les traitements SCSI hors protocole
REQ/ACQ sont geres par le processeur.
Avec de telles cartes, des pointes de 500-600Ko/s peuvent etre
mesurees a travers le systeme de fichiers.
De meme qu'avec les cartes a scrutation pure, le pilote doit se
mettre en boucle tant que le bus SCSI est occupe, ce qui rend
l'utilisation du processeur dependante des taux de transfert des
peripheriques et des deconnexions/reconnexions. L'utilisation du
processeur peut varier de 25% pour des lecteurs de CDROM simple
vitesse qui gerent proprement les deconnexions/reconnexions, a
100% pour les peripheriques rapides ou les lecteurs de CDROM
deficients qui n'arrivent pas a se deconnecter/reconnecter.
Sur mon 486-66, avec une carte T128, j'utilise 90% du processeur
pour un debit soutenu de 547Ko/s avec un disque dont le debit
maximum est de 1080Ko/s.
Ces cartes sont parfois acceptables pour des peripheriques lents
(bandes, CDROM) lorsque le prix est le principal critere.
SSccrruuttaattiioonn ppaarr FFIIFFOO ((FFIIFFOO PPoolllleedd))
Les cartes implementant une scrutation par FIFO utilisent un
tampon de taille reduite (typiquement 8Ko) entre le processeur
et le bus SCSI et possedent quelque intelligence. Le processeur
principal n'est plus mis a contribution que lors des transferts
de donnees a pleine vitesse avec la FIFO ou lorsqu'il termine le
traitement des interruptions FIFO pour les conditions vides, les
deconnexions/reconnexions, etc.
Les taux de transfert maximums devraient etre suffisants pour
traiter la plupart des peripheriques SCSI et peuvent atteindre
4Mo/s sur un Seagate Baracuda rapide avec une Adaptec 1520 en
utilisant des commandes SCSI directes de lecture de blocs de
64Ko.
L'utilisation du processeur central depend des taux de transfert
des peripheriques, les plus rapides generant le plus
d'interruptions et demandant donc plus de temps processeur. Bien
que le taux d'utilisation du processeur puisse etre important
avec des peripheriques rapides (jusqu'a 75%), le systeme reste
utilisable. Ces cartes offrent une excellente reponse
interactive avec des peripheriques defectueux qui ne se
deconnectent/reconnectent pas (typiquement, des lecteurs CDROM
bon marche).
Recommandees pour un usage personnel, pour un budget
raisonnable.
DDMMAA eessccllaavvee
Les pilotes pour les cartes mettant en oeuvre du DMA esclave
programment le controleur DMA du PC pour un canal lorsqu'elles
font un transfert de donnees et rendent le controle au
processeur principal.
Les taux de transfert sont habituellement penalises par les
mauvaises performances des controleurs DMA utilises sur les PC,
une telle carte 8-bits ne pouvant pas depasser les 140-150Ko/s.
La consommation du processeur est tres raisonnable, legerement
moins qu'avec les cartes a scrutation par FIFO. Ces cartes
tolerent parfaitement les peripheriques defectueux qui ne se
deconnectent/reconnectent pas (typiquement, des lecteurs CDROM
bon marche).
Acceptables pour les lecteurs CDROM lents, les lecteurs de
bandes, etc.
DDMMAA aa ccoonnttrroollee ddee bbuuss ((BBuussmmaasstteerriinngg DDMMAA))
Ces cartes sont intelligentes. Les pilotes pour ces controleurs
envoient dans une structure d'E/S une commande SCSI,
l'identificateur de la destination et de son unite logique,
ainsi que l'adresse de fin des donnees, puis ils avertissent la
carte qu'ils ont une commande pour elle. Le pilote rend la main
au systeme et la carte repond plus tard pour signaler qu'elle a
termine l'E/S.
Puisque l'intelligence est dans le firmware du controleur et non
dans le pilote, les pilotes pour ces cartes supportent
classiquement plus de fonctionnalites - transferts synchrones,
files marquees (tagged queuing), etc.
Avec les patches de lectures/ecritures groupees, des taux de
transferts a travers le systeme de fichiers atteignent
pratiquement 100% des performances maximales en ecriture et 75%
en lecture.
L'utilisation du processeur est reduite a son minimum, quelle
que soit la charge des E/S, avec 5% d'utilisation sur des acces
a un CDROM double vitesse via une Adaptec 1540 et 20% lors d'un
transfert soutenu a 1,2Mo/s sur un disque SCSI.
Recommandees dans tous les cas ou le prix n'est pas la priorite,
ou la carte mere n'est pas defectueuse (certaines de ces cartes
ne fonctionnent pas avec le controle de bus) et ou des
applications pour lesquelles le temps d'obtention des donnees
est plus important que le debit (le supplement (overhead) du a
l'utilisation d'un controleur de bus est de 3-4ms par commande)
ne seront pas utilisees.
1100..22.. DDeeccoouuppaaggee//RReeaasssseemmbbllaaggee ((SSccaatttteerr//ggaatthheerr))
Le second point le plus important pour les performances est la gestion
des E/S par decoupage/reassemblage. Le supplement d'execution d'une
commande SCSI est non negligeable (de l'ordre de plusieurs
millisecondes). Les controleurs de bus intelligents tels que l'Adaptec
1540 peuvent prendre 3-4ms pour traiter une commande SCSI avant meme
que la cible ne la recoive. Sur les peripheriques non bufferises, ce
supplement est toujours suffisant pour manquer un tour de galette, ce
qui conduit a des taux de transfert de 60Ko/s (sur un lecteur a 3.600
tours/minute) par bloc transfere. Ainsi, pour maximiser les
performances, il est necessaire de minimiser le nombre de commandes
SCSI envoyees pour transferer une certaine quantite de donnees en
augmentant le nombre d'octets transferes pour chaque commande. La
conception du cache des tampons de Linux fait que les blocs disque
contigus ne sont pas contigus en memoire. Avec les patches de
lectures/ecritures groupees, 4Ko utiles de donnees sont! ! !
contigus. La taille totale des blocs transferes en une seule commande
SCSI est donc de 1Ko * nombre de regions de decoupage/reassemblage
sans le patch et de 4Ko * nombre de regions avec. Nous avons determine
experimentalement que 64Ko est une valeur raisonnable pour une seule
commande SCSI - c'est-a-dire 64 buffers de decoupage/reassemblage sans
le patch, 16 avec. Suite au changement de 16Ko a 64Ko des transferts,
nous avons observe une amelioration de 50% du debit maximal, a travers
le systeme de fichiers, pour les ecritures et les lectures, a 100%
pour les premieres et 75% pour les secondes, avec une carte Adaptec
1540.
1100..33.. BBAALL ccoonnttrree nnoonn--BBAALL ((MMaaiillbbooxx vvss.. nnoonn--mmaaiillbbooxx))
Certains controleurs intelligents, comme les cartes Ultrastor, WD7000,
Adaptec 1540, 1740 et BusLogic ont utilise une interface de type boite
aux lettres, dans laquelle les commandes SCSI sont executees
simplement en placant une structure SCSI a une adresse memoire donnee
(BAL), en le signalant a la carte (c'est-a-dire en positionnant un
indicateur d'emission pour la BAL), puis en attendant une reponse
(courrier entrant). Grace a cette interface de programmation de haut
niveau, les utilisateurs peuvent souvent mettre a jour leur carte pour
beneficier des avantages des nouvelles fonctionnalites, telles que le
FAST ou le WIDE SCSI, sans modifications du logiciel. Les pilotes ont
tendance a etre plus simples, a offrir plus de fonctionnalites et a
etre plus stables.
D'autres controleurs intelligents, comme la famille des NCR53c7/8xx ou
les composants Adaptec AIC-7770/7870 (comprenant les cartes 274x, 284x
et 2940) utilisent une interface de programmation de moins haut
niveau. Leurs performances peuvent etre meilleures, puisque la charge
de travail peut etre repartie entre le processeur de la carte et le
processeur (plus rapide) principal de la machine. Ils offrent
egalement une plus grande souplesse pour la realisation de certaines
fonctionnalites (le mode cible (target mode) pour certains
peripheriques par exemple). De plus, ces cartes peuvent etre plus
economiques a la production (dans certains cas, cette economie se
retrouve au niveau du consommateur - voir les NCR). En contrepartie,
les pilotes sont plus compliques (comprenez : sont plus sujets a avoir
des erreurs) et ils doivent etre modifies pour prendre en compte les
fonctionnalites presentes sur les composants plus recents.
1100..44.. LLeess ttyyppeess ddee bbuuss
Le type du bus est le prochain choix a considerer (ISA, EISA, VESA et
PCI). Les personnes chargees du marketing clament souvent des debits
maximums (bandwidth) absurdes, bases sur des taux de transfert en
rafale (burst) qui relevent presque de la fiction et qui ne servent de
toute facon a rien. Par opposition, j'ai choisi de parler de valeurs
realistes, quotidiennes, basees sur les performances mesurees avec
divers peripheriques.
BBuuss
Debit maximum / description,
IISSAA
Le debit maximum est legerement meilleur que 5Mo/s pour des
cartes a controle de bus. Avec un bus ISA, l'arbitrage des
controleurs de bus est realise par un venerable DMA 8237 ; les
temps d'acquisition du bus sont relativement mediocres. Les
pilotes d'interruptions sont a trois etats (tri-state) ou sur
changement d'etat (edge triggered). Cela signifie que les
interruptions ne peuvent pas etre partagees. Generalement, l'ISA
n'est pas bufferise et le bus memoire de la machine hote est
occupe a chaque transfert. Aucun mecanisme n'existe pour
empecher une saturation du bus.
VVEESSAA
Le debit maximum se situe aux alentours de 30Mo/s. Certains
systemes VESA exploitent le bus en dehors de ses specifications,
ce qui les rend incompatibles avec certaines cartes. Tenez-en
compte au moment d'acheter votre materiel s'il ne beneficie pas
d'une garantie. Generalement, le VESA est non bufferise ; le bus
memoire de la machine hote est occupe a chaque transfert.
EEIISSAA
Le debit maximum se situe aux alentours de 30Mo/s, les
operations de controle de bus etant generalement plus rapides
que pour le VESA. Certains systemes EISA bufferisent le bus, ce
qui permet d'observer des transferts en rafale vers le bus
memoire de la machine hote, plus rapide, et de minimiser
l'impact sur les performances du processeur central. Les
gestionnaires d'interruptions EISA peuvent etre a trois etats
(tri-state), sur changement d'etat (edge triggered) ou actifs
sur collecteur ouvert (open collector level-active) ; cela
permet le partage des interruptions avec les autres
gestionnaires qui le gerent. Puisque l'EISA alloue un espace
d'adressage separe pour chaque carte, il est habituellement
moins sujet aux conflits de ressources que l'ISA ou le VESA.
PPCCII
Le debit maximum se situe aux alentours de 60Mo/s. La plupart
des systemes PCI utilisent des tampons d'ecriture differee
(write posting buffers) sur la carte, ce qui permet de minimiser
l'effet des transferts rapides de part et d'autre sur les
performances du bus et du processeur central. Les gestionnaires
d'interruptions PCI sont actifs sur collecteur ouvert ; cela
permet le partage des interruptions avec les autres
gestionnaires qui le gerent. Des mecanismes sont prevus pour
eviter la saturation du bus et pour permettre a l'esclave et au
maitre de suspendre une operation de controle de bus.
Puisque le PCI offre un mecanisme plug-n-play via des registres
de configuration reinscriptibles sur chaque carte, dans un
espace d'adressage separe, un systeme qui implemente
correctement la gestion PCI est plug-and play.
Le PCI est tres severe sur la longueur des pistes, la charge,
les specifications mecaniques, etc. et devrait finalement etre
plus fiable que le VESA ou l'ISA.
Pour resumer, le PCI est le meilleur bus pour PC ; il a
cependant des inconvenients. Le PCI en est encore a ses
balbutiements et, bien que les constructeurs aient corrige les
problemes, il circule toujours quelques vieilles cartes au
composant PCI ou au BIOS defectueux. Je recommanderais pour
cette raison que vous vous assuriez de pouvoir retourner le
materiel en cas de defaut. Si les plus recentes cartes PCI sont
veritablement plug-and-play, les anciennes cartes necessitaient
une intervention de la part de l'utilisateur pour positionner
correctement les cavaliers et configurer le logiciel
(l'affectation des interruptions par exemple). Bien que la
plupart des utilisateurs aient resolu leurs problemes PCI, cela
a demande du temps et je deconseillerais l'achat d'une carte PCI
si la disponibilite du systeme est tres critique.
Pour de nombreux peripheriques SCSI lents (disques a 2Mo/s ou moins,
lecteurs de CDROM, lecteurs de bandes), il n'y a pas de grandes
variations de debit en fonction de l'interface avec le bus du PC. Pour
les disques SCSI actuels (typiquement, les derniers disques haut de
gamme de plusieurs giga-octets ont un taux par tete de 4 a 5Mo/s et
plusieurs compagnies experimentent des disques a 14Mo/s par tete), le
debit sera nettement meilleur avec des controleurs sur des bus plus
rapides ; certains ont meme releve un facteur d'amelioration de 2,5 en
passant d'une carte ISA Adaptec 1542 a une carte PCI NCR53c810.
A l'exception des cas ou un mecanisme d'ecriture differee ou de
bufferisation des ecritures est mis en oeuvre, lorsqu'un des bus de
votre systeme est occupe, tous les autres bus sont inutilisables.
Ainsi, bien qu'une saturation du bus n'affecte pas les performances
SCSI, elle peut avoir un effet negatif sur la reponse interactive du
systeme. Par exemple, si vous avez un disque SCSI a 4Mo/s en ISA, vous
perdrez 80% de votre bande passante. Dans un systeme ISA/VESA, vous
n'obtiendrez pas mieux que 6Mo/s. La plupart du temps, l'impact sur
les taches en arriere plan est egalement tres sensible.
Notez bien qu'avoir plus de 16Mo de memoire n'implique pas
l'utilisation d'une carte SCSI a controle de bus ISA. Contrairement a
certains autres systemes d'exploitation, Linux effectue une double
bufferisation lors des transferts a acces direct memoire (DMA) sur un
controleur ISA a destination d'une zone au-dela des 16Mo. De tels
transferts ne sont penalises que de 1,5%, ce qui est tres raisonnable.
Pour terminer, la difference de prix pour des cartes a controle de bus
pour chacune de ces interfaces de bus est souvent minime.
Avec tout cela a l'esprit, en fonction de vos priorites, vos
preferences iront vers
Stabilite, installations critiques,
et pas de garantie EISA ISA VESA PCI
Performances et installations personnelles
PCI EISA VESA ISA
Comme je l'ai deja mentionne plus haut, le controle de bus (bus
mastering) plus que tout autre mode de transfert aura un impact
benefique sur les performances de tout le systeme et il doit etre plus
important dans votre choix que le type de bus au moment de votre achat
d'une carte SCSI.
1100..55.. PPeerriipphheerriiqquueess mmuullttiipplleess
Si vous envisagez d'utiliser plusieurs peripheriques sur votre bus
SCSI, assurez-vous que votre controleur est capable de supporter
plusieurs commandes en attente a un instant donne. C'est essentiel
pour les lecteurs de bandes et souhaitable si vous comptez melanger
des peripheriques de vitesses differentes (un lecteur de CDROM et un
disque dur, par exemple). Si le pilote Linux ne gere qu'une seule
commande a la fois, vous risquez de bloquer vos entrees/sorties avec
vos disques durs pendant que le lecteur de bandes rembobine ou va a la
fin de la cassette (cela peut durer une demi-heure). Avec deux
disques, le probleme n'est pas aussi sensible, bien que le debit
atteigne la moyenne des deux transferts, plutot que leur somme.
1100..66.. LLeess ooppttiioonnss SSCCSSII--II,, SSCCSSII--IIII,, SSCCSSII--IIIIII FFAASSTT eett WWIIDDEE,, eettcc..
Au fil des ans, le SCSI a evolue, les nouvelles versions de la norme
apportant de meilleures performances, des methodes pour augmenter les
debits, des commandes normalisees pour les nouveaux peripheriques et
de nouvelles commandes pour les peripheriques deja supportes.
En tant que telles, les evolutions de la version ne signifient rien.
Exception faite de quelques details mineurs (du genre : le SCSI-II
n'autorise pas l'option "initiateur unique" du SCSI-I), les versions
sont compatibles ascendantes, les nouvelles fonctionnalites etant
integrees en tant qu'options et n'etant pas obligatoires. La decision
d'appeler un peripherique SCSI SCSI-I, SCSI-II ou SCSI-III est donc
entierement un choix de vente.
1100..77.. CCoommppaarraaiissoonn ddeess ppiillootteess
Comparaison des pilotes (les chips supportes sont listes entre
parentheses)
Nombre de
commandes SG > 1
Pilote Mode de transfert simultanees limite cartes
total/LUN
AM53C974 Controle de bus, DMA 12s/1s 255s O
aha152x Scrutation par FIFO(8k) 7s/1s 255s N
(AIC6260,
AIC6360)
aha1542 Controle de bus, DMA 8s/1s 16 O
aha1740 Controle de bus, DMA 32s 16 N
aha274x Controle de bus, DMA 4s/1s 255s O
BusLogic Controle de bus, DMA 192/31 128s, 8192h O
(ces valeurs sont valables pour les BT-948/958/958D, les cartes plus
anciennes supportant moins de commandes)
eata_dma Controle de bus, DMA 64s-8192h/2-64 512s, 8192h O
fdomain Scrutation par FIFO(8k) 1s 64s N
(TMC1800, sauf le TMC18c30
TMC18c30, avec une FIFO de 2k
TMC18c50,
TMC36c70)
in2000* Scrutation par FIFO(2k) 1s 255s N
g_NCR5380 Scrutation pure 16s/2s 255s O
(NCR5380,
NCR53c80,
NCR5381,
NCR53c400)
gsi8* DMA esclave 16s/2s 255s
(NCR5380)
PAS16 Scrutation pure 16s/2s 255s O
(NCR5380) ou Scrutation inter-verrouillee
(quelques echecs sur certains systemes !)
seagate Scrutation inter-verrouillee
1s/1s 255s N
wd7000 Controle de bus, DMA 16s/1s 16 O
t128 Scrutation inter-verrouillee
16s 255s O
(NCR5380)
qlogic Scrutation inter-verrouillee
1s/1s 255s N
ultrastor Controle de bus, DMA 16s/2s 32 O
53c7,8xx Controle de bus, DMA
(NCR53c810,
NCR53c815,
NCR53c820,
NCR53c825)
rel5 1s/1s 127s N
rel10 8s/1s 127s O
Remarques :
1. Les pilotes marques d'un asterisque (*) ne sont pas inclus dans la
distribution du noyau et des images de demarrage binaires peuvent
ne pas etre disponibles.
2. Les nombres suffixes par un 's' representent des limites
arbitraires dans le logiciel, qui peuvent etre changees par un
#define au moment de la compilation.
3. Les limitations materielles sont indiquees par le suffixe 'h' et
peuvent differer des limites logicielles actuellement imposees par
les pilotes de Linux.
4. Des nombres sans suffixe peuvent indiquer soit des limitations
materielles, soit des limitations logicielles.
5. La version 5 du pilote NCR53c810 est incluse dans les noyaux
standard 1.2.x et 1.3.x ; la version 10 peut etre telechargee par
FTP anonyme.
6. A l'exception de la AM53C974, les cartes a controle de bus DMA sont
intelligentes ; les NCR executent du microcode depuis la memoire
principale, les AIC7770 executent leur microcode depuis de la
memoire embarquee sur le composant, toutes les autres utilisent une
interface du style BAL (mailbox).
1100..88.. CCoommppaarraaiissoonn ddeess ccoonnttrroolleeuurrss
Carte Pilote Bus Prix Remarques
Adaptec AIC-6260 aha152x ISA composant,
pas une carte
Adaptec AIC-6360 aha152x VLB composant,
pas une carte
(utilise dans la plupart des cartes multi-E/S
VESA/ISA avec des cartes principales Zenon)
Adaptec 1520 aha152x ISA
Adaptec 1522 aha152x ISA $80 1520 avec CdD
(Controleur de Disquet-
tes)
Adaptec 1510 aha152x ISA 1520 sans ROM de boot,
auto-detection echouent.
Adaptec 1540C aha1542 ISA
Adaptec 1542C aha1542 ISA 1540C avec CdD
Adaptec 1540CF aha1542 ISA FAST SCSI-II
Adaptec 1542CF aha1542 ISA $200 1540CF avec CdD
Adaptec 1640 aha1542 MCA
Adaptec 1740 aha1740 EISA n'est plus fabriquee
Adaptec 1742 aha1740 EISA n'est plus fabriquee
1740
avec CdD
Adaptec 2740 aha274x EISA
Adaptec 2742 aha274x EISA avec CdD
Adaptec 2840 aha274x VLB
Adaptec 2842 aha274x VLB avec CdD
Adaptec 2940 aha274x PCI
Always IN2000 in2000 ISA
BusLogic BT-948 BusLogic PCI $180 Ultra SCSI
BusLogic BT-958 BusLogic PCI $230 Wide Ultra SCSI
(reportez-vous au chapitre ``Cartes controleurs multi-maitres Bus-
Logic'' pour des details sur d'autres cartes BusLogic)
DPT PM2011 eata_dma ISA FAST SCSI-II
PM2012A eata_dma EISA FAST SCSI-II
PM2012B eata_dma EISA FAST SCSI-II
PM2021 eata_dma ISA FAST SCSI-II
PM2022 eata_dma EISA FAST SCSI-II
PM2024 eata_dma PCI FAST SCSI-II
PM2122 eata_dma EISA FAST SCSI-II
PM2322 eata_dma EISA FAST SCSI-II
PM2124 eata_dma PCI FAST SCSI-II
PM2124 eata_dma PCI FAST SCSI-II
PM2124 eata_dma PCI FAST SCSI-II
PM2124 eata_dma PCI FAST SCSI-II
PM2124 eata_dma PCI FAST SCSI-II
PM2124 eata_dma PCI FAST SCSI-II
PM2041W eata_dma ISA Wide
Terminaison unique
(Single-ended)
SCSI-II
PM2041UW eata_dma ISA Ultra Wide
Terminaison unique
PM2042W eata_dma EISA Wide
Terminaison unique
PM2042UW eata_dma EISA Ultra Wide
Terminaison unique
PM2044W eata_dma PCI Wide
Terminaison unique
PM2044UW eata_dma PCI Ultra Wide
Terminaison unique
PM2142W eata_dma EISA Wide
Terminaison unique
PM2142UW eata_dma EISA Ultra Wide
Terminaison unique
PM2144W eata_dma PCI Wide
Terminaison unique
PM2144UW eata_dma PCI Ultra Wide
Terminaison unique
PM3021 eata_dma ISA multi-canaux
raid/emplacements simm
PM3122 eata_dma EISA multi-canaux/raid
PM3222 eata_dma EISA multi-canaux
raid/emplacements simm
PM3224 eata_dma PCI multi-canaux
raid/emplacements simm
PM3334 eata_dma PCI Wide Ultra SCSI
multi-canaux
raid/emplacements simm
DTC 3290 aha1542 EISA bien qu'ils devraient
marcher, les materiels
DTC ne sont pas geres,
a cause de la politique
de diffusion des docu-
mentations
DTC 3130 53c7,8xx PCI '810
DTC 3130B 53c7,8xx PCI '815
DTC 3292 aha1542 EISA 3290 avec CdD
DTC 3292 aha1542 EISA 3290 avec CdD
Future Domain 1680 fdomain ISA CdD
Future Domain 3260 fdomain PCI
NCR53c810 (cartes 53c7,8xx PCI $60 composant, pas une
vendues (carte) carte. Les cartes ne
par FIC, Chaintech, possedent pas de BIOS,
Nextor, Gigabyte, etc. bien que la plupart des
Cartes avec composant vendues cartes non equipees de
par AMI, ASUS, J-Bond, NCR aient le BIOS SDMS
etc. Frequentes dans les
systemes PCI DEC)
NCR53c815 ( 53c7,8xx PCI $100 NCR53c810 + BIOS
Intel PCISCSIKIT,
NCR8150S, etc.)
NCR53c825 53c7,8xx PCI $120 Variante "WIDE" du
NCR53c815. Notez que
le pilote actuel de
Linux ne negocie pas de
transferts "WIDE".
Pro Audio Spectrum 16 pas16 ISA Carte son avec SCSI
Seagate ST01 seagate ISA $20 Le BIOS ne marche qu'a-
vec certains lecteurs
Seagate ST02 seagate ISA $40 ST01 avec CdD
Sound Blaster 16 SCSI aha152x ISA Carte son avec SCSI
Western Digital 7000 wd7000 ISA avec CdD
Trantor T128 t128 ISA
Trantor T128F t128 ISA T128 avec CdD et sup-
port pour des IRQs ele-
vees
Trantor T130B g_NCR5380 ISA
Ultrastor 14F ultrastor ISA avec CdD
Ultrastor 24F ultrastor EISA avec CdD
Ultrastor 34F ultrastor VLB
Remarques :
1. Trantor a ete recemment rachetee par Adaptec et certains de leurs
produits sont maintenant vendus sous le nom d'Adaptec.
2. Suite a un depot de bilan, il n'existe plus aucun support technique
a cette heure pour les cartes Ultrastor.
3. Le prix des cartes a controle de bus NCR53c810 n'est pas une erreur
de frappe ; il inclut le paquetage standard des pilotes ASPI/CAM
pour DOS, OS/2 et Windows (acces 32 bits) et d'autres pilotes
peuvent etre telecharges gratuitement.
Certains n'ont pas eu a se plaindre de la compagnie
SW (
[email protected]) (214) 907-0871 fax (214) 907-9339
Au 23 decembre 1995, leur prix etait de $53 pour les cartes '810.
4. Les derniers composants SCSI d'Adaptec font montre d'une
sensibilite inhabituelle aux problemes de cablage et de
terminaison. C'est pourquoi je ne recommanderais pas les cartes
Adaptec 154x C et CF, pas plus que la serie 2xxx.
A remarquer que ces problemes de fiabilite ne sont pas constates
sur les vieilles cartes 154x B et 174x A ou encore, d'apres ce que
j'en sais, sur les cartes a base des composants AIC-6360/AIC-6260
(1505, 1510, 1520, etc.).
La qualite de leur support technique a egalement baisse, les delais
se sont frequemment allonges et les employes sont incompetents
(arguant par exemple de certaines clauses de confidentialite sur
des documents, alors qu'il n'y en avait pas), parfois hostiles
(refusant de passer les questions a d'autres techniciens lorsqu'ils
sont incapables d'y repondre eux-memes).
5. Si des utilisateurs desirent une collaboration ou veulent etablir
des relations 'politiques' avec Adaptec, les remarques precedentes
doivent etres prises en consideration. Cela etant, les Adaptec
152x/1510/1505 sont meilleures que les autres cartes ISA dans la
meme gamme de prix et il y a des affaires a faire avec des cartes
usagees ou des surplus de 154x B et 1742, ce qui, a mon avis, doit
faire oublier le probleme du support.
6. Toutes les cartes DPT peuvent etre mises a jour avec des modules
memoire (cache) et raid. Toutes les cartes sont egalement
disponibles en versions "Wide" et/ou differentielles.
7. Les cartes NCR ne sont pas toutes equivalentes. Ainsi, alors que
l'ASUS SC200 utilise une terminaison active, la plupart des autres
cartes NCR53c810 utilisent une terminaison passive. Presque toutes
les cartes '825 ont une terminaison active, mais certaines ont une
ROM pour le BIOS tandis que d'autres ont une ROM Flash. La plupart
des cartes '825 ont un large connecteur externe, un large
connecteur interne et un connecteur interne fin, bien que quelques-
unes n'aient pas ce dernier (les cartes bon marche de CSC).
1100..99.. PPoouurr rreessuummeerr
La majorite des utilisateurs de cartes ISA, EISA, VESA et PCI seront
probablement mieux servis par les cartes multi-maitres BusLogic, de
par leur performance, leurs fonctionnalites (comme la terminaison
active) et leur compatibilite avec les Adaptec 1540. Un certain nombre
de modeles est disponible avec des interfaces EISA, ISA, PCI et VESA,
en terminaison simple ou differentielle, en 8 ou 16 bits. Les tous
recents modeles Ultra SCSI PCI, les BT-948/958/958D, incluent
egalement une ROM Flash pour faciliter les mises a jour du firmware et
une terminaison automatique "adaptative" (smart termination).
Les personnes desirant tirer les meilleures performances d'E/S peuvent
envisager l'acquisition de cartes de chez DPT, qui sont les seules a
gerer le RAID, le cache et plusieurs canaux SCSI.
Les personnes avec des systemes PCI pourront regarder du cote des
cartes basees sur le composant NCR53c8xx. Ce sont des cartes a
controle de bus ; on peut trouver des '810 a $53 l'unite (c'est-a-dire
moins cheres que les Adaptec 1520). Le magazine C't a evalue certaines
de ces cartes. Il ressort des tests qu'elles sont plus rapides que les
Adaptec 2940 et les BusLogic BT-946C (sous DOS) et qu'elles s'en
tirent honorablement sous Linux (jusqu'a 6Mo/s a travers le systeme de
fichiers). Les inconvenients de ces cartes comparees aux BusLogic est
qu'elles ne sont pas compatibles avec les Adaptec 1540, qu'elles
peuvent etre livrees avec ou sans terminaison active et que vous allez
devoir recuperer les dernieres versions des pilotes (standard dans les
noyaux 1.3.5x et disponibles par FTP pour les noyaux 1.2.x) pour
exploiter pleinement le materiel, et qu'enfin vous aurez peut-etre
plus de problemes qu'avec des interfaces de type BAL (mailbox) comme
sur les BusLogic ou les DPT.
S'il est important que tout marche du premier coup, une carte multi-
maitres BusLogic ou DPT est probablement le meilleur choix, la
simplicite des interfaces de type BAL comparee a la complexite des
interfaces des NCR53c8xx et des Adaptec AIC7xxx faisant la difference.
Ceux qui veulent des cartes non PCI pour un petit budget seront
certainement heureux de trouver leur bonheur dans les surplus de
cartes Adaptec 154x B ou 174x A, voire avec des clones d'Adaptec 1520
(aux alentours de $80) pour des cartes neuves. Ces cartes ont des
debits et une reponse interactive acceptables pour un prix modique.
1111.. AAffffeeccttaattiioonn ddeess nnuummeerrooss ddee mmiinneeuurr
Suite a l'utilisation par Linux du type dev_t sur 16 bits, 8 bits
etant reserves pour le mineur, les disques SCSI, les lecteurs de
bandes ou de CDROM et les fichiers speciaux generiques ont des mineurs
attribues dynamiquement, suivant l'algorithme suivant :
Pour tous les controleurs SCSI, de scsi0 jusqu'a scsiN
Pour tous les identificateurs SCSI sur le bus, de 0 a 7, sauf pour
l'identificateur du controleur courant
Pour toutes les unites logiques, de 0 a max_scsi_luns
- test de la combinaison <bus, cible, unite logique> en
envoyant une commande TEST UNIT READY. Si une unite logique
est supposee absente, ne plus continuer les tests pour le
couple <bus, cible>.
- emission d'une commande INQUIRY pour determiner ce qui
a ete trouve (type du peripherique, vendeur, modele,
version du firmware, etc.).
- renvoi du resultat de cette reconnaissance a une fonction
speciale d'identification propre a chaque pilote de haut
niveau present (par exemple le pilote de disques, de
lecteur de bandes, etc.). Attachement de ce peripherique
a la prochaine unite disponible pour chaque pilote qui
desire gerer ce peripherique. Le gestionnaire generique
va tous les attacher.
- s'il s'agissait d'un peripherique SCSI-I ou qui fait
partie d'une liste de peripheriques connus comme ne
gerant pas plusieurs unites logiques, stopper les tests
pour le couple <bus, cible>.
- s'il s'agissait d'un peripherique connu comme pouvant
gerer plusieurs unites logiques, une scrutation de toutes
les unites logiques potentielles est commencee, surchargeant
la valeur max_scsi_luns.
Il y a souvent des problemes avec ce genre d'approche, car si votre
systeme possede des peripheriques qui ne sont pas branches en
permanence, les mineurs vont dependre des peripheriques presents au
moment du boot. Cela peut etre genant, car les scripts de demarrage ou
le fichier /etc/fstab peuvent contenir des instructions pour monter
des partitions specifiques. Ces commandes peuvent echouer si le disque
a un mineur different d'une fois sur l'autre.
Ce probleme n'a pas ete completement resolu. Un programme qu'on peut
trouver sur tsx-11 cree une arborescence /dev/scsi basee sur le numero
d'hote, l'identificateur et le numero d'unite logique. Ce n'est pas
particulierement propre, mais cela permet d'eviter pas mal d'ennuis.
Une meilleure solution passera sans doute par le pseudo repertoire
/proc/scsi. Nous y travaillons actuellement, aussi pour l'instant ne
pouvons-nous pas dire quelle sera sa forme definitive. A l'heure ou
j'ecris ces lignes, cette approche semble prometteuse pour resoudre
certains de ces points.