4. Hôtes

Contenu de cette section

Cette section donne des informations spécifiques sur les divers adaptateurs hôtes qui sont suportés d'une manière ou d'une autre sous Linux.

4.1 Matériel supporté et non supporté

Pilotes des noyaux de distributions :

Adaptec 152x, Adaptec 154x (y compris les clones de Bustek et les cartes DTC 329x), Adaptec 174x, Adaptec 274x/284x/2940, les cartes se conformant au protocole EATA-DMA (toutes les DPT PMXXXXX/XX et SKXXXXX/XX sauf la PM2001, certaines cartes de NEC and ATT), Future Domain 850, 885, 950, et les autres cartes dans cette série (mais pas les 840, 880 et 881 à moins de faire le patch approprié), Future Domain 16x0 avec les circuits TMC-1800, TMC-18C30 ou TMC18C50, NCR53c8x, les ports SCSI de la PAS16, Seagate ST0x, Trantor T128/T130/T228, Ultrastor 14F, 24F et 34F, et Western Digital 7000.

Pilotes alpha : Richoh GSI-8

Nombre de pilotes alpha sont disponibles via FTP anonyme depuis ftp://tsx-11.mit.edu: /pub/linux/ALPHA/scsi

Pilotes en cours de développement, mais qui ne sont pas encore publiquement disponibles, et modifications nécessaires pour faire fonctionner des pilotes existants avec d'autres cartes : DPT PM2001

Les annonces SERONT effectuées quand les pilotes seront disponibles pour alpha tests publics. En attendant, ne faites pas perdre du temps aux développeurs en leur demandant par courrier des dates de sortie, etc.

Hôtes SCSI qui ne marchent pas :

Hôtes SCSI qui ne marcheront JAMAIS :

Si vous voulez faire tourner Linux sur un matériel non supporté, l'alternative consiste soit à écrire un pilote par vous-même (Eric Youngdale et moi-même sommes en général disposés à répondre aux questions techniques concernant les pilotes SCSI de Linux, soit d'en charger quelqu'un.

Plusieurs adaptateurs hôtes

Avec certains adaptateurs (Cf. buyers guide : Guide d'achat : comparaison des caractéristiques), on peut utiliser plusieurs adaptateurs hôtes du même type dans le même système. Dans ce cas, c'est généralement celui qui se trouve à l'adresse la plus basse qui est scsi0, celui à l'adresse suivante est scsi1, etc.

Dans tous les cas, il est possible d'utiliser plusieurs adaptateurs de types différents, pourvu qu'aucune de leurs adresses n'entre en conflit avec les autres. Les contrôleurs SCSI sont scrutés dans l'ordre spécifié par le tableau builtin_scsi_hosts[ ] de drivers/scsi/hosts.c, l'ordre étant actuellement

  1. Ultrastor
  2. Adaptec 151x/152x
  3. Buslogic
  4. Adaptec 154x
  5. Adaptec 174x
  6. Future Domain 16x0
  7. Always IN2000
  8. Generic NCR5380
  9. PAS16
  10. Seagate
  11. Trantor T128/T130
  12. NCR53c8xx
  13. EATA-DMA
  14. WD7000
  15. pilote de mise au point.

Dans la plupart des cas (par exemple, si vous n'essayez pas d'utiliser à la fois des pilotes Buslogic et Adaptec), cette liste peut être changée à votre convenance (comme en gardant les mêmes périphériques quand de nouveaux sont ajoutés au système sur un nouveau contrôleur) en déplaçant les entrées individuelles.

4.2 Problèmes habituels

Time-outs SCSI

Assurez-vous que les interruptions sont correctement autorisées, et qu'il n'y a aucun conflit d'IRQ, de DMA ou d'adresse avec d'autres cartes.

Echec des routines d'autodétection sur les cartes qui se fient au BIOS pour l'autodétection

Si votre adaptateur SCSI est l'un des suivants :

et n'est pas détecté au démarrage, par exemple avec le message

scsi : 0 hosts

ou qu'un message

scsi%d : type

n'est pas affiché pour chaque adaptateur SCSI supporté, installé dans le système, votre problème réside peut-être dans la routine d'autodétection qui ne reconnaît pas votre carte.

L'autodétection échouera avec les pilotes qui utilisent le BIOS pour l'autodétection s'il est désactivé. Vérifiez que votre BIOS est activé, et n'entre pas en conflit avec d'autres BIOS de périphériques.

L'autodétection échouera si la ``signature'' de la carte et/ou l'adresse du BIOS ne correspondent pas à ce qu'attend la routine.

Si le BIOS est installé, utilisez le DOS et DEBUG pour trouver une signature qui repèrera votre carte -

Par exemple, si votre carte réside en 0xc8000, faites sous DOS

debug
d c800:0
q

et envoyez un message au canal SCSI de la liste de diffusion avec le message ASCII résultant, avec la longueur et l'offset depuis l'adresse de base (0xc8000 dans ce cas). Remarquez que le texte exact est requis, et que vous devez fournir les portions hexa et ASCII du texte.

Si aucun BIOS n'est installé et que vous utilisez un pilote Adaptec 152x, Trantor T128 ou Seagate, vous pouvez forcer la détection par une option de ligne de commande ou de compilation.

Consultez la sous-section appropriée concernant votre carte SCSI ainsi que general flaky .

Echecs avec les cartes utilisant des E/S mappées en mémoire

(Y compris les cartes Trantor T128 et Seagate, mais pas les pilotes Adaptec, Generic NCR5380, PAS16 et Ultrastor)

Cela se produit souvent quand les ports d'E/S mappés en mémoire sont incorrectement cachés. L'espace d'adressage de la carte doit être marquée incachable dans le réglage XCMOS.

Si ce n'est pas possible, vous devrez entièrement désactiver le cache.

Si vous avez spécifié manuellement l'adresse de la carte, souvenez-vous que Linux a besoin de l'adresse réelle de la carte, et non du segment sur 16 bits auquel la documentation peut se référer. Par exemple, 0xc8000 serait correct, 0xc800 ne fonctionnerait pas et provoquerait une corruption de la mémoire.

``kernel panic : cannot mount root device'' au démarrage

sur une disquette contenant un pilote ALPHA

Il vous faudra éditer l'image binaire du noyau (avant ou après l'avoir écrit sur la disquette), et modifier quelques champs de deux octets (petit-boutien) afin de garantir son fonctionnement sur votre système.

  1. périphérique de swap par défaut à l'offset 502, doit être mis à 0x00 0x00
  2. taille du disque virtuel en 504, doit être réglé sur la taille de la disquette en Ko : 5,25" = 1200, 3,5" = 1440. Ce qui veut dire que les octets sont
    3,5" : 0xA0 0x05
    5,25" : 0xB0  0x04
    
  3. périphérique racine en 508, doit être 0x00 0x00, c'est à dire le périphérique de démarrage.

