我想使用libata从用户空间应用程序发送ATA命令(最终,任何受支持的ATA命令)到我的HDD (它是SATA驱动器)(这是可能的,对吧?)。一开始我会很高兴的是准备好ATA命令,识别设备并打印出这些数据。不幸的是,我找不到任何这样的例子。在libata中,恰好在libata-core.c文件(linux-2.6.39/ ata_dev_read_id /ata/)中有一个函数驱动程序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的开源工具和应用程序,我可以看到它是如何在那里使用的?
发布于 2013-06-28 22:05:09
开源工具SmartMonTools做了很多低级的ATA处理。也许这可以为你指明正确的方向。http://sourceforge.net/apps/trac/smartmontools/wiki
发布于 2016-08-01 21:35:18
LibATA是在内核模式下实现的,用于处理与ATA驱动器相关的不同功能。
如果希望使用libATA功能,则必须编写自己的内核模块,然后将ioctl方法公开给用户空间。
更好的方法是使用ATA Passthrough相关api向ATA驱动器发送命令,Smart Mon工具和hdparam也在使用相同的方法。
https://stackoverflow.com/questions/17366515
复制相似问题