Выполнение команд ATA на жестком диске из приложения пользовательского пространства с использованием libata
Я хотел бы отправить команду ATA (в конечном счете, любую поддерживаемую команду ATA) на мой жесткий диск (это диск SATA) из приложения пользовательского пространства с использованием libata (это возможно, верно?). Я был бы рад начать с команды ATA Identify Device и распечатать эти данные. К сожалению, я не нахожу такого примера. В 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, и я мог видеть, как он там используется?
2 ответа
Инструмент с открытым исходным кодом SmartMonTools выполняет много низкоуровневой обработки ATA. Возможно, это могло бы указать вам правильное направление. http://sourceforge.net/apps/trac/smartmontools/wiki
LibATA реализован в режиме ядра для обработки различных функций, связанных с приводами ATA.
Если вы хотите использовать функциональность libATA, вы должны написать свой собственный модуль ядра, а затем представить методы ioctl в пространстве пользователя.
Лучшим подходом будет использование связанных API-интерфейсов ATA Passthrough для отправки команд на диски ATA, такие же методы используются Smart Mon Tools и hdparam.