Page suivante - Page précédente - Table des matières

6. Vue d'ensemble de la programmation des périphériques

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.


Page suivante - Page précédente - Table des matières