私はLinuxデバイスドライバの作業をしています。主な焦点はWi-Fiドライバです。デバイスを接続するときにコードがどのように流れるかを知りたいです。たぶん、printk
各関数に1行を追加するなどの操作を実行できます。私が持っているデバイスはドライバでサポートされていますath9k_htc
。学習目的でドライバコードをいくつか変更したいと思います。
Linuxでドライバモジュールのコードフローを理解する正確なまたは一般的な方法は何ですか?
ベストアンサー1
これをしたいときに使うftrace
額縁。まず、特別なファイルシステムをマウントします。
mount -t tracefs nodev /sys/kernel/tracing
(ルートとして、これをすべて実行するにはルートである必要があり、とにかくすべてのタスクをrootとして実行し、を使用するよりもrootシェルを持つ方が簡単ですsudo
)。
次に、そのディレクトリに切り替えます。
cd /sys/kernel/tracing
README
簡単な要約を提供する基本コンテンツが含まれています。私が使用する関数呼び出しを調べるために関数グラフトラッカー、function_graph
存在するavailable_tracers
。たとえば、興味のある機能を特定します。ath9k_htc_tx
、設定
echo ath9k_htc_tx > set_graph_function
他の機能を追加できるので、最初の機能の後に>>
使用してください。次のコマンドを使用して設定された機能を表示できます。
cat set_graph_function
作成時にset_graph_function
実行中のカーネルの関数を確認します。関数が見つからないと書き込みが失敗するので、何も追跡できなくなったらすぐにわかります。
機能を設定したら、トラッカーを有効にします。
echo function_graph > current_tracer
trace
それからファイルを見てください。トラッカーを再度無効にするには、
echo nop > current_tracer
または、tracing_on
0または1(0はトレースを無効にし、1はトレースを再び有効)を作成して切り替えます。