Ecrivez le fichier sur une disquette par dd ou rawrite. Insérez la disquette dans le premier lecteur, attendez qu'il vous demande le root disk, et insérez celui de votre distribution.

Installation d'un pilote de périphérique non inclus dans le noyau de la distribution

Vous devez commencer avec la version du noyau utilisée par l'auteur du pilote. On trouve en général une référence à cette révision dans la documentation du pilote.

On trouve diverses révisions du noyau sur ftp://nic.funet.fi/pub/OS/Linux/PEOPLE/Linus

dans linux-version.tar.gz

Ils sont également mirrorisés sur tsx-11.mit.edu et d'autres sites.

cd /usr/src.

Enlevez vos anciens sources Linux, mais si vous voulez en garder une copie de sauvegarde

mv linux linux-old

Désarchivez

gunzip <linux-0.99.12.tar.gz | tar xvfp -

Appliquez les patches. Ils sont relatifs à un répertoire du système de fichiers. L'examen des lignes de fichier de sortie dans le fichier de patch permet de le repérer (grep sur ˆ---) ; par exemple, les patches avec ces lignes

--- ./kernel/blk_drv/scsi/Makefile

--- ./config.in Wed Sep  1 16:19:33 1993

ont leurs fichiers relatifs à /usr/src/linux.

Extrayez les sources des pilotes à l'endroit approprié. Vous pouvez entrer

tar tfv patches.tar

pour obtenir un listing, puis déplacer les fichiers (les fichiers de pilotes SCSI doivent résider en /usr/src/linux/ kernel/drivers/scsi).

Vous pouvez soit entrer dans le répertoire auquel ils sont relatifs et entrer

patch -p0 <patch_file

soit dire au patch d'enlever des composants de début du chemin. Par exemple, si les fichiers commencent par

--- linux-new/kernel/blk_drv/scsi/Makefile

et que vous voulez les appliquer dans /usr/src/linux, vous pouvez changer de répertoire vers /usr/src/linux et entrer

patch -p1 < patches

pour enlever le composant ``linux-new''.

Après avoir appliqué les patches, cherchez s'il y a des rejets de patch, qui prendront le nom du fichier rejeté avec un suffixe # ajouté.

find /usr/src/linux/ -name "*#" -print

S'il en existe, regardez-les. Dans certains cas, les différences tiendront aux identificateurs RCS et seront sans danger. Dans d'autres cas, il vous faudra appliquer manuellement d'importantes parties. Une documentation sur les fichiers diff et patch sont en dehors du champ d'application de ce document.

Voyez également canb kernel : Configuration et construction du noyau

Installation d'un pilote qui n'a pas de patches

Dans certains cas, l'auteur d'un pilote peut ne pas offrir de patches avec les fichiers .c et .h qui composent son pilote, ou les patches peuvent ne s'appliquer qu'à une vieille révision du noyau et ne pas s'intégrer proprement.

  1. Copiez les fichiers .c et .h dans /usr/src/linux/drivers/scsi
  2. Ajoutez l'option de configuration Editez /usr/src/linux/config.in, ajoutez une ligne dans la section
    * SCSI low-level drivers
    
    puis ajoutez une variable booléenne de configuration pour votre pilote. Par exemple,
    bool 'Always IN2000 SCSI support' CONFIG_SCSI_IN2000 y
    
  3. Ajoutez les entrées de makefile Editez /usr/src/linux/drivers/scsi/Makefile et ajoutez une entrée comme
    ifdef CONFIG_SCSI_IN2000
    SCSI_OBS := $(SCSI_OBJS) in2000.o
    SCSI_SRCS := $(SCSI_SRCS) in2000.c
    endif
    

    avant la ligne
    scsi.a: $(SCSI_OBJS)
    

    du makefile, où le fichier .c est le fichier source que vous avez copié et le fichier .o est le nom de base du fichier .c avec un suffixe .o.
  4. Ajoutez les points d'entrée Editez /usr/src/linux/drivers/scsi/hosts.c et ajoutez un #include pour le fichier d'en-tête, conditionné par la définition de préprocesseur CONFIG_SCSI que vous avez ajouté au fichier de configuration. Par exemple, après
    #ifdef CONFIG_SCSI_GENERIC_NCR5380
    #include "g_NCR5380.h"
    #endif
    

    vous pouvez ajouter
    #ifdef CONFIG_SCSI_IN2000
    #include "in2000.h"
    #endif
    

    Vous aurez aussi besoin d'ajouter l'entrée Scsi_Host_Template dans le tableau scsi_hosts[ ]. Regardez dans le fichier .h, et vous devriez trouver un #define qui ressemble à quelque chose comme ceci :
    #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}
    

    Prenez le nom de la définition du préprocesseur, et ajoutez-le dans le tableau scsi_hosts[ ], conditionné par la définition du symbole de préprocesseur que vous avez utilisé dans le fichier de configuration. Par exemple, après
    #ifdef CONFIG_SCSI_GENERIC_NCR5380
    GENERIC_NCR5380,
    #endif
    

    vous pouvez ajouter
    #ifdef CONFIG_SCSI_IN2000
    IN2000,
    #endif
    

