医者によって。 、ioctlの署名はですint ioctl(int fd, int request, ...)
。リクエストはioctlコードです。
私のLinuxで利用可能なすべてのioctlリクエストコードが何であるかを知る方法はありますか?各コードがどのカーネルモジュールにマップされているか知りたいですか?
ベストアンサー1
ioctl
すべての定義はカーネルソースコードvim
とプログラムを使ってctags
見つけることができます。私はツールボックスのツールのみを使います。 NetbeansやEclipseなどのIDEなどの他のツールを使用することもできます。本質は同じです。
デモ:
(この.gif
ファイルをダウンロードしてGIMPを介して開くことができます。これにより、すべてのフレームに時間制限はありません。)
説明する:
1)私の考えでは、カーネルソースコードを掘り下げる以外に他の方法はないと思います。様々なマニュアルが存在します。確認してみてくださいapropos ioctl
。しかし、不完全または古いです。したがって、最も信頼できる方法は、ソースコードを見ることです(モジュール作成者のドキュメントがない場合)。ユーザープロセスはioctl
システムコールを使用してカーネルモジュールにさまざまなコマンドを送信します。このモジュールには各モジュールの定義と説明があります。I/W制御注文する。私たちの使命はそれらを見つけることです。
興味が始まります
ヘッダーはユーザープログラムのコンパイルに使用されるため、システムの現在のカーネル以外のglibc
ユーザーと同じカーネルソースバージョンを使用する必要があります。glibc
したがって、最後のカーネルソース(またはカーネルソースとは異なるソース)を使用すると、glibc
結果が正しくない可能性があります。
glibc
Ubuntuでヘッダーバージョンを見つけるには:
dpkg -l linux-libc-dev*
結果:
ii linux-libc-dev:amd64 4.15.0-50.54 amd64 Linux Kernel Headers for development
Ubuntuパッチを含むカーネルソースをリポジトリから現在のディレクトリ(Ubuntuの場合)にダウンロードします。
apt-get source linux-source-4.15.0
コメント終了
2) I/W制御コマンドはモジュールヘッダーファイルで定義されています。some_name.h。これは数字にすぎず、特別なマクロを使用して計算できます。
#define "ioctl name" __IOX("major number","command number","argument type")
~から文書:
カーネルに新しいioctlを追加するには、次に定義されている_IOマクロを使用する必要があります。Linux/ioctl.h:
_IO an ioctl with no parameters _IOW an ioctl with write parameters (copy_from_user) _IOR an ioctl with read parameters (copy_to_user) _IOWR an ioctl with both write and read parameters.
ただし、一部ioctl
の定義はこの規則に従わず、ドライバの場合などの一般的なマクロとは異なりませんtty
。
#define TCGETS 0x5401
したがって、grep
ヘッダーファイルのみを持つことはできません。
三)限られたI/W制御このコマンドはモジュールソースコードファイルで使用されます。some_name.c。すべての関数によって呼び出される特別な関数であるハンドラがあります。I/W制御必要です。かかるI/W制御番号をパラメータとして指定し、プログラムの実行をその分岐に切り替えます。例:
switch(ioctl_cmd){
case IOCTL_ONE:
processing;
break;
case IOCTL_TWO:
processing;
break;
case IOCTL_THREE:
processing;
break;
}
4)これI/W制御.unlocked_ioctl
ハンドラは次のフィールドに保存されますfile_operations struct
。
static const struct file_operations sonypi_misc_fops = {
...
.unlocked_ioctl = sonypi_misc_ioctl,
したがって、ソースコードからこの割り当てを見つけ、プログラムを介してctags
処理機能定義にジャンプして表示できます。I/W制御建設中の支店switch
。次に、ヘッダファイルの特定のコマンドに移動して定義と説明を確認します。