问题标签 [ata]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
111 浏览

ethernet - AoE 标准似乎没有 CRC 字段。这是否违反了以太网标准?

我一直在我的一个设置中调试 AoE。

在其中我注意到 AoE 数据包似乎没有帧​​上的校验和字段。我查看了 AoE 规范,它似乎没有在定义的数据包的末端有 CRC 校验和。

校验和字段是可选的吗?

0 投票
1 回答
5358 浏览

windows - ATA 命令设备识别

我正在尝试使用 ATA_PASS_THROUGH_EX 识别设备。

当我看到输出缓冲区时,它包含所有无效数据。有人可以帮我做错什么吗?

更新:当我检查错误值时,它是 5,这意味着它是访问冲突。我在管理员模式下运行。难道我做错了什么?

-缺口

0 投票
1 回答
2533 浏览

windows - 到 USB 驱动器的 ATA 命令

Windows 7
C 编程
Visual C++ 2008(在 VMWare 中)

我想用DeviceIOControl 向 USB 硬盘驱动器发送一些 ATA 命令(IDENTIFY DEVICE、READ NATIVE MAX ADDRESS、SET MAX ADDRESS)。因此我有一些问题。

据我了解,USBSTOR 无法直接处理 ATA 命令(使用IOCTL_ATA_PASS_THROUGH)。我试过这个,它适用于本机 IDE 硬盘,但不适用于 USB。

  1. 应用程序将 SCSI 命令发送到设备并将它们转发到设备是否正确?所以我需要创建一个封装了相应 ATA 命令的 SCSI 命令?

  2. dwIoControlCode能用什么来做到这一点?我试过了,IOCTL_SCSI_MINIPORT但错误是ERROR_NOT_SUPPORTED. 它可以与 minport 一起使用吗?微型端口是否仍然是最新的?

0 投票
0 回答
996 浏览

windows - IOCTL_ATA_PASS_THROUGH_DIRECT 在 Windows8 中失败

这是我的示例代码:

此调用仅在 Windows 8 和 Windows Server 2012 上失败,并抛出消息“参数不正确”(@err = 87)。它在 Windows 7 上运行良好。任何人都可以为这个问题提供一些解决方案吗?

0 投票
0 回答
564 浏览

size - 编写 ATA 驱动程序 LBA28 与 LBA48 混淆

我目前正在尝试让 LBA 为我的 ATA 驱动程序工作,但我遇到了问题。

我的identify函数返回 OK 并word 83;bit 10设置了返回的标识数据,所以我的设备支持 LBA48。但是当我尝试获取 LBA48 扇区的总数(配置字 100-103)时,它给了我的零。在虚拟机中我有 1GB 磁盘集,但这个字段仍然为零。我还尝试获取 LBA28 扇区的数量 => 这是正确的扇区。

有趣的是,当我打印出来时heads * cylinders * sectors_per_track,该值几乎与位于字 60-61 上的总 LBA28 扇区的值相同。它是2097152总 LBA28 和 2096640 的h * c * s. 这两个值的差是512

有人知道我在做什么错吗?有没有其他方法可以获取硬盘的大小?

0 投票
0 回答
1788 浏览

c - 将 WRITE SECTOR(S) EXT ATA 命令与 SCSI ATA PASS-THROUGH(16) 一起使用

欢迎。我在为 WRITE SECTOR(S) EXT - 34h、PIO Data-Out(对于 WRITE DMA EXT - 35h、DMA 相同结果)执行 SCSI 命令 ATA PASS-THROUGH(16) 时遇到问题。我使用内核 2.6.39。我有一个由 SCSI 控制的 HDD(SAT​​A)。我想将数据写入该驱动器的特定扇区。为了实现这个目标,我使用了 SCSI 命令 ATA PASS_THROUGH(16)。在源代码中,它可以像这样执行 ioctl:

当 ATA 命令的 LBA 小于 0xFE2600 时,此操作可以正常工作。数据写入驱动器,可以读取,重启后仍然存在。但是,当 LBA >= 0xFE2600 时执行此 ATA 命令时,将显示以下消息:

[5127.415214]ata1.00:异常Emask 0x0 SAct 0x0 SErr 0x0动作0x0

[5127.421751]ata1.00:irq_stat 0x40000001

[5127.425737]ata1.00:命令失败:写入 DMA EXT

[5127.430659] ata1.00: cmd 35/00:01:ff:ff:00/00:00:ff:00:00/40 标签 0 dma 512 输出