Voyez aussi canb kernel : Configuration et construction du noyau

4.3 Adaptec 152x, 151x, Sound Blaster 16 SCSI, SCSI Pro, Gigabyte, et autres produits basés sur AIC 6260/6360 (Standard)

Configurations supportées :

Adresses du BIOS:

0xd8000, 0xdc000, 0xd0000, 0xd4000, 0xc8000, 0xcc000, 0xe0 000, 0xe4000.

Ports:

0x140, 0x340

IRQ:

9, 10, 11, 12

DMA:

non utilisé.

IO:

port mapped

Autodétection:

Fonctionne avec de nombreuses cartes comportant un BIOS. Toutes les autres cartes, y compris l'Adaptec 1510 et la Sound Blaster 16 SCSI, doivent utiliser la ligne de commande du noyau ou une option de compilation.

Forçage d'autodétection:

Aucun

Compilation:

Définir PORTBASE, IRQ, SCSI_ID, RECONNECT de façon appropriée, voir Définitions

ligne de commande du noyau

aha152x=< PORTBASE> ,< IRQ> ,< SCSI-ID> , < RECONNECT> Généralement, SCSI-ID sera à 7 et RECONNECT différent de zéro. Pour forcer la détection à 0x340, IRQ 11, et SCSI-ID 7, en permettant la déconnexion/reconnexion, vous devez utiliser l'option de ligne de commande suivante :

aha152x=0x340,11,7,1

Problèmes dus à l'ancienneté, résolus par mise à jour :

Le pilote échoue avec des cartes VLB. Il existait un problème de temporisation avec les noyaux antérieurs à la révision 1.0.5.

Définitions :

AUTOCONF :

utiliser la configuration que renvoie le contrôleur (uniquement 152x)

IRQ :

forcer le canal d'interruption (9,10,11 or 12) (défaut 11)

SCSI_ID :

forcer le scsiid de AIC-6260 (0-7) (défaut 7)

RECONNECT :

forcer la déconnexion/reconnexion/multiple

commande en attente :

mettre à non-zéro pour activer, zéro pour désactiver.

DONT_SNARF :

Ne pas enregistrer les ports (pl12 et en-dessous)

SKIP_BIOSTEST :

Ne pas tester la signature du BIOS (AHA-1510 ou BIOS désactivé)

PORTBASE :

Forcer la base des ports. Ne pas essayer de détecter

4.4 Adaptec 154x, AMI FastDisk VLB, Buslogic, DTC 329x (Standard)

Configurations supportées :

Ports :

0x330 et 0x334

IRQs :

9, 10, 11, 12, 14, 15

Canaux DMA :

5, 6, 7

IO :

port mapped, bus master

Autodétection :

fonctionne avec toutes les configurations supportées, ne demande pas de BIOS installé.

Forçage d'autodétection :

aucun

Note :

Les cartes sans suffixe, ainsi que les premières cartes dont le suffixe est 'A' ne supportent pas le scatter/gather, et ne fonctionnent donc pas. On peut cependant les faire plus ou moins fonctionner si AHA1542_SCATTER est mis à 0 dans drivers/scsi/aha1542.h.

Note :

Buslogic fabrique une série de cartes compatibles par logiciel avec l'Adaptec 1542, et celles-ci existent sous les formes ISA, VLB et EISA.

Problèmes dûs à l'ancienneté, résolus par mise à jour :

  1. Les révisions du noyau Linux antérieures à .99.10 ne supportent pas la révision 'C'.
  2. Les révisions du noyau Linux antérieures à .99.14k ne supportent pas les options de la révision 'C' concernant
    • le support du BIOS pour le mapping étendu des disques > 1 Go
    • Support du BIOS pour > 2 disques
    • Support du BIOS pour l'autoscan du bus SCSI
  3. Les révisions du noyau Linux antérieures à la .99.15e ne supportent pas la 'C' avec le support du BIOS activé pour > 2 disques et le support du BIOS désactivé pour le mapping étendu des disques > 1Go.
  4. Les révisions du noyau Linux antérieures à la .99.14u ne supportent pas les révisions 'CF' de la carte.
  5. Les révisions du noyau Linux antérieures à la 1.0.5 ont un effet de compétition (race condition) quand plusieurs périphériques sont raccordés en même temps.

