libata を使用して、ユーザー空間アプリケーションから HDD (SATA ドライブ) に ATA コマンド (最終的には、サポートされている ATA コマンド) を送信したいと考えています (これは可能ですよね?)。私が最初に喜んでいるのは、ATA コマンドの Identify Device を実行して、このデータを出力することです。残念ながら、そのような例は見つかりません。libata [ファイル libata-core.c (linux-2.6.39/drivers/ata/)] には、関数 ata_dev_read_id [ソース コードの 1860 行目、以下] があり、これは私がやりたいことを実行するために継ぎ目があります。問題は、それが ata_device への引数ポインタの 1 つとして取られ、初期化する方法がわからないことです。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 パススルーを使用できることは承知しています。または、代わりに、libATAを使用するオープンソースツール、アプリケーションを知っている人がいて、そこでどのように使用されているかを見ることができますか?
質問する
6031 次
2 に答える
2
オープン ソース ツールの SmartMonTools は、多くの低レベル ATA 処理を行います。おそらく、それはあなたを正しい方向に向けるかもしれません。http://sourceforge.net/apps/trac/smartmontools/wiki
于 2013-06-28T14:05:09.010 に答える
0
LibATA は、ATA ドライブに関連するさまざまな機能を処理するためにカーネル モードで実装されます。
libATA 機能を使用する場合は、独自のカーネル モジュールを記述してから、ioctl メソッドをユーザー空間に公開する必要があります。
より良いアプローチは、ATA パススルー関連の API を使用してコマンドを ATA ドライブに送信することです。Smart Mon Tools と hdparam で同じ方法が使用されています。
于 2016-08-01T13:35:18.377 に答える