ドライバモジュールのコードフローをどのように理解できますか?

ドライバモジュールのコードフローをどのように理解できますか?

私は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_on0または1(0はトレースを無効にし、1はトレースを再び有効)を作成して切り替えます。

おすすめ記事