Problèmes habituels :

  1. On obtient des erreurs inattendues avec une carte 154xC ou 154xCF. Les premiers exemplaires des cartes 154xC avaient un slew rate important sur l'un des signaux SCSI, ce qui donnait des réflexions de signal quand des câbles d'impédance incorrecte étaient utilisés. Les nouvelles cartes ne se comportent pas vraiment mieux, et souffrent également d'une extrême sensibilité au câblage et à la terminaison. Voyez également Problèmes habituels numéros 2 et 3 et la section common problems : Problèmes habituels, et la section common problemsgeneral flaky : Défaillance générale.
  2. Erreurs inattendues avec une 154xC ou 154x connectée à la fois à des périphériques internes et externes. Il s'agit probablement d'un problème de terminaison. Il faut désactiver le switch 1 pour utiliser l'option logicielle de désactivation de terminaison de l'adaptateur hôte. Voyez également Problèmes habituels numéros 2 et 3 et la section common problems : Problèmes habituels, et la section common problemsgeneral flaky : Défaillance générale.
  3. Le sous-système SCSI se bloque complètement. Il existe des cas dans lesquels les bloquages semblent se produire quand plusieurs périphériques sont simultanément en activité. Dans ce cas, vous pouvez essayer de contacter le fabricant des périphériques afin de voir si des mises à jour de logiciel embarqué susceptibles de corriger le problème sont disponibles. En dernier recours, vous pouvez rentrer dans aha1542.h et changer AHA1542_MAILBOX en 1. Ceci vous limitera à une seule commande en suspens à la fois sur le bus SCSI, et peut améliorer la situation. Cette solution peut se révéler problématique si vous utilisez des lecteurs de bandes ou des CD-ROM lents sur le bus. Voyez également Problèmes habituels numéros 2 et 3 et la section common problems : Problèmes habituels, la section common problemsgeneral flaky : Défaillance générale, et la section scsi lockup : Blocages SCSI.
  4. Un message ``Interrupt received, but no mail'' est affiché au démarrage et vos périphériques SCSI ne sont pas détectés. Désactivez les options du BIOS destinées au support du mapping étendu pour les disques > 1Go, le support de plus de deux disques, et pour l'autoscan du bus. Ou installez une version de Linux supérieure ou égale à .99.14k.

4.5 Adaptec 174x

Configurations supportées :

Slots :

1-8

Ports :

carte EISA, sans objet

IRQs :

9, 10, 11, 12, 14, 15

Canaux DMA :

carte EISA, sans objet

IO :

port mapped, bus master

Autodétection :

fonctionne avec toutes les configurations supportées

Forçage d'autodétection :

aucun

Note :

Cette carte n'est plus fabriquée par Adaptec.

Problèmes habituels :

  1. Si le pilote de l'Adaptec 1740 affiche le message ``aha1740: Board detected, but EBCNTRL = %x, so disabled it.'' votre carte a été désactivée parce qu'elle ne tournait pas en mode étendu. Les cartes tournant en mode 1542 standard ne sont pas supportées.

4.6 Adaptec 274x, 284x, 294x (Standard)

Des révisions plus récentes peuvent être trouvées sur ftp://ftp.cpsc.ucalgary.ca /pub/systems/linux/aha274x/aha274x-pre-alpha.tar.gz

Configurations supportées :

274x:

Slots EISA :

1-12

IRQs :

Toutes

IO :

port mapped, bus master

284x :

Ports :

Tous

IRQs :

Toutes

Canaux DMA :

Tous

294x

PCI

Note :

Le BIOS DOIT être activé

Note :

Le canal B des cartes 2742AT est ignoré.

4.7 Toujours IN2000 (ALPHA)

Pilote ALPHA disponible sur ftp://tsx-11.mit.edu/pub/linux/ALPHA/SCSI/in2000 . Le pilote est in2000.tar.z, le noyau bootable est zImage

Port :

0x100, 0x110, 0x200, 0x220

IRQs :

10, 11, 14, 15

DMA :

inutilisé

IO:

port mapped

Autodétection :

BIOS non requis

Forçage d'autodétection :

aucun

Problèmes habituels :

  1. On connaît certains problèmes sur les systèmes qui ont des disques IDE et avec le swapping.

4.8 EATA: DPT Smartcache, Smartcache Plus, Smartcache III (Standard)

Cartes supportées :

Toutes celles qui supportent le protocole EATA-DMA (pas la PM2001).

DPT Smartcache :

PM2011 PM2012A PM2012B

Smartcache III :

PM2021 PM2022 PM2024 PM2122 PM2124 PM2322

SmartRAID :

PM3021 PM3222 PM3224 nombre de ces cartes sont aussi disponibles en version SKXXXX, qui sont également suportées.

Configuration supportées :

Slots :

Tous

Ports :

Tous

IRQs :

Toutes, level & edge triggered

Canaux DMA :

ISA ALL, EISA/PCI sans objet

IO :

port mapped, bus master

Canaux SCSI :

Tous

Autodétection :

fonctionne avec toutes les configurations supportées

Compilation :

diskgeometry dans eata_dma.h pour les géométries inhabituelles provenant du vieil utilitaire DPTFMT. La dernière version du pilote EATA-DMA et un disque de démarrage Slackware devrait être disponible sur : ftp://ftp.uni-mainz.de/pub/Linux/arch/i386/system/EATA/

