SCSI 到 NVME 转换

问题描述 投票:0回答:3

我们正在开发一个应用程序来管理 Windows 10 中的设备。我们不应该使用自己的驱动程序与驱动器通信,因此为了发送大部分命令,我们必须依赖 Windows 10 中提供的任何内容。


对于像

NVME

Security Receive
这样的命令,我们使用它们对
Security Send
转换的支持,其中 SCSI 命令从主机发送,并由 SCSI 内核堆栈转换为
SCSI-NVME
命令,然后发送到驱动器。

我们可以看到命令正在到达驱动器,但在使用

NVME

命令的情况下,转换无法将正确的命名空间标识符发送到驱动器,因此,SCSI 在感知数据中返回错误,如

Security Receive

SCSI-NVME 转换不允许在其 CDB 中设置命名空间标识符字段。是否有其他方法可以在我们从主机端发送的 SCSI 命令中设置此命名空间标识符?或者这是一个驱动程序错误,它向驱动器发送了错误的数据?

微软的其他API(如Storage Query Property)自己设置了这个命名空间ID,我们不需要从用户端设置它。

如果有在类似环境中工作过的人可以帮助我们,那将非常有帮助。

storage windows-10 scsi
3个回答
0
投票

在我使用过的所有 Windows NVMe 驱动程序上,控制器由其适配器句柄公开,命名空间由物理驱动器句柄公开。目的是 SCSI 命令转到物理驱动器句柄,而本机 NVMe 命令转到适配器。如果将 SCSI 命令发送到物理驱动器句柄,则预期的命名空间是隐式的,因为每个句柄都直接连接到命名空间,因此应在转换期间将其设置为驱动程序。这绝对是它在 OFA(OpenFabrics Alliance)驱动程序和所有衍生产品上的工作方式。

如果您将 SCSI 命令发送到物理驱动器并且未填写命名空间,则听起来像是驱动程序错误。如果您要将 SCSI 命令发送到适配器(并且不会被操作系统/驱动程序拒绝),请尝试将其发送到与所需命名空间 ID 对应的物理驱动器。


0
投票

干杯!


0
投票

NVMe 命名空间应一对一映射到 SCSI 逻辑单元 (LUN)。

有关更多详细信息,请参阅规范:

NVM-Express-SCSI-Translation-Reference v1.1

设备需要正确实现这一点。您收到“无效的 LU 标识符”听起来像是设备或其驱动程序中的错误(看来您已经识别出)。

© www.soinside.com 2019 - 2024. All rights reserved.