scsesdd SCSI 设备驱动程序
用途
支持 SCSI 机柜服务 设备的设备驱动程序。
语法
#include <sys/devinfo.h>
#include <sys/scsi.h>
#include <sys/scses.h>描述
特殊文件 /dev/ses0, /dev/ses1, ..., 提供对 SCSI 机柜设备的 I/O 访问和控制功能。
典型 SCSI 机柜服务操作是使用 打开, ioctl和 关闭 子例程实现的。
以 "互斥访问" 方式打开所选 设备 。 此方式是单入方式; 即,一次只能有一个进程将其打开。
仅当设备当前未打开时,才可以打开 设备 。 如果尝试打开 设备,而该设备已经打开,则会返回 -1 值,并将 errno 全局变量设置为 EBUSY 值。
ioctl 子例程
以下 ioctl 操作可供 SCSI 机柜服务 设备使用:
| 操作 | 描述 |
|---|---|
| IOCINFO | 返回 /usr/include/sys/devinfo.h 文件中定义的 devinfo 结构。 |
| SESIOCMD | 成功打开设备后,此操作将提供向指定的机柜发出任何 SCSI 命令的方法。 设备驱动程序不会执行此 ioctl 操作的错误恢复或日志记录失败。 SCSI 状态字节和适配器状态字节通过 arg 参数返回,该参数包含 sc_iocmd 结构 (在 /usr/include/sys/scsi.h 文件中定义) 的地址。 如果 SESIOCMD 操作返回值为-1,并且 errno 全局变量被设置为非零值,则所请求的操作失败。 在此情况下,调用者应该对返回的状态字节进行求值,以确定操作失败的原因以及应该执行的恢复操作。 开发信息 结构定义了该命令的最大传输大小。 如果尝试传输的数据超过最大值,将返回 -1 值,并将 errno 全局变量设置为 EINVAL. 值。 请参阅 小型计算机系统接口 (SCSI) 规范 以获取适用的设备来获取请求检测信息。 |
设备需求
对于 SCSI 机柜服务设备,存在以下硬件需求:
- 设备必须支持 SCSI-3 机柜服务规范修订版 4 或更高版本。
- 可以通过不同于机柜内 SCSI 设备的 SCSI 标识的 SCSI 标识来对设备进行寻址。
- 在接收 SCSI 查询到页面代码时,设备必须 "行为正常" 0xC7。 这意味着,如果设备通过检查条件使查询页面代码 C7 失败,那么下一个 SCSI 命令将清除该检查条件。 不需要显式请求检测。
- 如果设备在标准查询数据中报告其 ANSI 版本为 3 (SCSI-3) ,那么它必须正确拒绝 luns 8-31 的所有无效请求 (即,设备不能忽略 Lun 标识中的上限位,因此不能将 Lun 8 视为 Lun 0 等)。
错误条件数
在以下情况下,针对此设备的 约克特尔 和 开 子例程失败:
| 错误 | 描述 |
|---|---|
| EBUSY | 已尝试打开已打开的设备。 |
| EFAULT | 输入了非法用户地址。 |
| EINVAL | 对于 SESIOCMD ioctl 操作,数据缓冲区长度超过了 开发信息 结构中定义的最大值。 |
| EINVAL | 尝试了不受支持的 ioctl 操作。 |
| EINVAL | 已尝试配置仍处于打开状态的设备。 |
| EINVAL | 给出了非法的配置命令。 |
| EIO | 找不到目标设备或目标设备未响应。 |
| EIO | 目标设备已指示未恢复的硬件错误。 |
| 电子文件 | 对于已具有最大允许打开设备数的适配器,已尝试打开该适配器。 |
| ENODEV | 尝试访问一个未定义的设备。 |
| ENODEV | 尝试关闭一个尚未定义的设备。 |
| ENXIO | ioctl 子例程提供了无效参数。 |
| EPERM | 尝试的子例程需要适当的权限。 |
| ETIMEDOUT | I/O 操作已超过给定的计时器值。 |
可靠性和可维护性信息
SCSI 机柜服务设备将返回以下错误:
| 错误 | 描述 |
|---|---|
| 异常终止的通信 | 设备已取消命令。 |
| Adapter 错误 | 适配器返回了错误。 |
| 良好完成 | 命令成功完成。 |
| 硬件错误 | 在命令执行期间或自测试期间发生不可恢复的硬件故障。 |
| 非法的请求 | 命令或命令参数不合法。 |
| 介质错误 | 该命令已终止,但出现未恢复的介质错误情况。 |
| 未就绪 | 逻辑单元处于脱机状态或缺少介质。 |
| 已恢复的错误 | 在应用某些恢复后,该命令成功。 |
| 单元辅助操作请求 | 设备已重置或已开启电源。 |
文件
| 项 | 描述 |
|---|---|
| /dev/ses0,/dev/ses1...,/dev/sesn | 提供一个接口以允许 SCSI 设备驱动程序访问 SCSI 机柜服务设备。 |