Problèmes habituels :

  1. Le pilote IDE détecte l'interface ST-506 de la carte EATA.
    1. Cela ressemblera à l'un des deux exemples suivants :
      hd.c: ST-506 interface disk with more than 16 heads detected,
      probably due to non-standard sector translation.  Giving up.
      (disk % d: cyl=% d, sect=63, head=64)
      
      hdc: probing with STATUS instead of ALTSTATUS
      hdc: MP0242 A, 0MB w/128KB Cache, CHS=0/0/0
      hdc: cannot handle disk with 0 physical heads
      hdd: probing with STATUS instead of ALTSTATUS
      hdd: MP0242 A, 0MB w/128KB Cache, CHS=0/0/0
      hdd: cannot handle disk with 0 physical heads
      
      Si le pilote IDE se sent vraiment mal, c'est à dire que vous ne pouvez pas accéder à votre (vrai) matériel IDE, changez le port d'E/S et/ou l'IRQ de la carte EATA.
    2. Si le pilote IDE trouve du matériel qu'il peut gérer, par exemple des disques durs d'une capacité <=504 Mo, il allouera le port d'E/S et l'IRQ ce qui fait que le pilote EATA ne pourra pas les utiliser. Dans ce cas, changez également le port d'E/S et l'IRQ (!= 14, 15).
  2. Certaines vieilles cartes SK2011 ont un logiciel embarqué défectueux. Contactez le support clientèle pour obtenir une mise à jour.

4.9 Future Domain 16x0 avec circuit TMC-1800, TMC-18C30, TMC-18C50 ou TMC-36C70.

Configurations supportées :

BIOS :

2.0, 3.0, 3.2, 3.4, 3.5

Adresses du BIOS :

0xc8000, 0xca000, 0xce000, 0xde000

Ports :

0x140, 0x150, 0x160, 0x170

IRQs :

3, 5, 10, 11, 12, 14, 15

DMA :

inutilisé

IO:

port mapped

Autodétection :

fonctionne avec toutes les configurations supportées, requiert un BIOS installé

Forçage d'autodétection :

aucun

Problèmes dus à l'ancienneté, résolus par mise à jour :

  1. Les versions anciennes ne supportent pas le circuit TMC-18C50, et échoueront avec les nouvelles cartes.
  2. Les versions anciennes ne disposent pas des signatures les plus courantes pour l'autodétection.
  3. Les versions antérieures à celle de Linux 1.0.9 et 1.1.6 ne supportent pas le nouveau circuit SCSI ou le BIOS 3.4.

4.10 NCR5380 / T130B générique

Configurations supportées et non supportées :

Ports:

tous

IRQs:

toutes

DMA:

inutilisé

IO:

port mapped

Autodétection :

aucune

Forçage d'autodétection :

Compilation :

Definir GENERIC_NCR5380_OVERRIDE en tant que tableau de n-uplets avec port, irq, dma, type de carte - par exemple


#define GENERIC_NCR5380_OVERRIDE {{0x330, 5, DMA_NONE, BOARD_NCR5380}}

pour une carte NCR5380 avec un port 330, IRQ 5.


#define GENERIC_NCR5380_OVERRIDE {{0x350, 5, DMA_NONE, BOARD_NCR53C400}}

pour une T130B avec un port 0x350.

Les anciennes versions du code éliminent l'entrée BOARD_* .

Les IRQ symboliques IRQ_NONE and IRQ_AUTO peuvent être utilisées.

Ligne de commande du noyau :

  • ncr5380=port,irq
  • ncr5380=port,irq,dma
  • ncr53c400=port,irq
255 peut être utilisé pour aucune IRQ, 254 pour autodétection d'IRQ.

Problèmes habituels :

  1. Utilisation de la carte T130B avec l'ancien pilote NCR5380 générique (release 6 pré-publique) qui ne supporte pas l'option de ligne de commande ncr53c400. Les registres compatibles NCR5380 se situent à l'offset 8 depuis l'adresse de base. Si votre adresse est 0x350, il vous faut donc utiliser
    ncr53480=0x358,254
    
    sur la ligne de commande du noyau.

Problèmes dûs à l'ancienneté, résolus par mise à jour :

  1. Le noyau se bloque pendant un accès disque avec une T130B ou d'autres cartes NCR53c400 Les versions de la release 6 pré-publique du pilote de la NCR5380 générique ne supporte pas les interruptions sur ces cartes. Mettre à jour.

Notes :

le pilote générique ne supporte pas encore le DMA, ni le pseudo-DMA.

4.11 NCR53c8xx (Standard)

Configurations supportées et non supportées :

Adresses de base :

Toutes

IRQs :

Toutes

Canaux DMA :

PCI, sans objet

IO:

port mapped, bus mastering

Autodétection :

requiert un BIOS PCI et en utilise les routines pour rechercher les périphériques et lire l'espace de configuration

Le pilote utilise les valeurs préprogrammées dans certains registres à l'initialisation, un BIOS doit donc être installé.

Problèmes dûs à l'ancienneté, résolus par mise à jour :

  1. Certaines versions de Linux avaient un problème avec le swapping. Voir la section swap hangs : Le système plante au swapping
  2. Les vieilles versions de Linux ne reconnaissaient pas les cartes ...815 et ...825.

