Il vous faut évidemment un adapteur SCSI reconnu. De plus, votre noyau doit être compilé avec le support du pilote générique, en plus de celui pour votre adapteur.
La configuration du noyau Linux (par make config
sous /usr/src/linux
) doit ressembler à :
...
*
* SCSI support
*
SCSI support? (CONFIG_SCSI) [n] y
*
* SCSI support type (disk, tape, CDrom)
*
...
Scsi generic support (CONFIG_CHR_DEV_SG) [n] y
*
* SCSI low-level drivers
*
...
Si le noyau est modulable, vous pouvez tout aussi bien utiliser les modules.
Le pilote générique utilise ses propres fichiers spéciaux. Ils peuvent être créés par le script MAKEDEV
, que l'on trouve habituellement dans le répertoire /dev
. La commande MAKEDEV sg
crée les fichiers suivants :
crw------- 1 root system 21, 0 Aug 20 20:09 /dev/sga
crw------- 1 root system 21, 1 Aug 20 20:09 /dev/sgb
crw------- 1 root system 21, 2 Aug 20 20:09 /dev/sgc
crw------- 1 root system 21, 3 Aug 20 20:09 /dev/sgd
crw------- 1 root system 21, 4 Aug 20 20:09 /dev/sge
crw------- 1 root system 21, 5 Aug 20 20:09 /dev/sgf
crw------- 1 root system 21, 6 Aug 20 20:09 /dev/sgg
crw------- 1 root system 21, 7 Aug 20 20:09 /dev/sgh
| |
numéros majeur, mineur
Notez que ces fichiers sont des fichiers en mode caractère pour permettre les accès directs. Sur certains systèmes, ces fichiers peuvent s'appeler /dev/{sg0,sg1,...}
, en fonction de votre installation. Vous devrez donc adapter les exemples qui suivant en conséquence.
Les fichiers spéciaux sont affectés dynamiquement aux ID/LUN (LUN : Unité logique) du bus SCSI. Les périphériques sont consécutivement alloués selon les unités logiques de chaque périphérique détecté lors de la scrutation du bus, les plus petits LUN/ID/BUS étant alloués en premier. Le noyau commence par le premier contrôleur SCSI et continue sans interruption avec tous les autres adapteurs. Cette étape est actuellement réalisée lors de l'initialisation du pilote SCSI.
Par exemple, si vous avez trois périphériques SCSI configurés avec les ID 1, 3 et 5 sur le premier bus SCSI (chacun avec une seule unité logique), l'affectation sera la suivante :
/dev/sga -> SCSI id 1
/dev/sgb -> SCSI id 3
/dev/sgc -> SCSI id 5
Si vous ajoutez maintenant un nouveau périphérique d'identificateur 4, l'organisation après la prochaine scrutation du bus sera :
/dev/sga -> SCSI id 1
/dev/sgb -> SCSI id 3
/dev/sgc -> SCSI id 4
/dev/sgd -> SCSI id 5
Notez le changement pour l'identificateur 5 - le périphérique correspondant n'est plus affecté à /dev/sgc
, mais à /dev/sgd
.
Les noyaux plus récents permettent de changer cet ordre.
Dans les noyaux récents avec un système de fichier /proc
monté, il est possible de retirer et d'ajouter un périphérique libre (non-busy) à la volée.
Pour enlever un périphérique SCSI :
echo "scsi remove-single-device a b c d"> /proc/scsi/scsi
De la même manière, ajouter un périphérique SCSI se fera par :
echo "scsi add-single-device a b c d"> /proc/scsi/scsi
Ici, a, b, c et d sont définis de la façon suivante :
a == identificateur de l'adapteur (le premier a l'id 0)
b == canal SCSI sur l'adapteur (le premier a le numéro 0)
c == ID
d == LUN (la première ayant le numéro 0)
Ainsi, si nous désirons intervertir l'affectation des fichiers /dev/sgc
et /dev/sgd
de l'exemple précédent, nous pouvons faire :
echo "scsi remove-single-device 0 0 4 0"> /proc/scsi/scsi
echo "scsi remove-single-device 0 0 5 0"> /proc/scsi/scsi
echo "scsi add-single-device 0 0 5 0"> /proc/scsi/scsi
echo "scsi add-single-device 0 0 4 0"> /proc/scsi/scsi
puisque les périphériques génériques sont alloués dans leur ordre d'insertion.
Si vous voulez ajouter de nouveaux périphériques sur le bus SCSI, gardez à l'esprit qu'un nombre limité d'entrées supplémentaires a été attribué. La mémoire a été allouée au démarrage, et il n'y a de place que pour 2 entrées supplémentaires.