我想使用libata(这是可能的,对吧?)从用户空间应用程序将ata命令(最终,任何支持的ata命令)发送到hdd(它是一个sata驱动器)。是的。
一开始我很乐意执行ata命令识别设备并打印出这些数据。不幸的是,我没有发现任何这样的例子。在libata中[确切地说,在libata core.c文件(linux-2.6.39/drivers/at a/)]中有一个函数ata dev read_id[第1860行,在我的源代码中更少一些],它可以做我想做的事情。问题是它作为指向ata_设备的参数指针之一,我不知道如何初始化它。
我读了一些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的应用程序,我可以看到它是如何在那里使用的?

最佳答案

开源工具smartmontools做了很多低级的ata处理。也许这能给你指明正确的方向。http://sourceforge.net/apps/trac/smartmontools/wiki

关于c - 使用libata从用户空间应用程序在HDD上执行ATA命令,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17366515/

10-13 03:20