Problèmes habituels :

  1. De nombreux utilisateurs ont rencontré des problèmes où le circuit fonctionnait correctement sous DOS, mais échouait sous Linux avec un timeout sur le test 1 en raison d'une interruption perdue. Il s'agit souvent d'une inadéquation entre le jumper matériel de l'IRQ pour un périphérique sur la carte mère et la valeur présente dans la CMOS. Il peut aussi s'agir d'un INTB, INTC ou INTD PCI sélectionné sur une carte PCI dans un système qui ne supporte que l'INTA PCI. Enfin, PCI devrait utiliser des interruptions déclenchées par le niveau (level-sensitive) plutôt que par le front du signal (edge-triggered). Vérifiez que votre carte est réglée pour être level-sensitive, et en cas d'échec, essayez edge-triggered car votre système peut être défectueux. Ce problème est fréquent avec certaines cartes-mères Viglen, dont les réglages de cavaliers d'IRQ ne correspondent PAS à ce qui est indiqué dans la documentation. On m'a dit que l'IRQ 5 est en fait l'IRQ 9, ceci dépendant en fait de votre système.
  2. Des blocages se produisent en utilisant en même temps un S3928P, X11 et le circuit NCR en même temps. Il existe des dysfonctionnements dans (au moins) certains circuits S3928P. A éviter.
  3. Un message s'affiche au démarrage, disant que l'I/O mapping a été désactivé parce que les bits 0..1 de l'adresse de base indiquent un ``non I/O mapping'' Il s'agit là d'un bug du BIOS sur certaines machines qui se solde par des lectures de dwords des registres de configuration renvoyant les words de 16 bits échangés.
  4. Certains systèmes ont des problèmes si le ``write posting'' PCI ou le tamponnage CPU->PCI sont activés. En cas de problème, désactivez ces options.
  5. Certains systèmes avec le logiciel NCR SDMS sur un ROM BIOS embarqué et dans le BIOS système sont incapable de booter le DOS. La désactivation de l'image en premier lieu devrait régler ce problème.
  6. Certains systèmes possèdent des BIOS complètement défectueux. N'envoyez aucun rapport de bug avant d'être sûr de disposer de la dernière ROM du fournisseur.
    • Les cartes Intel P90 requièrent la révision 1.00.04.AX1

4.12 Seagate ST0x/Future Domain TMC-8xx/TMC-9xx

Configurations supportées et non supportées :

Adresses de base :

0xc8000, 0xca000, 0xcc000, 0xce000, 0xdc000, 0xde000

IRQs :

3, 5

DMA :

inutilisé

IO:

memory mapped

Autodétection :

ne recherche que l'adresse, l'IRQ est censée être 5, demande un BIOS installé.

Forçage d'autodétection :

A la compilation :

Définir OVERRIDE par l'adresse de base, CONTROLLER par FD ou SEAGATE selon le cas, et IRQ par l'IRQ.

ligne de commande du noyau :

st0x=adresse,irq ou tmc8xx=adresse,irq (ne fonctionne que pour .99.13b et au-delà)

Problèmes dus à l'ancienneté, résolus par mise à jour :

  1. Les versions antérieures à celle du noyau .99.12 de Linux avaient un problème de handshaking avec certains périphériques lents. Voici ce qui se passe quand vous écrivez des données sur le bus
    1. Ecrire l'octet sur le registre de données, qui est asserted au bus
    2. time_remaining = 12us
    3. attendre tant que time_remaining > 0 et que REQ n'est pas asserted
    4. si time_remaining > 0, assert ACK
    5. attendre tant que time_remaining > 0 et que REQ est asserted
    6. deassert ACK
    Le problème se produit sur des périphériques lents, qui exécutent les commandes pendant la lecture, où le handshake REQ/ACK prend plus de 12us ; REQ ne passe pas à false alors que c'est ce à quoi s'attend le pilote, qui se met à envoyer plusieurs octets de données à chaque impulsion REQ.
  2. Sous Linux .99.12, un bug a été introduit quand j'ai corrigé le code d'arbitrage, provoquant ainsi des échecs de sélections sur certains systèmes. Problème réglé avec .99.13.

Problèmes habituels

Timeouts de commande

Ceux-ci se produisent quand Linux essaye de lire la table de partition ou au cours d'autres accès aux disques.

La carte est livrée réglée par défaut pour MS-DOS, c'est à dire que les interruptions sont désactivées. Pour les réactiver sur la Seagate, utilisez le cavalier W3 (ST01) ou JP3 (ST02) et connectez les broches F-G pour sélectionner l'IRQ 5.

Certains périphériques ne fonctionnent pas

Le pilote ne peut pas gérer certains périphériques, en particulier les lecteurs de bandes et les CD-ROM bas de gamme.

La Seagate relie le handshaking REQ/ACK du bus SCSI aux signaux IO CHANNEL READY et (optionnellement) OWS du bus du PC. Elle ne vous dit malheureusement pas quand le compteur du chien de garde s'arrête, et il n'y a pas moyen d'être sûr que REQ est descendu, et vous pouvez finir par voir un pulse REQ comme plusieurs pulses.

La solution implique l'utilisation d'une courte boucle destinée à voir si REQ est descendu, avec un timeout au cas où on n'attrape pas la transition due à une interruption, etc. Il en résulte une dégradation des performances, et il n'est donc pas désirable de l'appliquer à tous les périphériques SCSI. Elle est sélectionnée pour chaque périphérique avec le champ ``borken'' du périphérique SCSI concerné dans le tableau scsi_devices. En cas de problèmes, vous devriez essayer d'ajouter votre périphérique à la liste de ceux pour lesquels borken n'est pas remis à zéro (actuellement, uniquement les CD-ROM TENEX).

Future Domain ne fonctionne pas

Une carte Future Domain (comme les 840, 841, 880 et 881) ne fonctionne pas.

Quelques cartes Future Domain utilisent le mapping de registre de la Seagate, et les bits MSG et CD du registre d'état sont échangés.

