目的
大容量ストレージおよびバルク・タイプのハード・ディスク、取り外し可能ディスク (RDX)、フラッシュ・ドライブ、CD-ROM、DVD-RAM、ブルーレイ読み取り専用、および読み取り/書き込み光ディスク・メモリー・デバイス用の USB プロトコルをサポートします。
構文
#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>
説明
標準的な USB ハード・ディスク、RDX、フラッシュ・ドライブ、CD-ROM、DVD-RAM、ブルーレイ読み取り専用、および読み取り/書き込み光ディスク操作は、 open、 close、 read、 write、および ioctl の各サブルーチンを使用して実装されます。
装置依存のサブルーチン
USB 大容量ストレージ・デバイス・ドライバーは、 open、 close、 ioctl、および config の各サブルーチンのみをサポートします。
サブルーチンのオープンとクローズ
openx サブルーチンは、主に診断コマンドおよびユーティリティーによって使用されます。 サブルーチンを実行するには、適切な権限が必要です。 を実行するとopen必要な権限を持たないサブルーチンの場合、サブルーチンは値を返します。-1そして、エラーグローバル変数をEPERM。
OpenX サブルーチンで指定された 内線 パラメーターは、ターゲット・デバイスに使用する操作を選択します。 /usr/include/sys/usb.h ファイルは、 ext パラメーターに指定できる値を定義します。
内線 パラメーターには、以下のフラグ値の任意の論理組み合わせを含めることができます。
| 項目 |
説明 |
| SC_診断 |
選択したデバイスを Diagnostic モードにします。 このモードは単独でしか使用できません。つまり、一度に 1 つのプロセスのみがデバイスを開くことができます。 デバイスが Diagnostic モードの場合、USB デバイスは open または close の操作中に初期化され、エラー・ロギングは無効になります。 Diagnostic モードでは、 close および ioctl サブルーチン操作のみが受け入れられます。 その他のデバイス対応サブルーチンは、-1そして、エラーグローバル変数をEACCES。ターゲット装置が現在オープンされていない場合にのみ、装置を Diagnostic モードでオープンすることができます。 デバイスをDiagnosticターゲットデバイスがすでに開いている場合、サブルーチンは次の値を返します。-1そして、エラーグローバル変数をEACCES。
|
| シングル (SC_SINGLE) |
選択したデバイスを Exclusive
Access モードにします。 Exclusive
Access モードでデバイスを開くことができるプロセスは一度に 1 つのみです。デバイスを Exclusive
Access モードで開くことができるのは、そのデバイスが現在オープンされていない場合のみです。 デバイスをExclusive Accessモードでデバイスがすでに開いている場合、サブルーチンは値を返します。-1そして、エラーグローバル変数をEBUSY。 SC_DIAGNOSTIC フラグを SC_SINGLE フラグと一緒に指定すると、デバイスは Diagnostic モードになります。
|
readx および writex サブルーチン
readx および writex サブルーチンは、USB デバイスではサポートされません。 呼び出されても、 ext パラメーターは処理されません。
ioctl サブルーチン
usbcd デバイス・ドライバーに使用される
ioctl サブルーチン操作は、以下の USB デバイスのカテゴリーに固有のものです。
- すべての USB デバイスに共通の
ioctl 操作
- USB ハード・ディスク、フラッシュ・ドライブ、および RDX デバイス
- USB CD-ROM および読み取り/書き込み光ディスク装置
すべての USB デバイスでサポートされる一般的な ioctl 操作
以下の ioctl 操作は、ハード・ディスク、フラッシュ・ドライブ、RDX、CD-ROM、および読み取り/書き込み光ディスク装置に使用できます。
| 操作 |
説明 |
| DKIORDSE (D) |
エラーが発生したときに、装置に対して読み取りコマンドを発行し、ターゲット装置のセンス・データを取得します。 もし、DKIORDSE操作は値を返します-1そして、もしstatus_validityフィールドはSC_SCSI_ERROR値の場合、有効なセンス データが返されます。 それ以外の場合は、ターゲット・センス・データは省略されます。DKIORDSE 操作は、診断に使用するために提供されています。 これにより、アクティブ・システム環境での操作中にターゲット装置を限定的に使用することができます。 DKIORDSE 操作の arg パラメーターには、 sc_rdwrt 構造体のアドレスが含まれます。 この構造は、 /usr/include/sys/scsi.h ファイルで定義されます。
devinfo 構造体は、読み取り操作の最大転送サイズを定義します。 最大限度を超えて転送した場合、サブルーチンは次の値を返します。-1そして、エラーグローバル変数をEINVAL。
注: CD-ROM 装置からセンス・データを取得するために読み取りコマンドが発行された場合、 DKIORDSE 操作の代わりに CDIORDSE 操作を使用することができます。 DKIORDSE 操作が推奨される操作です。
|
| DKIOCMD (D) |
デバイスが Normal モードまたは Diagnostic モードで正常にオープンされると、 DKIOCMD 操作は、指定されたデバイスに対して任意の Small Computer System Interface (SCSI) コマンドを発行できます。 デバイス・ドライバーは、この操作のエラー・リカバリーまたは障害をログに記録しません。SCSI 状況バイトおよびアダプター状況バイトは、 /usr/include/sys/scsi.h ファイルに定義されている sc_iocmd 構造体のアドレスを含む arg パラメーターを介して戻されます。 もし、DKIOCMD操作が失敗した場合、サブルーチンは値を返します-1そして、エラーグローバル変数をゼロ以外の値に設定します。 この場合、呼び出し側は、戻された状況バイトを評価して、操作の失敗の原因とリカバリー・アクションを判別する必要があります。
devinfo 構造は、コマンドの最大転送サイズを定義します。 最大値を超えて転送した場合、サブルーチンは次の値を返します。-1そして、エラーグローバル変数をEINVAL。
|
| DKIOCMD (続き) |
以下のコード例は、SCSI 標準照会データを取得するために、 usbms0 デバイスに対して DKIOCMD ioctl 操作を発行します。 char sense_data[255];
char *data_buffer=NULL;
struct sc_iocmd sciocmd;
....
fd = open("/dev/usbms0", O_RDWR);
if (fd == -1){
printf("\niocmd: Open FAIL\n");
exit(-1);
}
memset(&sciocmd, '\0', sizeof(struct scsi_iocmd));
sciocmd.version = SCSI_VERSION_1;
sciocmd.timeout_value = 30;
sciocmd.command_length = 6;
sciocmd.flags = B_READ;
sciocmd.autosense_length = 255;
sciocmd.autosense_buffer_ptr = &sense_data[0];
sciocmd.data_length = 0xFF;
sciocmd.buffer = inq_data;
sciocmd.scsi_cdb[0] = SCSI_INQUIRY;
sciocmd.scsi_cdb[1] = 0x00; /* Standard Inquiry*/
sciocmd.scsi_cdb[2] = 0x00;
sciocmd.scsi_cdb[3] = 0x00;
sciocmd.scsi_cdb[4] = 0xFF;
sciocmd.scsi_cdb[5] = 0x00;
if ((rc=ioctl(fd, DKIOCMD, &sciocmd)) != 0){
printf("iocmd: Ioctl FAIL errno %d\n",errno);
printf("status_validity: %x, scsi_status: %x, adapter_status:%x\n",
sciocmd.status_validity, sciocmd.scsi_bus_status,
sciocmd.adapter_status);
hexdump(sense_data, (long)20);
close(fd);
exit(-1);
} else {
printf("cdiocmd : Ioctl PASS\n");
if (cmd = SCSI_INQUIRY)
hexdump(inq_data,0x20);
}
close(fd);
|
| DKIOLCMD (D) |
デバイスが Normal モードまたは Diagnostic モードで正常にオープンされると、 DKIOLCMD 操作は、指定されたデバイスに対して任意の SCSI コマンドを発行できます。 デバイス・ドライバーは、この操作のエラー・リカバリー障害をログに記録しません。この ioctl 操作は、USB 大容量ストレージ・デバイスに対して 16 バイトの SCSI コマンドを発行するために使用される DKIOCMD16 操作に似ています。
SCSI 状況バイトおよびアダプター状況バイトは、 sc_iocmd16cdb 構造体のアドレスを含む arg パラメーターを介して戻されます。 この構造は、 /usr/include/sys/scsi.h ファイルで定義されます。 もし、DKIOLCMD操作が失敗した場合、サブルーチンは値を返します-1そして、エラーグローバル変数をゼロ以外の値に設定します。 この場合、呼び出し側は、戻された状況バイトを評価して、操作の失敗の原因とリカバリー・アクションを判別する必要があります。
DKIOLCMD
ioctl 要求が完了すると、残余フィールドは、装置がこの要求に対して完全には満たさなかった残りのデータを示します。 正常終了の場合、残余フィールドは、装置に要求されたすべてのデータがないか、装置のデータ量が要求された量より少ないことを示します。 要求が失敗した場合は、 status_validity フィールドを調べて、有効な SCSI バスの問題が存在するかどうかを判別する必要があります。 この場合、残留フィールドは、この要求に対して装置が完了できなかったバイト数を示します。
devinfo 構造は、コマンドの最大転送サイズを定義します。 最大値を超えて転送した場合、サブルーチンは次の値を返します。-1そして、エラーグローバル変数をEINVAL。
|
| DKIOLCMD (続き) |
以下のコード例は、SCSI 標準照会データを取得するために、 usbms0 デバイスに対して DKIOLCMD ioctl 操作を発行します。 char sense_data[255];
char *data_buffer=NULL;
struct sc_iocmd16cdb sciocmd;
....
fd = open("/dev/usbms0", O_RDWR);
if (fd == -1){
printf("\niocmd: Open FAIL\n");
exit(-1);
}
memset(&sciocmd, '\0', sizeof(struct scsi_iocmd));
sciocmd.version = SCSI_VERSION_1;
sciocmd.timeout_value = 30;
sciocmd.command_length = 6;
sciocmd.flags = B_READ;
sciocmd.autosense_length = 255;
sciocmd.autosense_buffer_ptr = &sense_data[0];
sciocmd.data_length = 0xFF;
sciocmd.buffer = inq_data;
sciocmd.scsi_cdb[0] = SCSI_INQUIRY;
sciocmd.scsi_cdb[1] = 0x00; /* Standard Inquiry*/
sciocmd.scsi_cdb[2] = 0x00;
sciocmd.scsi_cdb[3] = 0x00;
sciocmd.scsi_cdb[4] = 0xFF;
sciocmd.scsi_cdb[5] = 0x00;
if ((rc=ioctl(fd, DKIOCMD, &sciocmd)) != 0){
printf("iocmd: Ioctl FAIL errno %d\n",errno);
printf("status_validity: %x, scsi_status: %x, adapter_status:%x\n",
sciocmd.status_validity, sciocmd.scsi_bus_status,
sciocmd.adapter_status);
hexdump(sense_data, (long)20);
close(fd);
exit(-1);
} else {
printf("cdiocmd : Ioctl PASS\n");
if (cmd = SCSI_INQUIRY)
hexdump(inq_data,0x20);
}
close(fd);
|
| DK PASSTHRU (DK パス RU) |
デバイスが正常にオープンされると、 DK_PASSTHRU 操作は、指定されたデバイスに対して任意の SCSI コマンドを発行できます。 この操作が失敗すると、デバイス・ドライバーは限定されたエラー・リカバリーを実行します。 DK_PASSTHRU 操作は、 SC_DIAGNOSTIC フィールドの ext 引数を指定した openx コマンドを必要としないという点で、 DKIOCMD 操作とは異なります。 このため、他の操作によって使用されているデバイスに対して DK_PASSTHRU 操作を発行することができます。SCSI 状況バイトおよびアダプター状況バイトは、 sc_passthru 構造体のアドレスを含む arg パラメーターを介して戻されます。 この構造は、 /usr/include/sys/scsi.h ファイルで定義されます。 もし、DK_PASSTHRU操作が失敗した場合、サブルーチンは値を返します-1そして、エラーグローバル変数をゼロ以外の値に設定します。 この場合、呼び出し側は、戻された状況バイトを評価して、操作の失敗の原因とリカバリー・アクションを判別する必要があります。
もしDK_PASSTHRU操作は失敗しました。sc_passthru構造体に無効な値がある場合、サブルーチンは値を返します。-1そして、エラーグローバル変数にEINVAL。 einval_arg フィールドは、無効な値を持つフィールドのフィールド番号 (バージョン・フィールドの場合は 1 から始まる) に設定されます。 einval_arg フィールドの値が 0 の場合は、障害に関する追加情報が入手できないことを示します。
sc_passthru 構造のバージョン・フィールドは、 SCSI_VERSION_2 の値に設定でき、以下のフィールドを指定できます。
variable_cdb_ptr フィールドは、 cdb 変数を含むバッファーを指すポインターです。
variable_cdb_length フィールドは、 variable_cdb_ptr フィールドが指す cdb 変数の長さを決定します。
DK_PASSTHRU 要求が完了すると、残余フィールドは、装置がこの要求に対して完全には満たさなかった残りのデータを示します。 正常終了の場合、残余フィールドは、装置に要求されたすべてのデータがないか、装置のデータ量が要求された量より少ないことを示します。 要求が失敗した場合は、 status_validity フィールドを調べて、有効な SCSI バスの問題が存在するかどうかを判別する必要があります。 この場合、残留フィールドは、この要求に対して装置が完了できなかったバイト数を示します。
devinfo 構造は、コマンドの最大転送サイズを定義します。 最大転送サイズを超えて転送しようとすると、サブルーチンは次の値を返します。-1は、エラーグローバル変数をEINVALを設定し、einval_argフィールドの値をSC_PASSTHRU_INV_D_LEN。 これらの値は、 /usr/include/sys/scsi.h ファイルで定義されます。
注: DK_PASSTHRU 操作を非 root ユーザーとして呼び出すと、操作は EPERM 値ではなく EACCES エラー値で失敗します。
|
| DK_PASSTHRU (続き) |
以下のコード例は、SCSI 標準照会データを取得するために、 usbms0 デバイスに対して DK_PASSTHRU
ioctl 操作を発行します。 char sense_data[255];
char *data_buffer=NULL;
struct sc_passthru sciocmd;
....
fd = open("/dev/usbms0", O_RDWR);
if (fd == -1){
printf("\npassthru: Open FAIL\n");
exit(-1);
}
memset(&sciocmd, '\0', sizeof(struct sc_passthru));
sciocmd.version = SCSI_VERSION_1;
sciocmd.timeout_value = 30;
sciocmd.command_length = 6;
sciocmd.autosense_length = 255;
sciocmd.autosense_buffer_ptr = &sense_data[0];
sciocmd.data_length = 0xFF;
sciocmd.buffer = inq_data;
sciocmd.flags = B_READ;
sciocmd.scsi_cdb[0] = SCSI_INQUIRY;
sciocmd.scsi_cdb[1] = 0x00; /* Standard Inquiry*/
sciocmd.scsi_cdb[2] = 0x00;
sciocmd.scsi_cdb[3] = 0x00;
sciocmd.scsi_cdb[4] = 0xFF;
sciocmd.scsi_cdb[5] = 0x00;
if ((rc=ioctl(fd, DK_PASSTHRU, &sciocmd)) != 0){
if (sciocmd.adap_set_flags & SC_AUTOSENSE_DATA_VALID) {
/* look at sense data */
} /* end SC_AUTOSENSE_DATA_VALID */
printf("passthru: Ioctl FAIL errno %d\n",errno);
printf("status_validity: %x, scsi_status: %x, adapter_status:%x\n",
sciocmd.status_validity, sciocmd.scsi_bus_status,
sciocmd.adapter_status);
printf("Residual: %x\n", sciocmd.residual);
exit(-1);
} else {
printf("passthru: Ioctl PASS\n");
printf("status_validity: %x, scsi_status: %x, adapter_status:%x\n",
sciocmd.status_validity, sciocmd.scsi_bus_status,
sciocmd.adapter_status);
printf("Residual: %x\n", sciocmd.residual);
/* inq_data buffer has valid Standard Inquiry data */
}
|
USB ハード・ディスク、フラッシュ・ドライブ、および RDX デバイスの ioctl 操作
以下の ioctl 操作は、USB ハード・ディスク、フラッシュ・ドライブ、および RDX デバイスに対してのみ使用可能です。
| 操作 |
説明 |
| IOCINFO |
/usr/include/sys/devinfo.h ファイルに定義されている devinfo 構造体を返します。 IOCINFO 命令は、 ioctl サブルーチンを使用するすべてのデバイス・ドライバーに対して定義される唯一の命令です。 返される値は次のとおりです。devinfo.devtype = DD_SCDISK;
devinfo.flags =(uchar)DF_RAND;
devinfo.devsubtype = 0x00;
devinfo.un.scdk.max_request = Maximum_transfer_supported_by_usbcd_driver;
devinfo.un.scdk.numblks = Largest_LBA_supported_by_device+1;
devinfo.un.scdk.blksize = Block_size_set_for_the_USB_Disk/Flash/RDX_Device;
|
| DKPMR (D) |
デバイスが正常にオープンされたときに、SCSI メディア除去防止 (PMR) コマンドを発行します。 このコマンドは、装置がクローズされるか、電源をオフにして再始動されるか、または DKAMR 操作が発行されるまで、メディアが排出されないようにします。 DKAMR 操作の arg パラメーターがヌルです。 DKAMR 命令が正常に実行されると、サブルーチンは値 0 を戻します。 デバイスがSCSIハードディスクの場合、DKAMR操作が失敗した場合、サブルーチンは値を返します-1を設定し、エラーグローバル変数をEINVAL。 もし、DKAMRその他の理由で操作が失敗した場合、サブルーチンは値を返します。-1そして、エラーグローバル変数をEIO。注: この機能は、メディア・カートリッジの排出をサポートする USB RDX デバイスをサポートするために提供されています。
|
| DKAMR (D) |
装置が正常にオープンされた時に, 媒体除去可能 (AMR) コマンドを出します。 その後、ドライバーの排出ボタンまたは DKEJECT 操作のいずれかを使用して、メディアを排出できます。 この ioctl 操作の arg パラメーターがヌルです。 DKAMR 命令が正常に実行されると、サブルーチンは値 0 を戻します。 デバイスが SCSI ハード・ディスクの場合、 DKAMR 操作は失敗します。 さらに、サブルーチンは次の値を返します。-1そして、エラーグローバル変数をEINVAL。 この操作が失敗したその他の原因の場合、サブルーチンは次の値を返します。-1を設定し、エラーグローバル変数をEIO。注: この機能は、メディア・カートリッジの排出をサポートする USB RDX デバイスをサポートするために提供されています。
|
CD-ROM および読み取り/書き込み光ディスク装置の ioctl 操作
CD-ROM および読み取り/書き込み光ディスク装置には、以下の ioctl 操作を使用できます。
| 操作 |
説明 |
| IOCINFO |
/usr/include/sys/devinfo.h ファイルに定義されている devinfo 構造体を返します。 IOCINFO 命令は、 ioctl サブルーチンを使用するすべてのデバイス・ドライバーに対して定義される唯一の命令です。 返される値は次のとおりです。devinfo.devtype = DD_CDROM;
devinfo.flags = (uchar)DF_RAND;
devinfo.devsubtype = 0x00;
devinfo.un.idecd.numblks =
Largest logical block addressing (LBA) supported by device + 1;
devinfo.un.idecd.blksize = Block size set for the USB Disk, flash, or RDX device;
|
| IDEパス・ RU (IDEPASSTHRU) |
装置が正常にオープンされたときに、指定された装置に対して AT 接続パケット・インターフェース (ATAPI) コマンドを発行します。 IDEPASSTHRU 操作では、 SC_DIAGNOSTIC 値の ext 引数を指定した openx コマンドは必要ありません。 したがって、他の操作によって使用されているデバイスに対して IDEPASSTHRU 操作を発行することができます。AT Attachment (ATA) 状況バイトおよび ATA エラー・バイトは、 arg パラメーターを介して戻されます。 このパラメーターには、 /usr/include/sys/ide.h ファイルに定義されている ide_ata_passthru 構造体のアドレスが含まれます。 もし、IDEPASSTHRU操作が失敗した場合、サブルーチンは値を返します-1そして、エラーグローバル変数をゼロ以外の値に設定します。 この場合、呼び出し元は、戻された状況バイトを評価して、操作の失敗の原因とリカバリー・アクションを判別します。
IDEPASSTHRU 操作が失敗した場合、デバイス・ドライバーは限定されたエラー・リカバリーを実行します。 この操作が失敗した場合、ide_ata_passthru構造体に無効な値がある場合、サブルーチンは値を返します。-1そして、エラーグローバル変数にEINVAL。
IDEPASSTHRU 要求が正常に完了すると、残余フィールドは、要求されたすべてのデータが装置に入っていないか、または装置のデータ量が要求された量より少ないことを示します。 IDEPASSTHRU 要求が失敗した場合、残りのフィールドは、この要求に対して装置が完了できなかったバイト数を示します。
|
| IDEPASSTHRU (続き) |
以下のコード例は、 IDEPASSTHRU 操作を使用する SCSI 照会コマンドを発行します。
struct ide_atapi_passthru atapicmd;
char inq_buffer[255];
uchar sense_data[255];
/* set up the arg parameter block */
memset(&atapicmd, '\0', sizeof(struct ide_atapi_passthru));
memset(sense_data, '\0', 255);
atapicmd.ide_device = 0;
atapicmd.flags = IDE_PASSTHRU_READ;
atapicmd.timeout_value = 30;
atapicmd.rsv0 = IDE_PASSTHRU_VERSION_01;
atapicmd.rsv1 = 0;
atapicmd.atapi_cmd.length = 12;
atapicmd.atapi_cmd.resvd = 0;
atapicmd.atapi_cmd.resvd1 = 0;
atapicmd.atapi_cmd.resvd2 = 0;
atapicmd.data_ptr = inq_buffer;
atapicmd.buffsize = 0xFF;
atapicmd.atapi_cmd.packet.opcode = SCSI_INQUIRY;
atapicmd.atapi_cmd.packet.byte[0] = (0x00 | vpd) ; /*Standard Inquiry */
atapicmd.atapi_cmd.packet.byte[1] = page_code; /*Page Code-Valid if vpd=1 */
atapicmd.atapi_cmd.packet.byte[2] = 0x00;
atapicmd.atapi_cmd.packet.byte[3] = 0xFF;
atapicmd.atapi_cmd.packet.byte[4] = 0x00;
atapicmd.sense_data = sense_data;
atapicmd.sense_data_length = 255;
fd = openx(“/dev/cd0”, O_RDWR, NULL, SC_DIAGNOSTIC);
if (fd == -1) {
printf("IDEPASSTHRU: Openx failed with errno %x \n", errno);
exit(-1);
}
if ((rc = ioctl(fd, IDEPASSTHRU, &atapicmd) != 0)) {
printf("IDEPASSTHRU: IOCTL Failed");
printf("errno %d\n",errno);
printf("ata_status: %x, ata_error:%x\n",
atapicmd.ata_status, atapicmd.ata_error);
close(fd);
exit(-1);
} else {
printf("IDEPASSTHRU : Ioctl PASS\n");
printf("ata_status: %x, ata_error: %x\n",
atapicmd.ata_status, atapicmd.ata_error);
}
close(fd);
|
| DKPMR (D) |
デバイスが正常にオープンされたときに、Small Computer System Interface (SCSI) 抑止メディア除去コマンドを発行します。 このコマンドは、デバイスがクローズされるか、電源がオフにされてから電源がオンにされるまで、または DKAMR 操作が発行されるまで、メディアが排出されないようにします。 DKPMR 操作の arg パラメーターがヌルです。 DKPMR 命令が正常に実行されると、サブルーチンは値 0 を戻します。 デバイスがSCSIハードディスクの場合、DKPMR操作が失敗した場合、サブルーチンは値を返します-1を設定し、エラーグローバル変数をEINVAL。 もし、DKPMRその他の理由で操作が失敗した場合、サブルーチンは値を返します。-1そして、エラーグローバル変数をEIO。 |
| DKAMR (D) |
装置が正常にオープンされた時に, 媒体除去許可コマンドを出します。 メディアは、ドライブ・イジェクト・ボタンまたは DKEJECT 操作のいずれかを使用してイジェクトすることができます。 この操作の arg パラメーターがヌルです。 DKAMR 命令が正常に実行されると、サブルーチンは値 0 を戻します。 デバイスがSCSIハードディスクの場合、DKAMR操作は失敗し、サブルーチンは値を返します。-1そして、エラーグローバル変数をEINVAL。 その他の原因で操作が失敗した場合、サブルーチンは次の値を返します。-1そして、エラーグローバル変数をEIO。 |
| DKEJECT (デッキ) |
装置が正常にオープンされたときに、ドライブにイジェクト・メディア・コマンドを発行します。 この操作の arg パラメーターがヌルです。 DKEJECT 命令が正常に実行されると、サブルーチンは値 0 を戻します。 デバイスがSCSIハードディスクの場合、DKEJECT操作が失敗した場合、サブルーチンは値を返します-1を設定し、エラーグローバル変数をEINVAL。 その他の原因で操作が失敗した場合、サブルーチンは次の値を返します。-1そして、エラー変数をEIO。 |
| DKAUDIO (D) |
指定されたデバイスに対して音声再生コマンドを発行し、デバイスの出力ポート上のボリュームを制御します。 音声再生コマンドは、再生、一時停止、再開、停止、トラック数の判別、および現在の音声操作の状況の判別を行うことができます。 DKAUDIO 操作は、CD-ROM ドライブの出力ポートを介してのみ音声を再生します。 この操作の arg パラメーターは、 /usr/include/sys/scdisk.h ファイルに定義されている cd_audio_cmds 構造体のアドレスです。 排他的アクセス・モードが必要です。もし、DKAUDIOデバイスのオーディオサポート属性が設定されている場合に操作が試行されますNoサブルーチンは値を返します-1そして、エラーグローバル変数をEINVAL。 もし、DKAUDIO操作が失敗した場合、サブルーチンは値を返します-1そして、エラーグローバル変数をゼロ以外の値に設定します。 この場合、呼び出し側は、戻された状況バイトを評価して、操作の失敗の原因とリカバリー・アクションを判別する必要があります。
|
| DK CD_ モード |
以下のいずれかのコマンドを発行します。
CD_GET_MODE
- 装置が正常にオープンされたときに、
mode_form_op 構造体の cd_mode_form フィールドに現行の CD-ROM データ・モードを戻します。
CD_CHG_MODE
- 装置が排他的アクセス・モードで正常にオープンされると、CD-ROM データ・モードを
mode_form_op 構造体の cd_mode_form フィールドに指定されているモードに変更します。
CD-ROMがモード選択密度コードを使用して異なるデータモード用に設定されていない場合、およびCD-ROMデータモードをアクションフィールドで設定して変更した場合、change_mode_form構造にCD_CHG_MODEコマンドを実行すると、サブルーチンは-1そして、エラーグローバル変数をEINVAL。 CD-ROMモードをDVDモードに変更しようとすると、戻り値は-1そしてそのエラーグローバル変数は次のように設定されますEINVAL。 もし、DK_CD_MODEの操作CD_CHG_MODEデバイスが排他アクセスモードではないときにコマンドが試行されると、サブルーチンは次の値を返します。-1そして、エラーグローバル変数をEACCES。 その他の原因で操作が失敗した場合、サブルーチンは次の値を返します。-1そして、エラーグローバル変数をEIO。
|
デバイスのハードウェア要件
USB ハード・ディスク、フラッシュ・ドライブ、RDX、CD-ROM、および読み取り/書き込み光ディスクには、以下のハードウェア要件があります。
- これらのドライブは、ブロック当たり 512 バイトのブロック・サイズをサポートする必要があります。
- モード・センスがサポートされている場合は、順次アクセス・メモリー (SAM) ハード・ディスクおよび読み取り/書き込み光ディスクに対して書き込み保護 (WP) ビットもサポートされている必要があります。
- USB ハード・ディスク、フラッシュ・ドライブ、RDX、および読み取り/書き込み光ディスク・ドライブは、リカバリーされたエラーの要求センス・データのハードウェア再試行カウントをバイト単位で報告する必要があります。 USB ハード・ディスクまたは読み取り/書き込み光ディスクがこの機能をサポートしていない場合、システム・エラー・ログに、早期のドライブ障害が示されている可能性があります。
- USB CD-ROM および読み取り/書き込み光ディスク・ドライブは、10 バイトの SCSI 読み取りコマンドをサポートする必要があります。
- USB ハード・ディスク、フラッシュ・ドライブ、RDX、および読み取り/書き込み光ディスク・ドライブは、SCSI write and verify コマンドおよび 6 バイト SCSI write コマンドをサポートする必要があります。
- 読み取り/書き込み光ディスク・ドライブは、フォーマット・コマンド操作を使用するために、SCSI フォーマット・ユニット・コマンドの障害リスト・ヘッダーのフォーマット・オプション有効 (FOV) ビットを 0 に設定する必要があります。 ドライブがこの機能をサポートしていない場合は、
DKFORMAT 操作を使用してドライブがメディアをフォーマットするように、ドライブ用のアプリケーションを作成することができます。
- USB CD-ROM ドライブが CD_ROM データ・モード 1 フォーマットを使用する場合、ブロック当たり 512 バイトのブロック・サイズをサポートする必要があります。
- USB CD-ROM ドライブが CD_ROM データ・モード 2 フォーム 1 フォーマットを使用する場合、ブロック当たり 2048 バイトのブロック・サイズをサポートする必要があります。
- USB CD-ROM ドライブが CD_ROM データ・モード 2 フォーム 2 フォーマットを使用する場合、ブロック当たり 2336 バイトのブロック・サイズをサポートする必要があります。
- USB CD-ROM ドライブが CD_DA モードを使用する場合、ブロック当たり 2352 バイトのブロック・サイズをサポートする必要があります。
DKAUDIO (音声再生) 操作を使用してボリュームを制御するには、デバイスが SCSI-2 モード・データ・ページ 0xEをサポートしている必要があります。
DKAUDIO (音声再生) 操作を使用するには、デバイスが以下の SCSI-2 オプション・コマンドをサポートしている必要があります。
- サブチャネル読み取り
- 再開の休止
- オーディオ・メール要約ファイルの再生 (.msf)
- 音声トラック索引の再生
- 目次 (TOC) の読み取り
注: AIX® オペレーティング・システムの USB デバイスでは、国際標準化機構 (ISO) ファイル・システム (読み取り専用 ISO 9660)、ユニバーサル・ディスク・フォーマット (UDF) ファイル・システムのバージョン 2.01以前のみがサポートされます。 ただし、 mksysb、 tar、 cpio、 backup、または restore コマンドを使用して、ドライブ上にシステム・バックアップまたはデータ・アーカイブを作成することができます。 また、dd コマンドを使用すると、ISO イメージをドライブに追加することができます。
USB フラッシュ・ドライブ、RDX、CD-ROM、DVD-RAM、およびブルーレイ読み取り専用デバイスを使用するには、以下のデバイス・パッケージをインストールします。
devices.usbif.08025002
AIX オペレーティング・システムは、USB デバイスのプラグ・アンド・プレイ機能をサポートしていません。 AIX ユーザーがフラッシュ・ドライブ、RDX、CD-ROM、Blu-ray、または DVD-RAM ドライブを使用できるようにするには、root ユーザーがドライブをシステム USB ポートに接続し、以下のコマンドを実行する必要があります。
# cfgmgr -l usb0
注: フラッシュ・ドライブをポートから取り外す場合は注意してください。 ドライブを取り外す前にドライブが適切に閉じられていないか、アンマウントされていない場合、ドライブ上のデータが破損する可能性があります。
ドライブを取り外すと、root ユーザーが以下のコマンドを実行するまで、ドライブはオブジェクト・データ・マネージャー (ODM) で使用可能状態のままになります。
# rmdev -l usbmsn
または
#rmdev -l cdn
ドライブが使用可能状態になると、ドライブをシステムに再接続し、ドライブを再マウントまたは再オープンすることができます。 ドライブがユーザーに対して開いたままの状態でシステム USB ポートから切断された場合、そのドライブは、クローズして再オープンするまで再使用できません。
AIX バージョン 6.1 (6100-06 テクノロジー・レベル) は、USB 接続のブルーレイ・ドライブを読み取り専用として認識して構成します。 AIX オペレーティング・システムは、USB ブルーレイ・ドライブにある CD、DVD、またはブルーレイ・メディアへの書き込み操作をサポートしません。 書き込み操作は防止されませんが (ドライブが書き込み可能な場合)、書き込み操作中に発生した問題に対するサポートは提供されません。
AIX オペレーティング・システムが USB 相手先商標製造 (OEM) フラッシュ・ドライブ、ブルーレイ、および光ディスク・デバイスを操作する機能は、USB 規格に準拠した業界標準 OEM USB デバイスのサンプルに照らして検証されます。 準拠していない特定の USB デバイスで問題が発生し、 AIX オペレーティング・システムがそれらの問題に対するサポートを提供しない場合があります。