L'une des commandes SCSI de base est INQUIRY
, utilis�e pour identifier les type et constructeur du p�riph�rique. Voici la d�finition issue de la sp�cification SCSI-2 (se reporter au standard SCSI-2 pour les d�tails).
Table 44: Commande INQUIRY
+=====-========-========-========-========-========-========-========-========+
| Bit| 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
|Octet| | | | | | | | |
|=====+=======================================================================|
| 0 | Code op�ration (12h) |
|-----+-----------------------------------------------------------------------|
| 1 |Num�ro d'unit� logique | R�serv� | EVPD |
|-----+-----------------------------------------------------------------------|
| 2 | Code page |
|-----+-----------------------------------------------------------------------|
| 3 | R�serv� |
|-----+-----------------------------------------------------------------------|
| 4 | Taille d'allocation |
|-----+-----------------------------------------------------------------------|
| 5 | Contr�le |
+=============================================================================+
Les donn�es en sortie ont l'allure suivante :
Table 45: Format standard de donn�es INQUIRY
+=====-========-========-========-========-========-========-========-========+
| Bit| 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
|Octet| | | | | | | | |
|=====+==========================+============================================|
| 0 | Qualificateur de p�riph. | Type de p�riph�rique |
|-----+-----------------------------------------------------------------------|
| 1 | RMB | Modificateur de type de p�riph�rique |
|-----+-----------------------------------------------------------------------|
| 2 | Version ISO | Version ECMA | Version approuv�e ANSI |
|-----+-----------------+-----------------------------------------------------|
| 3 | AENC | TrmIOP | R�serv� | Format de donn�es en r�ponse |
|-----+-----------------------------------------------------------------------|
| 4 | Longueur additionnelle (n-4) |
|-----+-----------------------------------------------------------------------|
| 5 | R�serv� |
|-----+-----------------------------------------------------------------------|
| 6 | R�serv� |
|-----+-----------------------------------------------------------------------|
| 7 | RelAdr | WBus32 | WBus16 | Sync | Linked |Reserve | CmdQue | SftRe |
|-----+-----------------------------------------------------------------------|
| 8 | (MSB) |
|- - -+--- Identification de constructeur ---|
| 15 | (LSB) |
|-----+-----------------------------------------------------------------------|
| 16 | (MSB) |
|- - -+--- Identification de produit ---|
| 31 | (LSB) |
|-----+-----------------------------------------------------------------------|
| 32 | (MSB) |
|- - -+--- Niveau de r�vision du produit ---|
| 35 | (LSB) |
|-----+-----------------------------------------------------------------------|
| 36 | |
|- - -+--- Sp�cifique constructeur ---|
| 55 | |
|-----+-----------------------------------------------------------------------|
| 56 | |
|- - -+--- R�serv� ---|
| 95 | |
|=====+=======================================================================|
| | Param�tres sp�cifiques constructeur |
|=====+=======================================================================|
| 96 | |
|- - -+--- Sp�cifique constructeur ---|
| n | |
+=============================================================================+
L'exemple qui suit utilise la fonction de bas niveau handle_SCSI_cmd
pour effectuer la commande SCSI INQUIRY.
Tout d'abord, nous ajoutons le bloc de commande � l'en-t�te g�n�rique, puis appelons handle_SCSI_cmd
. Notez que l'argument taille de tampon en sortie de l'appel handle_SCSI_cmd
exclut la taille de l'en-t�te g�n�rique. Apr�s l'ex�cution de la commande, le tampon de sortie contient les informations, sauf si une erreur s'est produite.
#define INQUIRY_CMD 0x12
#define INQUIRY_CMDLEN 6
#define INQUIRY_REPLY_LEN 96
#define INQUIRY_VENDOR 8 /* d�calage vers le nom du constructeur */
/* recherche du constructeur et du mod�le */
static unsigned char *Inquiry ( void )
{
unsigned char Inqbuffer[ SCSI_OFF + INQUIRY_REPLY_LEN ];
unsigned char cmdblk [ INQUIRY_CMDLEN ] =
{ INQUIRY_CMD, /* commande */
0, /* lun/r�serv� */
0, /* code de page */
0, /* r�serv� */
INQUIRY_REPLY_LEN, /* longueur allocation */
0 };/* r�serv� / drapeau / lien */
memcpy( cmd + SCSI_OFF, cmdblk, sizeof(cmdblk) );
/*
* +------------------+
* | struct sg_header | <- commande
* +------------------+
* | copie de cmdblk | <- commande + SCSI_OFF
* +------------------+
*/
if (handle_SCSI_cmd(sizeof(cmdblk), 0, cmd,
sizeof(Inqbuffer) - SCSI_OFF, Inqbuffer )) {
fprintf( stderr, "La requete a echoue\n" );
exit(2);
}
return (Inqbuffer + SCSI_OFF);
}
L'exemple ci-dessus suit cette structure. La fonction Inquiry recopie son bloc de commande apr�s l'en-t�te g�n�rique (donn� par SCSI_OFF
). Les donn�es en entr�e sont absentes de cette commande. handle_SCSI_cmd
d�finit la structure d'en-t�te. Nous pouvons maintenant impl�menter la fonction main
qui compl�te ce programme d'exemple fonctionnel.
void main( void )
{
fd = open(DEVICE, O_RDWR);
if (fd < 0) {
fprintf( stderr, "Il faut les permissions lecture/ecriture pour "DEVICE".\n" );
exit(1);
}
/* affiche certains champs du r�sultat de Inquiry() */
printf( "%s\n", Inquiry() + INQUIRY_VENDOR );
}
Tout d'abord, nous ouvrons le p�riph�rique, contr�lons l'absence d'erreur, puis appelons la fonction de haut niveau. Ensuite, nous affichons des r�sultats sous une forme lisible, dont le constructeur, le produit et la version.
Note : il y a plus d'informations dans le r�sultat de "Inquiry" que ce que fournit ce petit programme. Il vous est loisible d'�tendre celui-ci au type de p�riph�rique, version ANSI, etc. Le type de p�riph�rique a une importance particuli�re, puisqu'il d�termine les jeux de commandes obligatoires et facultatives pour celui-ci. Si vous ne souhaitez pas le programmer vous-m�me, Eric Youngdale a r�alis� le programme scsiinfo, qui fournit � peu pr�s toute information disponible pour un p�riph�rique SCSI. Cherchez sur tsx-11.mit.edu dans pub/Linux/ALPHA/scsi
(NdT : on trouvera ce programme sur les sites miroirs fran�ais, comme ftp.ibp.fr, � un emplacement similaire).
Hosting by: Hurra Communications GmbH
Generated: 2007-01-26 18:01:15