Il faut éditer seagate.h, échanger les définitions de STAT_MSG et de STAT_CD, et recompiler le noyau avec CONTROLLER défini en SEAGATE, IRQ et OVERRIDE étant correctement spécifiés.

HDIO_REQ ou HDIO_GETGEO échouent

Des messages d'erreurs s'affichent pendant le fdisk du disque, indiquant que les ioctl HDIO_REQ ou HDIO_GETGEO ont échoué...

Il faut préciser les têtes, les secteurs et les cylindres. Vous pouvez le faire depuis le menu de fonctions supplémentaires. Voyez la section partitioning : Partitionnement

fdisk échoue

Après avoir spécifié manuellement la géométrie du disque, les tentatives ultérieures de lectures de la table de partition se soldent par des messages d'erreur du type : limite de partition hors d'une limite de cylindre, les limites physiques ne concordent pas (partition boundary not on a cylinder boundary, physical and logical boundaries don't match), etc.

Voir la section partitioning : Partitionnement

A fonctionné un temps, mais plus maintenant

Certains systèmes qui fonctionnaient avant la .99.13 échouent avec les nouvelles versions de Linux. Les anciennes versions assignaient les registres CONTROL et DATA dans un ordre différent de celui de la documentation, ce qui plantait certains systèmes. Les nouvelles versions assignent correctement les registres, mais cela plante d'autres systèmes.

Le code de seagate.c ressemble actuellement à ceci :


cli();
DATA = (unsigned char) ((1<<target) | 
                        (controller_type == SEAGATE ? 0x80 : 0x40));
CONTROL = BASE_CMD | CMD_DRVR_ENABLE | CMD_SEL |
(reselect ? CMD_ATTN : 0);
sti();

Il se peut que le changer 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()

résolve votre problème.

Définitions

FAST ou FAST32 utiliseront les transferts aveugles chaque fois que possible.

ARBITRATE fera arbitrer le bus par l'adaptateur hôte pour une meilleure compatibilité SCSI-II, au lieu de se contenter d'attendre BUS FREE pour faire son boulot. Devrait nous permettre une commande par Lun quand j'intégrerai ma réorganisation dans les sources de distribution.

SLOW_HANDSHAKE permettra la compatibilité avec des périphériques défectueux qui ne pratiquent pas un handshake assez rapide (comme certains CD-ROM) pour le code Seagate.

SLOW_RATE=x, x étant un nombre, vous permettra de spécifier une vitesse de transfert par défaut si le handshaking ne fonctionne pas correctement.

4.13 PAS16 SCSI

Configurations supportées et non supportées:

Ports :

0x388, 0x384, 0x38x, 0x288

IRQs :

10, 12, 14, 15

IMPORTANT :

Les IRQ DOIVENT être différentes de celles utilisées pour la partie son de la carte.

DMA :

inutilisé pour la partie SCSI de la carte

IO :

port mapped

Autodétection :

ne requiert pas de BIOS

Forçage d'autodétection :

Compilation :

Definir PAS16_OVERRIDE comme un tableau de n-uplets de port,irq. Par exemple,


#define PAS16_OVERRIDE {{0x388, 10}}

pour une carte en port 0x388, IRQ 10.

ligne de commande du noyau :

pas16=port,irq

Definitions :

  • AUTOSENSE - si défini, REQUEST SENSE sera automatiquement exécuté pour les commandes qui renvoient un statut CHECK CONDITION.
  • PSEUDO_DMA - active le pseudo-DMA matériel, devrait donner une amélioration des performances de l'ordre de 3-4X par rapport aux E/S pollées.
  • PARITY - active la vérification de parité. Non supporté.
  • SCSI2 - active le support du tagged queuing SCSI-II. Non testé.
  • UNSAFE - laisse les interruptions activées pendant les transferts pseudo-DMA. Ne l'utiliser que si vous avez un problème de caractères perdus pendant des communications à haute vitesse, et même dans ce cas, vous vous en sortirez mieux en modifiant transfersize.
  • USLEEP - active le support des périphériques qui ne se déconnectent pas. Non testé.

Problèmes habituels :

  1. Timeouts de commandes, échecs, etc. Vous devez installer les patches NCR5380 que j'ai posté sur le net il y a quelque temps, qui devraient être intégrés à une future release alpha. Ces patches corrigent un effet de compétition dans les cores de pilotes NCR5380, ainsi que le support de plusieurs périphériques sur les cartes à base de NCR5380. Si cela échoue, vous devez désactiver l'option PSEUDO_DMA en changeant la ligne #define PSEUDO_DMA dans les pilotes drivers/scsi/pas16.c en #undef PSEUDO_DMA. Remarquez que cette solution ne doit être envisagée qu'en dernier recours, car elle induira une sévère dégradation des performances.

4.14 Trantor T128/T128F/T228

Configurations supportées et non supportées :

Adresses de base :

0xcc000, 00xc8000, 0xdc000, 0xd8000

IRQs :

  • aucune, 3, 5, 7 (toutes cartes)
  • 10, 12, 14, 15 (T128F seulement)

DMA :

inutilisé

IO :

memory mapped

Autodétection :

fonctionne pour toutes les configurations supportées, requiert un BIOS installé.

Forçage d'autodétection :

Compilation:

Définit T128_OVERRIDE en tant que tableau de n-uplets adresse,irq. Par exemple


#define T128_OVERRIDE {{0xcc000, 5}}

Pour une carte à l'adresse 0xcc000, IRQ 5.

Les IRQs symboliques IRQ_NONE et IRQ_AUTO peuvent être utilisées.

ligne de commande du noyau :

t128=adresse,irq

-1 peut être utilisé pour aucune irq, -2 pour l'autodétection.

Définitions :

AUTOSENSE

s'il est défini, REQUEST SENSE sera exécuté automatiquement pour les commandes qui renvoient un statut CHECK CONDITION.

PSEUDO_DMA

active le matériel pseudo-DMA, devrait donner une amélioration des performances de l'ordre de 3-4X par rapport aux E/S pollées.

PARITY

active la vérification de parité. Non supporté.

SCSI2

active le support du tagged queuing SCSI-II. Non testé.

UNSAFE

laisse les interruptions activées pendant les transferts pseudo-DMA. Ne l'utiliser que si vous avez un problème de caractères perdus pendant des communications à haute vitesse, et même dans ce cas, vous vous en sortirez mieux en modifiant transfersize.

USLEEP

active le support des périphériques qui ne se déconnectent pas. Non testé.

Problème habituels :

  1. Timeouts de commandes, échecs, etc. Vous devez installer les patches NCR5380 que j'ai posté sur le net il y a quelque temps, qui devraient être intégrés à une future release alpha. Ces patches corrigent un effet de compétition dans les cores des pilotes NCR5380, ainsi que le support de plusieurs périphériques sur les cartes à base de NCR5380. Si cela échoue, vous devez désactiver l'option pseudo_DMA en changeant la ligne #define PSEUDO_DMA dans les pilotes drivers/scsi/pas16.c en #undef PSEUDO_DMA. Remarquez que cette solution ne doit être envisagée qu'en dernier recours, car elle induira une sévère dégradation des performances.

4.15 Ultrastor 14f (ISA), 24f (EISA), 34f (VLB)

Configurations supportées :

Ports :

0x130, 0x140, 0x210, 0x230, 0x240, 0x310, 0x330, 0x340

IRQs :

10, 11, 14, 15

Canaux DMA :

5, 6, 7

IO :

port mapped, bus master

Autodétection :

ne fonctionne pas pour les cartes au port 0x310, BIOS non requis.

Forçage d'autodétection :

uniquement à la compilation, définir PORT_OVERRIDE.

Problèmes habituels :

  1. L'adresse 0x310 n'est pas supportée par le code d'autodétection, et peut entraîner des conflits si le réseau est activé. Utilisez une adresse différente.
  2. L'utilisation d'une Ultrastor à l'adresse 0x330 peut provoquer un blocage du système quand les pilotes de cartes son entrent en autodétection. Utilisez une adresse différente.
  3. De nombreux autres pilotes testent diverses adresses de façon dangereuse ; si vous rencontrez des problèmes avec la détection ou que le système se bloque au démarrage, essayez une autre adresse. 0x340 est une adresse recommandée, dont on sait qu'elle fonctionne.
  4. Linux ne détecte pas de périphérique SCSI, mais indique que le disque dur sur une carte Ultrastor SCSI est un disque normal, et le pilote de disque dur refuse de le supporter. Notez que si cela se produit, vous obtiendrez 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 tel est le cas, vous faites tourner une carte Ultrastor en mode d'émulation WD1003. Il vous faut
    1. Basculer l'Ultrastor en mode natif. Il s'agit là de l'action recommandée, car le pilote SCSI est notablement plus rapide que le pilote IDE, surtout en installant les patches de clustered read/write. Certains utilisateurs ont atteint plus de 2 Mo/sec sur le système de fichiers en utilisant ces patches. Remarquez que ceci sera nécessaire si vous désirez utiliser un disque non dur, ou plus de deux disques durs sur la Ultrastor.
    2. Utiliser l'option de ligne de commande :
      hd=cylindres,tetes,secteurs
      
      pour forcer les réglages par défaut pour démarrer, en gardant le nombre de cylindres < =2048, le nombre de têtes <= 16, et le nombre de secteurs <= 255 pour que cylindres * têtes * secteurs soit le même pour les deux géométries. Vous devrez également spécifier la géométrie du disque en lançant fdisk sous Linux. Dans le cas contraire, des entrées de partitions incorrectes seront écrites, qui fonctionneront correctement sous Linux mais échoueront sous MS- DOS qui se sert des entrées de cylindres/têtes/secteurs dans la table. Une fois Linux lancé, on peut éviter de devoir démarrer à la main en recompilant le noyau avec une macro correctement définie dans include/linux/config.h.

4.16 Western Digital 7000

Configurations supportées :

Adresses du BIOS :

0xce000

Ports :

0x350

IRQs :

15

Canaux DMA :

6

IO:

port mapped, bus master

Autodétection :

requiert un BIOS installé

Problèmes habituels :

  1. Il existe plusieurs révisions de circuit et de logiciel embarqué. Il apparaît que les cartes de révision 3 ne fonctionnent pas, les cartes de révision 5 fonctionnent, les circuits sans suffixe ne fonctionnent pas, les circuits avec un suffixe 'A' fonctionnent.
  2. La carte supporte quelques adresses qui ne sont pas sur la liste des adresses supportées. Si vous vous trouvez dans cette situation, utilisez l'une des adresses suportées et soumettez un rapport comme indiqué en section 2, ``Comptes-rendus de bogues''.


Chapitre suivant, Chapitre Précédent

Table des matières de ce chapitre, Table des matières générale

Début du document, Début de ce chapitre