1

我想使用 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 的应用程序,我可以看到它在那里是如何使用的?

4

2 回答 2

2

开源工具 SmartMonTools 做了很多低级 ATA 处理。也许这可以为您指明正确的方向。http://sourceforge.net/apps/trac/smartmontools/wiki

于 2013-06-28T14:05:09.010 回答
0

LibATA 在内核模式下实现,用于处理与 ATA 驱动器相关的不同功能。

如果您想使用 libATA 功能,您必须编写自己的内核模块,然后将 ioctl 方法公开给用户空间。

更好的方法是使用 ATA Passthrough 相关的 api 向 ATA 驱动器发送命令,Smart Mon Tools 和 hdparam 使用相同的方法。

于 2016-08-01T13:35:18.377 回答