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 机柜服务设备。