【问题标题】:Sending ATA command "Read native max address (0x27 , 0xF8) not reponding over SAS controller using SAT(SCSI ATA translate)发送 ATA 命令“读取本机最大地址(0x27,0xF8)未使用 SAT(SCSI ATA 转换)通过 SAS 控制器响应
【发布时间】:2023-03-05 00:01:01
【问题描述】:

我想通过 SAS 接口找出 HDD 的本机最大地址。 我正在使用带有 SCSI_PASS_THROUGH 的 SAT(scsi ata 翻译)。

但无法找到任何缓冲区或 SCSI_PASS_THROUGH 的有效感知信息 来自驱动器的 IOCTL_SCSI_PASS_THROUGH。 SCSI_PASS_THROUGH 的 cdb 值 =

sptwb.Spt.CdbLength = 12;
        sptwb.Spt.Cdb[0] = 0xA1;//ATA PASS THROUGH(12) OPERATION CODE(A1h)
        sptwb.Spt.Cdb[1] = (4 << 1) | 0; 
        sptwb.Spt.Cdb[2] = (1 << 3) | (1 << 2) | 2;
        sptwb.Spt.Cdb[3] = 0xe0;
        sptwb.Spt.Cdb[4] = 0x00;
        sptwb.Spt.Cdb[5] = 0x00;
        sptwb.Spt.Cdb[6] = 0x00;
        sptwb.Spt.Cdb[7] = 0x00;
        sptwb.Spt.Cdb[8] = (UCHAR)0x40;//(UCHAR)head;
        sptwb.Spt.Cdb[9] = 0x27;//COMMAND

但不返回任何缓冲区。 请提供准确的 cdb 参数以读取 SAS 机器上的本机最大地址。

【问题讨论】:

    标签: translation scsi ata


    【解决方案1】:

    我面前没有所有相关的 SCSI 规范。因此,我假设您正在正确构建 SATL (SCSI ATA 转换层) CDB。首先要检查的是 ioctl 是否完成。也就是说,检查TrueFalseDeviceIoControl() 的返回码,然后检查GetLastError() 以确定出了什么问题(如果适用)。如果 ioctl 没问题,请检查 SCSI_PASS_THROUGH_DIRECT structure 成员 .ScsiStatus。如果这是 0,那么命令完成就好了。如果状态为 0,这很可能是没有有效感知信息的原因。

    当我偶然发现这个线程时,我实际上正在研究这个命令。最新的 ATA 命令规范 ACS-3(日期为 2013 年 10 月 28 日)表明 Read Native Max AddressRead Native Max Address Ext 命令现已过时。我在 ACS-2 中找到了它们的定义。日期为 2009 年 8 月 3 日的most recent draft 表明此命令的输出不会是缓冲区。相反,输出将在返回的 Device-To-Host FIS 的 LBA 字段中。


    附录 原始帖子的措辞让我相信这是在 Windows 中完成的。如果您正在使用 Linux,我应该包括该过程将是相同的。但是,不要使用GetLastError() 来确定出了什么问题。在 Linux 中,ioctl() 的返回码将是您需要的代码。

    如果在 Linux 中,您最有可能使用 sg 驱动程序和the sg_io_hdr_t structure。此结构还有一个.status 成员,其中包含 SCSI 状态代码。无论是在 Linux 还是 Windows 中,您都应该始终检查此代码,因为假设命令成功是因为 ioctl 确实是一个谬论。 Linux 中还有其他可用的直通驱动程序,例如LSI MPT 接口。如果这是您使用的,该过程仍然相同。

    【讨论】:

      【解决方案2】:

      您尝试执行的命令 0xF8 (Read Native Max Address) 不是 SCSI 命令,而是 ATA 命令。

      CDB 代码 0xA1 确实可以与 IOCTL_SCSI_PASS_THROUGH API 一起使用,以将 SCSI/ATAPI 命令发送到设备。但这不是你想要的。

      改用IOCTL_ATA_PASSTHROUGH

      这里的例子和讨论: Sending ATA commands directly to device in Windows?

      【讨论】:

        猜你喜欢
        • 2010-11-05
        • 2015-07-24
        • 2023-03-23
        • 2012-12-27
        • 1970-01-01
        • 2015-07-18
        • 2011-06-09
        • 2011-06-20
        • 1970-01-01
        相关资源
        最近更新 更多