Pilote de périphérique du client de stockage de masse USB
Objectif
Prend en charge le protocole USB (Universal Serial Bus) pour le stockage de masse et le disque dur de type bloc, les unités de disque amovible (RDX), les unités flash, les CD-ROM, les DVD-RAM, les disques Blu-ray en lecture seule et les unités de mémoire optique en lecture / écriture.
Syntaxe
#include <sys/devinfo.h>
#include <sys/scsi.h>
#include <sys/scdisk.h>
#include <sys/ide.h>
#include <sys/usb.h>
#include <sys/usbdi.h>
#include <sys/mstor.h>
Descriptif
Les opérations classiques d'unité de disque dur USB, de RDX, de clés USB, de CD-ROM, de DVD-RAM, de lecture seule Blu-ray et d'unité optique en lecture / écriture sont implémentées à l'aide des sous-routines open, close, read, writeet ioctl .
Sous-programmes dépendant de l'unité
Le pilote de périphérique de stockage de masse USB prend en charge uniquement les sous-routines open, close, ioctlet config .
Sous-routines ouvertes et proches
La sous-routine openx est principalement utilisée par les commandes et les utilitaires de diagnostic. Vous devez disposer des droits appropriés pour exécuter le sous-programme. Si vous exécutez leopen sous-programme sans l’autorité requise, le sous-programme renvoie une valeur de-1 et définit le numéro d'erreur variable globale à une valeur deEPERM .
Le paramètre Ext spécifié dans la sous-routine Openx sélectionne l'opération à utiliser pour l'unité cible. Le fichier /usr/include/sys/usb.h définit les valeurs possibles pour le paramètre ext .
Le paramètre Ext peut contenir n'importe quelle combinaison logique des valeurs d'indicateur suivantes:
| Article | Descriptif |
|---|---|
| SC_DIAGNOSTIC | Place le périphérique sélectionné en mode Diagnostic . Ce mode est singulièrement entrant, ce qui signifie qu'un seul processus à la fois peut ouvrir l'unité à la fois. Lorsqu'une unité est en mode Diagnostic , les unités USB sont initialisées lors des opérations open ou close et la consignation des erreurs est désactivée. En mode Diagnostic , seules les opérations de sous-routine close et ioctl sont acceptées. Tous les autres sous-programmes pris en charge par le périphérique renvoient une valeur de-1 et réglez le numéro d'erreur variable globale à une valeur deEACCES .Une unité peut être ouverte en mode |
| SC_UNIQUE | Place le périphérique sélectionné en mode Exclusive
Access . Un seul processus peut ouvrir un périphérique en mode Exclusive
Access à la fois.Un périphérique ne peut être ouvert en mode |
Sous-routines readx et writex
Les sous-routines readx et writex ne sont pas prises en charge sur les périphériques USB. Même s'ils sont appelés, le paramètre ext n'est pas traité.
Sous-routine ioctl
ioctl utilisées pour le pilote de périphérique usbcd sont spécifiques aux catégories suivantes de périphériques USB:- Opérations
ioctlcommunes pour tous les périphériques USB - Disque dur USB, unité flash et unités RDX
- Périphériques optiques de CD-ROM et de lecture / écriture USB
Opérations ioctl communes prises en charge pour tous les périphériques USB
Les opérations ioctl suivantes sont disponibles pour le disque dur, l'unité flash, RDX, le CD-ROM et les unités optiques en lecture / écriture:
| Opération | Descriptif |
|---|---|
| DKIORDSE | Emet une commande de lecture sur l'unité et obtient les données de détection de l'unité cible lorsqu'une erreur se produit. Si laDKIORDSE l'opération renvoie une valeur de-1 et si lestatus_validity le champ est défini sur leSC_SCSI_ERROR valeur, des données de détection valides sont renvoyées. Sinon, les données de détection cible sont omises.L'opération La structure Remarque: l'opération
CDIORDSE peut être remplacée par l'opération DKIORDSE lorsque la commande de lecture est émise pour obtenir des données d'analyse à partir d'une unité de CD-ROM. L'opération DKIORDSE est l'opération recommandée. |
| DKIOCMD | Lorsque l'unité est correctement ouverte en mode Normal ou Diagnostic , l'opération DKIOCMD peut exécuter n'importe quelle commande SCSI (Small Computer System Interface) sur l'unité spécifiée. Le pilote de périphérique ne consigne pas de reprise d'erreur ou d'échec de cette opération.L'octet de statut SCSI et les octets de statut de l'adaptateur sont renvoyés via le paramètre arg qui contient l'adresse d'une structure La structure |
| DKIOCMD (suite) | L'exemple de code suivant émet l'opération DKIOCMD ioctl sur l'unité usbms0 pour obtenir les données d'interrogation standard SCSI: |
| DKIOLCMD | Lorsque l'unité est correctement ouverte en mode Normal ou Diagnostic , l'opération DKIOLCMD peut exécuter n'importe quelle commande SCSI sur l'unité spécifiée. Le pilote de périphérique ne consigne aucune erreur de récupération d'erreur de cette opération.Cette opération L'octet de statut SCSI et les octets de statut de l'adaptateur sont renvoyés via le paramètre arg qui contient l'adresse d'une structure A la fin de la demande La structure |
| DKIOLCMD (suite) | L'exemple de code suivant émet l'opération DKIOLCMD ioctl sur l'unité usbms0 pour obtenir les données d'interrogation standard SCSI: |
| DK_PASSTHRU | Une fois l'unité ouverte, l'opération DK_PASSTHRU peut exécuter n'importe quelle commande SCSI sur l'unité spécifiée. Le pilote de périphérique effectue une récupération d'erreur limitée si cette opération échoue. L'opération DK_PASSTHRU diffère de l'opération DKIOCMD de sorte qu'elle ne nécessite pas de commande openx avec l'argument ext de la zone SC_DIAGNOSTIC . Pour cette raison, l'opération DK_PASSTHRU peut être émise sur les unités qui sont utilisées par d'autres opérations.L'octet de statut SCSI et les octets de statut de l'adaptateur sont renvoyés via le paramètre arg qui contient l'adresse d'une structure Si un La zone de version de la structure
sc_passthru peut être définie sur la valeur de SCSI_VERSION_2 et vous pouvez spécifier les zones suivantes:
A la fin de la demande La structure Remarque: Si vous appelez l'opération
DK_PASSTHRU en tant qu'utilisateur non superutilisateur, l'opération échoue avec la valeur d'erreur EACCES au lieu de la valeur EPERM . |
| DK_PASSTHRU (suite) | L'exemple de code suivant envoie l'opération DK_PASSTHRU
ioctl à l'unité usbms0 pour obtenir les données d'interrogation SCSI standard: |
Opérations ioctl pour les unités de disque dur USB, d'unité flash et RDX
Les opérations ioctl suivantes sont disponibles uniquement pour les unités de disque dur USB, de clé USB et RDX:
| Opération | Descriptif |
|---|---|
| INFOS | Renvoie la structure devinfo définie dans le fichier /usr/include/sys/devinfo.h . L'opération IOCINFO est la seule opération définie pour tous les pilotes de périphérique qui utilisent la sous-routine ioctl . Les valeurs suivantes sont renvoyées: |
| DKPMR | Emet une commande de suppression de support (PMR) SCSI lors de l'ouverture de l'unité. Cette commande empêche l'éjection des supports tant que l'unité n'est pas fermée, mise hors tension et redémarrée, ou tant qu'une opération DKAMR n'est pas lancée. Le paramètre arg de l'opération DKAMR est null. Si l'opération DKAMR aboutit, la sous-routine renvoie la valeur 0. Si le périphérique est un disque dur SCSI, leDKAMR L'opération échoue, le sous-programme renvoie une valeur de-1 , et définit le numéro d'erreur variable globale à une valeur deEINVAL . Si laDKAMR l'opération échoue pour toute autre raison, le sous-programme renvoie une valeur de-1 et définit le numéro d'erreur variable globale à une valeur deEIO .Remarque: Cette fonction est fournie pour prendre en charge les périphériques USB RDX qui prennent en charge l'éjection des cartouches de support.
|
| DKAMR | Emet une commande d'élimination des supports (AMR) lors de l'ouverture de l'unité. Le support peut ensuite être éjecté à l'aide du bouton d'éjection du pilote ou de l'opération DKEJECT . Le paramètre arg de cette opération ioctl est null. Si l'opération DKAMR aboutit, la sous-routine renvoie la valeur 0. Si l'unité est un disque dur SCSI, l'opération DKAMR échoue. De plus, le sous-programme renvoie une valeur de-1 et définit le numéro d'erreur variable globale à une valeur deEINVAL . Pour toute autre cause d'échec de cette opération, le sous-programme renvoie une valeur de-1 , et définit le numéro d'erreur variable globale à une valeur deEIO .Remarque: Cette fonction est fournie pour prendre en charge les périphériques USB RDX qui prennent en charge l'éjection des cartouches de support.
|
Opérations ioctl pour les unités optiques de CD-ROM et de lecture / écriture
Les opérations ioctl suivantes sont disponibles pour les unités de CD-ROM et les unités optiques en lecture / écriture:
| Opération | Descriptif |
|---|---|
| INFOS | Renvoie la structure devinfo définie dans le fichier /usr/include/sys/devinfo.h . L'opération IOCINFO est la seule opération définie pour tous les pilotes de périphérique qui utilisent la sous-routine ioctl . Les valeurs suivantes sont renvoyées: |
| IDEPASSTHRU | Emet une commande ATAPI (AT Attachment Packet Interface) sur l'unité spécifiée lors de l'ouverture de l'unité. L'opération IDEPASSTHRU ne requiert pas de commande openx avec l'argument ext de la valeur SC_DIAGNOSTIC . Par conséquent, une opération IDEPASSTHRU peut être émise sur les unités utilisées par d'autres opérations.Les octets de statut AT Attachment (ATA) et les octets d'erreur ATA sont renvoyés via le paramètre arg . Ce paramètre contient l'adresse d'une structure Si l'opération A l'issue de la demande |
| IDEPASSTHRU (suite) | L'exemple de code suivant émet une commande d'interrogation SCSI qui utilise l'opération |
| DKPMR | Emet une interface SCSI (Small Computer System Interface) empêche la commande de suppression de support lors de l'ouverture de l'unité. Cette commande empêche l'éjection des supports jusqu'à ce que l'unité soit fermée, mise hors tension, puis sous tension, ou jusqu'à ce qu'une opération DKAMR soit lancée. Le paramètre arg de l'opération DKPMR est null. Si l'opération DKPMR aboutit, la sous-routine renvoie la valeur 0. Si le périphérique est un disque dur SCSI, leDKPMR L'opération échoue, le sous-programme renvoie une valeur de-1 , et définit le numéro d'erreur variable globale à une valeur deEINVAL . Si laDKPMR l’opération échoue pour toute autre raison, le sous-programme renvoie une valeur de-1 et définit le numéro d'erreur variable globale à une valeur deEIO . |
| DKAMR | Emet une commande de suppression de support lors de l'ouverture de l'unité. Le support peut être éjecté à l'aide du bouton d'éjection des unités ou de l'opération DKEJECT . Le paramètre arg de cette opération est null. Si l'opération DKAMR aboutit, la sous-routine renvoie la valeur 0. Si le périphérique est un disque dur SCSI, leDKAMR L'opération échoue et le sous-programme renvoie une valeur de-1 et définit le numéro d'erreur variable globale à une valeur deEINVAL . Pour toute autre cause d’échec de fonctionnement, le sous-programme renvoie une valeur de-1 et définit le numéro d'erreur variable globale à une valeur deEIO . |
| DKEJECT | Emet une commande de support d'éjection sur l'unité lorsque l'unité est ouverte. Le paramètre arg de cette opération est null. Si l'opération DKEJECT aboutit, la sous-routine renvoie la valeur 0. Si le périphérique est un disque dur SCSI, leDKEJECT L'opération échoue, le sous-programme renvoie une valeur de-1 , et définit le numéro d'erreur variable globale à une valeur deEINVAL . Pour toute autre cause d’échec de fonctionnement, le sous-programme renvoie une valeur de-1 et définit le numéro d'erreur variable à une valeur deEIO . |
| DKAUDIO | Emet une commande audio de lecture sur l'unité indiquée et contrôle le volume sur les ports de sortie de l'unité. Les commandes audio peuvent jouer, mettre en pause, reprendre, arrêter, déterminer le nombre de pistes et déterminer le statut d'une opération audio en cours. L'opération DKAUDIO lit l'audio uniquement via les ports de sortie de l'unité de CD-ROM. Le paramètre arg de cette opération est l'adresse d'une structure cd_audio_cmds définie dans le fichier /usr/include/sys/scdisk.h . Le mode d'accès exclusif est requis.Si la |
| MODE DK_CD_ | Emet l'une des commandes suivantes:
Si un CD-ROM n'est pas configuré pour différents modes de données à l'aide des codes de densité de sélection de mode et si vous modifiez le mode de données du CD-ROM en définissant le champ d'action du |
Configuration matérielle requise pour l'unité
Les unités de disque dur USB, d'unité flash, de RDX, de CD-ROM et de lecture / écriture sont les suivantes:
- Ces unités doivent prendre en charge une taille de bloc de 512 octets par bloc.
- Si le sens du mode est pris en charge, le bit de protection en écriture (WP) doit également être pris en charge pour les disques durs à mémoire à accès séquentiel (SAM) et les unités de disque optique en lecture / écriture.
- Les disques durs USB, les unités flash, RDX et les unités optiques de lecture / écriture doivent signaler le nombre de nouvelles tentatives matérielles en octets des données de détection des erreurs récupéréées. Si le disque dur USB ou l'unité de disque optique de lecture / écriture ne prend pas en charge cette fonction, le journal des erreurs système peut indiquer une défaillance prématurée de l'unité.
- Les lecteurs de CD-ROM USB et de lecture / écriture doivent prendre en charge la commande de lecture SCSI à 10 octets.
- Les unités de disque dur USB, les unités flash, RDX et les unités optiques de lecture / écriture doivent prendre en charge la commande d'écriture et de vérification SCSI et la commande d'écriture SCSI à 6 octets.
- L'unité de disque optique en lecture / écriture doit définir les options de format (FOV) à 0 pour l'en-tête de la liste des incidents de la commande d'unité de format SCSI pour utiliser l'opération de commande de format. Si l'unité ne prend pas en charge cette fonction, vous pouvez écrire une application pour l'unité afin qu'elle formate le support à l'aide de l'opération
DKFORMAT. - Si une unité de CD-ROM USB utilise le format de CD_ROM Data Mode 1, elle doit prendre en charge une taille de bloc de 512 octets par bloc.
- Si une unité de CD-ROM USB utilise le format de données CD_ROM Mode 2 Form 1, elle doit prendre en charge une taille de bloc de 2048 octets par bloc.
- Si une unité de CD-ROM USB utilise le format 2 du format de données CD_ROM, format 2, elle doit prendre en charge une taille de bloc de 2336 octets par bloc.
- Si une unité de CD-ROM USB utilise le mode CD_DA, elle doit prendre en charge une taille de bloc de 2352 octets par bloc.
- Pour contrôler le volume à l'aide de l'opération
DKAUDIO(lecture audio), le périphérique doit prendre en charge la page de données en mode SCSI-20xE. - Pour utiliser l'opération
DKAUDIO(lecture audio), le périphérique doit prendre en charge les commandes facultatives SCSI-2 suivantes:- Sous-canal en lecture
- Reprise de pause
- Lire le fichier de récapitulatif du courrier audio (.msf)
- Lecture de l'index des pistes audio
- Table des matières en lecture (table des matières)
devices.usbif.08025002# cfgmgr -l usb0
# rmdev -l usbmsnou#rmdev -l cdnLorsqu'une unité est à l'état disponible, vous pouvez reconnecter l'unité au système et l'unité peut être relatée ou rouverte. Si une unité est déconnectée d'un port USB du système alors qu'elle est encore ouverte pour un utilisateur, cette unité n'est pas réutilisable tant que vous n'avez pas fermé et rouvert.AIX version 6.1 avec le niveau de technologie 6100-06 reconnaît et configure les unités Blu-ray connectées par USB en lecture seule. Le système d'exploitation AIX ne prend pas en charge l'opération d'écriture sur les supports CD, DVD ou Blu-ray présents dans l'unité USB Blu-ray. Bien que l'opération d'écriture n'est pas prévenue (si l'unité est capable d'écriture), aucun support n'est fourni pour les problèmes rencontrés lors de l'opération d'écriture.
La capacité du système d'exploitation AIX à fonctionner sur les périphériques USB d'origine USB (OEM), Blu-ray et les unités optiques est validée par rapport à un échantillon d'unités USB OEM standard qui sont conformes aux normes USB. Vous pouvez rencontrer des problèmes avec certains périphériques USB qui ne sont pas compatibles et le système d'exploitation AIX ne fournit aucun support pour ces problèmes.