[5127.430664] res 51/10:01:ff:ff:00/00:00:ff:00:00/40 Emask 0x81(无效参数)

[5127.446389]ata1.00:状态:{DRDY ERR}[5127.450446]ata1.00:

错误:{ IDNF }

一开始我在想内核可能有问题,它只支持LBA 24位,不支持LBA 48位,但是这个理论与阈值0xFE2600并不完全一致(我认为如果阈值为 0x1000000)。从 IDENTIFY DEVICE - ECh, PIO Data-In 返回的数据中,我可以读到最大 LBA 为 0x2542EAB0,并且该驱动器支持 LBA 48 位。现在真的不要在哪里统计调查这个问题。如果有人有一些想法,请与我分享。如果您希望我提供其他信息,请告诉我,我会尽快提供。

0 投票
2 回答
6031 浏览

c - 使用 libata 从用户空间应用程序在 HDD 上执行 ATA 命令

我想使用 libata 从用户空间应用程序将 ATA 命令(最终,任何受支持的 ATA 命令)发送到我的 HDD(它是一个 SATA 驱动器)(这是可能的,对吗?)。一开始我会很高兴的是执行 ATA 命令识别设备并打印出这些数据。不幸的是,我没有找到任何这样的例子。在 libata [恰好在文件 libata-core.c (linux-2.6.39/drivers/ata/)] 中有一个函数 ata_dev_read_id [第 1860 行,在我的源代码中更少],它可以做我想做的事情。问题是它作为指向 ata_device 的参数指针之一,我不知道如何初始化它。我阅读了一些 libATA 开发人员指南(http://www.hep.by/gnu/kernel/libata/index.html),但它并没有为我清除问题。我认为示例源代码将对我有更多帮助。任何人都可以提供这样的例子(核心来源就足够了,不需要错误检查之类的东西)。实际上我想要的是一个源代码,它可以做这样的事情http://www.tldp.org/HOWTO/SCSI-Generic-HOWTO/pexample.html但我不想使用 sg.h ioctl 我想使用 libata。我知道我可以使用 SCSI 命令 ATA Pass-Through。或者,例如,也许有人知道任何开源工具,使用 libATA 的应用程序,我可以看到它在那里是如何使用的?

0 投票
2 回答
1508 浏览

batch-file - 如何判断硬盘是ATA还是AHCI?

从批处理文件中您将如何找到硬盘驱动器是 ATA 还是 AHCI?它是存储在我可以解析的文件中的某个地方,还是有一个命令可以找到?

0 投票
3 回答
11790 浏览

linux - ATA Trusted commands-如何设置libata allow_tpm

我想将受信任的发送/受信任的接收发送到我的硬盘驱动器。我找到了这个页面: ATA Trusted commands in Linux。(感谢 ehemient 和 Dmitry Obukhov)。

目前,我的问题是如何设置 libata allow_tpm = 1。我使用的是 Ubuntu 13.10。我的代码与 Dmitry Obukhov 相同(它非常适用于识别和所有其他命令,但不适用于受信任的命令。)

在看了另一面之后,这些是我所做的:

在终端:

重新启动后,我systool -a -v -m libata再次运行,没有任何变化allow_tpm。我应该怎么做才能改变allow_tpm

0 投票
1 回答
2002 浏览

windows - SATA控制器有多少物理通道?

想象一个带有一个 SATA 控制器的系统。如果控制器在 IDE 模式下运行,它将显示在设备管理器中,如下所示:

视窗XP:

Windows >= Vista:

如果控制器在 AHCI 模式下运行,它将在 XP 和 >= Vista 上显示为“SATA AHCI 控制器”。

AHCI 模式下的 SATA 控制器最多支持 32 个设备(32 位掩码表示设备连接)。我认为这只是软件限制,鉴于每个设备都需要单独的通道,因此不太可能存在这样的系统,其中 SATA 控制器与所有 32 个通道“连接”。但我认为 32 是一个数字,意味着控制器可以处理两个以上的设备,因此具有两个以上的通道。所以,我想问一下SATA控制器在实践中通常有多少通道。ATA控制器有两个通道,那么是不是说SATA控制器在IDE模式下为了软件兼容性有相同的通道数呢?或者它有两个以上的通道,但在 IDE 模式下只有前两个通道可用?(至少在 XP 上,因为“主要”渠道和“次要”渠道