IOCTL コマンドを実装しようとすると、次のように遭遇しました。
_IO
読み取りと書き込みの両方の場合
なぜ私が考慮_IOR
しなければならないのか_IOW
手がかりはありますか?
IOCTL コマンドを実装しようとすると、次のように遭遇しました。
_IO
読み取りと書き込みの両方の場合
なぜ私が考慮_IOR
しなければならないのか_IOW
手がかりはありますか?
実際には _IO は、パラメーターをまったくとらない ioctl 用です。たとえば、ドライバーで以前にセットアップされたコマンドをトリガーしたい場合、データをまったく渡す必要がない場合があります。
_IOWR は、パラメーターを入出力する ioctl 用です。私の経験では、これらはまれであり、1 つのパラメーターが 2 つの非常に異なる目的で使用されるため、混乱を招く可能性がありますが、必要な場合に役立ちます。
http://www.mjmwired.net/kernel/Documentation/ioctl-number.txtの冒頭を参照してください
カーネルには方向を強制するものは何もないため、主にドキュメント用です。
_IOR --- デバイスからユーザー空間アプリへの読み取り用、_IOW --- ユーザー空間アプリからデバイス (ハードウェア) に渡されたデータの書き込み、および_IOWR --- デバイスから/へのデータの読み取り/書き込みの両方。ただし、_IO --- は基本的に、デバイス構成可能なコマンドを目的のデバイスに送信するために使用されます。たとえば、フラッシュに読み書きする場合は、最初にコマンドを送信してから、フラッシュから/にデータを読み書きする必要があります。読み取り/書き込みコマンドはフラッシュ データシートで指定されているように一定/固定であるため、ユーザー空間アプリからドライバー ioctl にコマンドを明示的に送信/渡す必要はありません。_IO ioctl ケース内で必要に応じてコマンド パケットを形成し、送信できます。フラッシュする. _IO --- ユーザー空間アプリからデータ (コマンド) を渡す必要がないことを示します。ドライバーでは、ハードコードされた読み取り/書き込みコマンドを使用し、目的のデバイスにコマンドを送信します。_IOR または _IOW または _IOWRは、ユーザー空間アプリからデバイス (例: フラッシュ) に渡される揮発性データの読み取り/書き込みに使用されます。この答えがあなたの疑問を明確にすることを願っています:-)。