Le SCSI HOWTO Linux par Drew Eckhardt, (transforme au for- mat linuxdoc-sgml par Dieter Faulbaum), (Adaptation francaise : Thierry Danis thierry.danis@hol.fr, 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 () 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 majordomo@vger.rutgers.edu 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 : linux-scsi@vger.rutgers.edu 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 . 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 * 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 and ends at 0x19c913 . Memorisez cette information. Entrez ensuite list 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 #include +#include #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=[,[,[,[,]]]] 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=[,,[,]] 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 ) (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 lnz@dandelion.com 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 techsup@buslogic.com, 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 : "BusLogic-announce-request@dandelion.com", avec la ligne "subscribe" dans le corps du message. 55..99.. LLeess ccoonnttrroolleeuurrss BBuussLLooggiicc FFllaasshhPPooiinntt (cette section est Copyright 1995 par Leonard N. Zubkoff ) 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. 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 techsup@BusLogic.com, 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 techsup@BusLogic.com ou au +1 408 654-0760 pour beneficier de leur offre. Leonard N. Zubkoff lnz@dandelion.com 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 "linux-eata-request@i-connect.net" 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//<> Pour ensuite desactiver les statistiques, faites : eecchhoo ""eeaattaa__ddmmaa nnoollaatteennccyy"" >>//pprroocc//ssccssii//eeaattaa__ddmmaa//<> 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 ( 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 majordomo@colorado.edu 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 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 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`7L6N]T!,=*Y M"@#W\8#",$N(%PG`=>^)VK0)S2'#=7-A9V4Z(&1P87)A;2`P>#@P#0H@("!O L 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 (swt@netcom.com) (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 en envoyant une commande TEST UNIT READY. Si une unite logique est supposee absente, ne plus continuer les tests pour le couple . - 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 . - 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.