私の質問はもっと素朴に聞こえるかもしれません。
しかし、Linuxでユーザースペースからカーネルスペースに対して行われたioctl呼び出しを一覧表示できるかどうかを知りたいと思いました。
私の質問はもっと素朴に聞こえるかもしれません。
しかし、Linuxでユーザースペースからカーネルスペースに対して行われたioctl呼び出しを一覧表示できるかどうかを知りたいと思いました。
LTTngを使用します。これは最新の Linux カーネル トレーサー (ユーザー ランドでも動作) で、Ubuntu、Fedora、Arch Linux、Debian、または openSUSE を使用している場合に数秒でインストールされます (パッケージとして入手可能)。それ以外の場合でも、tarballを取得してインストール手順に従うのは簡単です。
次のようなトレースを作成します。
$ sudo lttng create mySession
Session mySession created.
Traces will be written in /home/user/lttng-traces/mySession-20120619-103600
$ sudo lttng enable-event -k -a --syscall
All kernel system calls are enabled in channel channel0
$ sudo lttng start
Tracing started for session mySession
次に、通常のことを行います。を含むすべてのシステム コールは、ioctl
興味深いパラメータを使用して LTTng によって記録/キャプチャされます。トレースが/home/user/lttng-traces/mySession-20120619-103600
ディレクトリに書き込まれています。録音が終了したら、次の操作を行います。
$ sudo lttng stop
Tracing stopped for session mySession
$ sudo lttng destroy
Session mySession destroyed at /home/ephipro
ここdestroy
では良く聞こえませんが、実際にはトレース ファイルが破棄されるわけではありません。すべてをフラッシュし、ファイルへのリンクを解放するだけです。
sudo
カーネルイベントをトレースしているため、どこでも必要です。明らかなセキュリティ上の理由から、すべてのシステム コールとそのパラメータをユーザーに見せたくない場合。
2 つの主要なビューアが現在利用可能です。Babeltraceは、キャプチャされたすべてのイベントのテキスト出力を提供します。apt-get
( babeltrace
)を使用して取得できるはずです。それ以外の場合は、最新の tarballを取得してください。次に、巨大なダンプ Babeltrace 出力から呼び出しgrep
を抽出するために使用します。ioctl
$ sudo babeltrace /home/user/lttng-traces/mySession-20120619-103600 | grep ioctl
[10:36:41.795425690] (+0.000001403) sys_ioctl: { 1 }, { fd = 18, cmd = 62981, arg = 0 }
[10:36:41.795435996] (+0.000000610) sys_ioctl: { 1 }, { fd = 18, cmd = 2148070920, arg = 139928632507464 }
[10:36:41.795573431] (+0.000008840) sys_ioctl: { 1 }, { fd = 18, cmd = 62982, arg = 4096 }
[10:36:41.795591089] (+0.000000854) sys_ioctl: { 1 }, { fd = 18, cmd = 62981, arg = 38520960 }
[10:36:41.795595956] (+0.000000434) sys_ioctl: { 1 }, { fd = 18, cmd = 2148070920, arg = 139928632507464 }
[10:36:41.796125261] (+0.000006110) sys_ioctl: { 1 }, { fd = 18, cmd = 62982, arg = 0 }
[10:36:41.796185722] (+0.000000947) sys_ioctl: { 1 }, { fd = 18, cmd = 62981, arg = 38530304 }
[10:36:41.796192688] (+0.000000628) sys_ioctl: { 1 }, { fd = 18, cmd = 2148070920, arg = 139928632507464 }
[10:36:41.797155511] (+0.000003280) sys_ioctl: { 0 }, { fd = 18, cmd = 62982, arg = 0 }
[10:36:41.797202362] (+0.000001995) sys_ioctl: { 0 }, { fd = 18, cmd = 62981, arg = 38529760 }
...
ここに表示されるのは、イベントが発生した時刻、イベント名、およびそのすべてのパラメーターと値です。
Eclipse は、Linux ツール プラグイン プロジェクト内に完全な LTTng ビューアーも備えています。簡単な手順は次のとおりです。
Eclipse Juno 以降、Linux ツールは C/C++ 開発者向けの Eclipse IDE に組み込まれています。
その後、新しいトレース プロジェクトを作成し、トレースをインポートできます。Tracingパースペクティブを開くと、イベントを視覚化するための便利なビューにアクセスできます。ヒストグラムビューとイベントビューの例を次に示します。
ここでは、[イベント] ビューを使用してioctl
通話のみを保持しています。コンテンツとタイム スタンプが Babeltrace の出力と一致していることがはっきりとわかります。
やってみましたstrace
か?すべてのシステムコールが一覧表示されます。