USB 大容量存储客户机设备驱动程序的错误条件
当您使用 scsidisk 设备驱动程序时, ioctl, open, read和 write 子例程的可能 errno 值包括以下值:
| 值 | 描述 |
|---|---|
| EACCES | 指示下列其中一种情况:
|
| EBUSY | 指示下列其中一种情况:
|
| EFAULT | 指示无效用户地址。 |
| EFORMAT | 指示目标设备具有未格式化的介质,或者该介质格式不兼容。 |
| EINPROGRESS | 指示 CD-ROM 驱动器正在进行中的播放音频操作。 |
| EINVAL | 指示下列其中一种情况:
|
| EIO | 指示下列其中一种情况:
|
| EMEDIA | 指示下列其中一种情况:
|
| 电子文件 | 指示已尝试对已具有最大允许打开设备数的适配器执行 open 操作。 |
| ENODEV | 指示下列其中一种情况:
|
| ENOTREADY | 指示驱动器中没有任何介质。 |
| ENXIO | 指示下列其中一种情况:
|
| EPERM | 指示尝试的子例程需要适当的权限。 |
| ESTALE | 指示已弹出只读光盘 (未由用户先关闭) ,然后重新插入或替换为第二个光盘。 |
| ETIMEDOUT | 指示 I/O 操作超过了指定的计时器值。 |
| EWRPROTET | 指示下列其中一种情况:
|
可靠性和可维护性信息
USB 硬盘,闪存驱动器, RDX 设备, CD-ROM 驱动器和读/写光盘驱动器将返回以下错误:
| 错误 | 描述 |
|---|---|
| 异常中止命令 | 指示设备已结束该命令。 |
| Adapter 错误 | 指示该适配器返回了错误。 |
| 良好完成 | 表示命令成功完成。 |
| 硬件错误 | 指示在运行该命令时或在自检期间发生不可恢复的硬件故障。 |
| 非法的请求 | 指示命令或命令参数无效。 |
| 介质错误 | 指示该命令以不可恢复的介质错误条件结束。 |
| 未就绪 | 指示逻辑单元处于脱机状态或缺少介质。 |
| 已恢复的错误 | 指示在应用某些恢复后该命令成功。 |
| 单元辅助操作请求 | 指示设备已复位或已打开电源。 |
在错误记录模板中为硬盘,闪存驱动器, RDX , CD-ROM 和读/写光学介质错误定义的字段将按照以下结构进行记录:
/* Bulk transfer cmd and status blocks */
typedef struct mstor_cbw {
uint32_t cbw_signature; /* Always "USBC" little endian */
uint32_t cbw_tag; /* Command identification */
fld32_t cbw_dlen; /* Data length */
uchar cbw_flags; /* Indicates data in or data out */
uchar cbw_lun; /* Logical unit number, 0-15 */
uchar cbw_cblen; /* Significant bytes of the cmd blk */
uchar cbw_cb[16]; /* Command block itself */
uchar cbw_rsvd;
} mstor_cbw_t;
/* For error logging */
struct mstor_err_rec {
struct err_rec0 log;
uint cmd_error;
mstor_cbw_t cbw;
char sense_data[128];
};
LABEL: DISK_ERRx
IDENTIFIER: xxxxxxxx
Date/Time: Wed Aug 4 11:40:43 CDT 2010
Sequence Number: 80
Machine Id: 00000A2AD400
Node Id: node10
Class: H
Type: PERM
Resource Name: usbms0
Resource Class: usbms
Resource Type: 0806500b
Location: U78A5.001.WIH00AD-P1-T1-L1-L2-L3
Description
Probable Causes
User Causes
Failure Causes
SENSE DATA
1111 2222 2222 3333 3333 4444 4444 5566 LLCC CCCC CCCC CCCC CCCC CCCC CCCC CCCC
CCRR SSSS KKSS SSSS SSSS SSSS SSSS SSSS SSSS SSSS SSSS SSSS SSSS SSSS SSSS SSSS
SSSS SSSS SSSS SSSS SSSS SSSS SSSS SSSS SSSS SSSS SSSS SSSS SSSS SSSS SSSS SSSS
SSSS SSSS SSSS SSSS SSSS SSSS SSSS SSSS SSSS SSSS SSSS SSSS SSSS SSSS SSSS SSSS
SSSS SSSS SSSS SSSS SSSS SSSS SSSS SSSS SSSS SSSS SSSS SSSS SSOO SSNN
Data Representation Legend
--------------------------
cmd_error 1 Command Error Value
(cmd_error values can be negative which are logged as 2's complement.
For these USB specific error values refer below or /usr/include/sys/usbdi.h.
For error values which are positive Please refer to /usr/include/sys/errno.h file for error description)
Bulk transfer Command and Status Blocks
cbw_signature 2 Always .USBC. in ASCII - “5553 4243”
cbw_tag 3 Command Identification
cbw_dlen 4 Data Length
cbw_flags 5 Indicates Data IN or OUT
cbw_lun 6 LUN Id
cbw_cblen L CDB (Command Descriptor Bytes) length
cbw_cb C CDB - SCSI/ATAPI Command Set
cbw_rsvd R Reserved
Sense data
Sense data S
Sense key K
ASC c
ASCQ q
Driver Open Count O
Location N Device Driver log location介质错误的错误记录值
| 值 | 描述 |
|---|---|
| 注释 | 指示硬盘驱动器,闪存驱动器, RDX , CD-ROM 或读/写光学介质错误。 |
| 类 | 等于指示硬件错误的值 H 。 |
| 报告 | 等于表示在生成错误报告时必须包含此错误的 True 值。 |
| 日志 | 等于 True 值,指示在发生此错误时必须创建错误日志条目。 |
| 警告 | 等于表示此错误不能具有警报的值 False。 |
| 错误类型 | 等于指示永久故障的 Perm 的值。 |
| 错误描述 (_D) | 等于指示磁盘操作失败的值 1312。 |
| 概率原因 | 等于指示介质的 5000 的值。 |
| 用户原因 | 等于指示介质有缺陷的值为 5100。 |
| 用户操作 | 等于以下值:
|
| 本能原因 | 无。 |
| 指令操作 | 无。 |
| 故障原因 | 等于以下值:
|
| 失败操作 | 等于以下值:
|
| 详细数据 (_D) | 等于 156,11 和 HEX 的值。 此值指示十六进制格式。 注:
err_rec 结构中的 Detail_Data 字段包含 mstor_err_rec 结构。 err_rec 字段在 /usr/include/sys/errids.h 文件中定义。 Detail_Data 字段跟在前面的结构示例中提到的相同图例后面。 |
请参阅小型计算机系统接口 (SCSI) 规范,以了解特定设备的请求检测数据的格式。
硬件错误的错误记录值
下表中列出了在错误记录模板中为硬盘错误, CD-ROM 错误和读/写光学硬件错误以及为硬异常终止命令错误定义的字段:
| 值 | 描述 |
|---|---|
| 注释 | 指示硬盘驱动器,闪存驱动器, RDX , CD-ROM 或读/写光学硬件错误。 |
| 类 | 等于用于指示硬件错误的值 H。 |
| 报告 | 等于表示在生成错误报告时必须包含此错误的 True 值。 |
| 日志 | 等于 True 值,指示在发生此错误时必须创建错误日志条目。 |
| 警告 | 等于 False 值,指示无法向此错误发出警报。 |
| 错误类型 | 等于指示永久故障的 Perm 的值。 |
| 错误描述 (_D) | 等于指示磁盘操作失败的值 1312。 |
| 概率原因 | 等于用于指示磁盘驱动器的值 6310。 |
| 用户原因 | 无。 |
| 用户操作 | 无。 |
| 本能原因 | 无。 |
| 指令操作 | 无。 |
| 故障原因 | 等于以下值:
|
| 失败操作 | 等于 00E1 的值,指示必须执行问题确定过程。 |
| 详细数据 (_D) | 等于 156,11 和 HEX 的值。 此值指示十六进制格式。 注:
err_rec 结构中的 Detail_Data 字段包含 mstor_err_rec 结构。 err_rec 字段在 /usr/include/sys/errids.h 文件中定义。 它遵循前面结构示例中提到的相同图例。 |
适配器检测到的硬件故障的错误记录值
以下字段是在错误记录模板中针对硬盘, CD-ROM 和读/写光学介质错误以及针对适配器检测到的硬件错误定义的:
| 值 | 描述 |
|---|---|
| 注释 | 指示适配器检测到的硬盘,闪存驱动器, RDX , CD-ROM 或读/写光学硬件故障。 |
| 类 | 等于用于指示硬件错误的值 H。 |
| 报告 | 等于 True 值,指示在生成错误报告时必须包含此错误。 |
| 日志 | 等于 True 的值,指示在发生此错误时必须创建错误日志条目。 |
| 警告 | 等于 False 值,指示无法向此错误发出警报。 |
| 错误类型 | 等于指示永久故障的 Perm 的值。 |
| 错误描述 (_D) | 等于指示磁盘操作失败的值 1312。 |
| 概率原因 | 等于以下值:
|
| 用户原因 | 无。 |
| 用户操作 | 无。 |
| 本能原因 | 无。 |
| 指令操作 | 无。 |
| 故障原因 | 等于以下值:
|
| 失败操作 | 等于 0000 的值,表示必须执行问题确定过程。 |
| 详细数据 (_D) | 等于 156,11 和 HEX 的值。 此值指示十六进制格式。 注:
err_rec 结构中的 Detail_Data 字段包含 mstor_err_rec 结构。 err_rec 字段在 /usr/include/sys/errids.h 文件中定义。 它遵循前面结构示例中提到的相同图例。 |
已恢复错误的错误记录值
在硬盘, CD-ROM 和读/写光学介质恢复的错误的错误记录模板中定义了以下字段:
| 项 | 描述 |
|---|---|
| 注释 | 指示硬盘, CD-ROM 或读/写光盘已恢复错误。 |
| 类 | 等于用于指示硬件错误的值 H。 |
| 报告 | 等于表示在生成错误报告时必须包含此错误的 True 值。 |
| 日志 | 等于 True 值,指示在发生此错误时必须创建错误日志条目。 |
| 警告 | 如果值为 False ,那么表示无法向此错误发出警报。 |
| 错误类型 | 等于用于指示临时故障的 Temp 值。 |
| 错误描述 (_D) | 等于用于指示物理卷操作失败的值 1312。 |
| 概率原因 | 等于以下值:
|
| 用户原因 | 等于 5100 的值,表示介质有缺陷。 |
| 用户操作 | 等于以下值:
|
| 本能原因 | 无。 |
| 指令操作 | 无。 |
| 故障原因 | 等于以下值:
|
| 失败操作 | 等于以下值:
|
| 详细数据 (_D) | 等于 156,11 和 HEX 的值。 此值指示十六进制格式。 注:
err_rec 结构中的 Detail_Data 字段包含 mstor_err_rec 结构。 err_rec 字段在 /usr/include/sys/errids.h 文件中定义。 它遵循与其他错误相同的图注。 |
未知错误的错误记录值
以下字段在硬盘, CD-ROM 和读/写光学介质未知错误的错误记录模板中进行定义:
| 值 | 描述 |
|---|---|
| 注释 | 指示硬盘, CD-ROM 或读/写光盘的未知故障。 |
| 类 | 等于用于指示硬件错误的值 H。 |
| 报告 | 等于表示在生成错误报告时必须包含此错误的 True 值。 |
| 日志 | 等于 True 值,指示在发生此错误时必须创建错误日志条目。 |
| 警告 | 如果值为 False ,那么表示无法向此错误发出警报。 |
| 错误类型 | 等于 "Unkn" 值,指示错误类型未知。 |
| 错误描述 (_D) | 等于 FE00 的值,它指示未确定的错误。 |
| 概率原因 | 等于以下值:
|
| 用户原因 | 无。 |
| 用户操作 | 无。 |
| 本能原因 | 无。 |
| 指令操作 | 无。 |
| 故障原因 | 等于 FFFF 值,该值指示故障原因未知。 |
| 失败操作 | 等于以下值:
|
| 详细数据 (_D) | 等于 156,11 和 HEX 的值。 此值指示十六进制格式。 注:
err_rec 结构中的 Detail_Data 字段包含 mstor_err_rec 结构。 err_rec 字段在 /usr/include/sys/errids.h 文件中定义。 它遵循与其他错误相同的图注。 |
特殊文件
usbcd USB 客户机设备驱动程序将原始文件和块特殊文件用于其功能。 下表中按设备类型列出了 usbcd 设备驱动程序使用的特殊文件:
| 设备 | 特殊文件 | 描述 |
|---|---|---|
| 硬盘,闪存驱动器, RDX 设备 | /dev/rusbms0, /dev/rusbms1, ..., /dev/rusbmsn | 为 USB 客户机设备驱动程序提供用于访问字符 (原始 I/O 访问和控制功能) 的接口。 |
| /dev/usbms0, /dev/usbms1, ..., /dev/usbmsn | 为 USB 客户机设备驱动程序提供用于访问块 I/O 的接口。 | |
| CD-ROM , DVD-RAM , Blu-ray 只读设备: | /dev/rcd0, /dev/rcd1, ..., /dev/rcdn | 为 USB 客户机设备驱动程序提供用于访问字符 (原始 I/O 访问和控制功能) 的接口。 |
| /dev/cd0, /dev/cd1, ..., /dev/cdn | 为 USB 客户机设备驱动程序提供用于访问块 I/O 的接口。 |
注: 特殊文件名上的前缀
r 指示驱动器作为原始设备而不是块设备进行访问。 使用硬盘,闪存驱动器, RDX , CD-ROM 或读/写光盘驱动器执行原始 I/O 时,所有数据传输都需要达到设备块大小的倍数。 此外,对原始设备驱动程序执行的所有 lseek 子例程都必须生成一个文件指针值,该值是设备块大小的倍数。