Le fichier d'inclusion include/scsi/sg.h
contient une description de l'interface (celle du noyau 1.3.98) :
struct sg_header
{
/*
* longueur du paquet entrant (y compris en-t�te)
*/
int pack_len;
/*
* taille max de la r�ponse attendue
*/
int reply_len;
/*
* num�ro d'id du paquet
*/
int pack_id;
/*
* 0 == ok,
* pour les autres, voir les codes pour errno
*/
int result;
/*
* Force la longueur a 12 pour les commandes des
* groupes 6 & 7
*/
unsigned int twelve_byte:1;
/*
* pour utilisation future
*/
unsigned int other_flags:31;
/*
* uniquement utilis� lors des lectures
*/
unsigned char sense_buffer[16];
/*
* la commande suit puis les donn�es de la
* commande
* .............
*/
Cette structure d�crit comment une commande SCSI doit �tre trait�e et disposer de place pour le r�sultat de son ex�cution. Les composants individuels de la structure seront abord�s plus loin � la section La structure d'en-t�te.
La m�thode g�n�rale pour �changer des donn�es avec le pilote g�n�rique est la suivante : pour envoyer une commande � un p�riph�rique g�n�rique ouvert, il faut �crire (write()
) un bloc compos� des trois parties suivantes :
struct sg_header
commande SCSI
donn�es envoy�es avec la commande
Pour obtenir le r�sultat d'une commande, il faut lire (read()
) un bloc compos�s des parties suivantes (similaires � l'�criture) :
struct sg_header
donn�es en entr�e
Il s'agit d'une vue g�n�rale de la proc�dure. Les sections qui suivent d�crivent chaque �tape en d�tail.
NOTE : jusqu'� de r�centes versions du noyau, il �tait n�cessaire de bloquer le signal SIGINT entre les appels write()
et le read()
correspondant (par exemple, par sigprocmask()
). Un retour apr�s la partie �criture sans lecture pour r�cup�rer les r�sultats va bloquer les acc�s suivants. Le blocage du signal n'a pas encore �t� inclus dans le code des exemples. Evitez donc d'envoyer un SIGINT (par ^C, par exemple) lors du test de ceux-ci.
Hosting by: Hurra Communications GmbH
Generated: 2007-01-26 18:01:15