ftrace
は、カーネルの関数トレースに使用されます。今はどのように割り込みのために働くのですか?割り込みモードでカーネル機能を追跡できますか?そうであれば、その仕組みを説明できます。関数呼び出しを追跡する関数を記述しようとしていますが、スーパーバイザモードでは正常に動作しますが、割り込みモードでは機能しません(ループに入ります)。私はIRQモードで動作させる必要があります。ftraceはどのように割り込みサービスルーチンを追跡しますか?
答えて
詳細については、Linux kernel ARM exception stack initのように、Linuxで使用されるIRQスタックの量は最小限です。 ARMには、IRQモードではlr
とsp
を含むいくつかのバンクレジスタがあります。 Linux ARMカーネルでは、これらのレジスタは、情報をスーパバイザ(8K)スタックに転送するために短時間のみ使用されます。このスーパーバイザースタックは、カーネルプロセスごとに割り当てるともメモリマネージャ、スケジューラとファイルシステムへのポインタ情報をタスクコンテキストブロックが含まれています。
Linuxでは、スーパバイザスタックには、FIQ、IRQ、未定義命令、データ、命令フォールトを含むすべてのモードのスタック情報があります。つまり、スタックを1つだけトレースする必要があります。 UNWIND(.fnend)
とENDPROC(__irq_usr)
のような特別な情報(擬似アセンブラ)がentry-armv.Sに含まれています。カーネルにELF情報を付けると、スタックトレースコードがスタック上のデータのレイアウトを理解できるunwindテーブルを作成できます。
Vector page mapping in ARM Linuxには、スタック/モード切り替えを行うvector_name
アセンブラマクロのようないくつかの詳細があります。 vector_name
アセンブラマクロは、IRQモードで実際に実行される唯一のコードです。 irq_usr
およびirq_svc
はスーパーバイザモードでスーパーバイザスタックで実行されます。
ftraceはスタックから関数名をどのように出力しますか?ftraceの関数名の実装部分(私はコードを意味します)を教えてください。私はカーネルのソースでftrace.cファイルをチェックしましたが、それを理解できませんでした。 – karthikpj
[stacktrace.c](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/arch/arm/kernel/stacktrace.c?id=refs/tags/) v4.10-rc3)は[ARM lrとfp](http://stackoverflow.com/questions/15752188/arm-link-register-and-frame-pointer/15752671#15752671)に従って標準オフセットでスタックトレースを行います。 。 [unwind.c](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/arch/arm/kernel/unwind.c?id=refs/tags/v4)。 10-rc3)は、機能を決定するためにPCとテーブルを参照するより現代的なバージョンです。 –
Mike Frysingerの[ftrace-design](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/plain/Documentation/trace/ftrace-design.txt)に詳細と現在のカーネルバージョンでなければなりません。 –
- 1. C++の割り込みサービスルーチン
- 2. サービスルーチンと割り込みサービスルーチンの違いは何ですか?
- 3. 割り込みサービスルーチンには何もありませんか?
- 4. 割り込みサービスルーチン内のmutexes
- 5. ISR(割り込みサービスルーチン)でのセマフォのような同期
- 6. カーネルで割り込みサービスルーチンを追加する
- 7. msp430シリーズマイクロコントローラの割り込みサービスルーチンの名前は何ですか?
- 8. pic18で割り込みサービスルーチンを行う方法
- 9. 割り込みサービスルーチンからの奇妙な動作
- 10. 割り込みサービスルーチンにほとんどのシステムコールが含まれない理由
- 11. 割り込みサービスルーチンのためのx86_64のレジスタを保存するには?
- 12. KeyEventsは割り込みのように機能しますか?
- 13. 組み込みのDOSでx86リアルモードのキーボード割り込みサービスルーチンを設定してリセットする
- 14. Jythonでどのようにキーボード割り込み(CTRL-C)をインターセプトしますか?
- 15. 8051で外部割り込みサービスルーチン(ISR)を終了する方法
- 16. デュアルプロセッサマシンではどのように割り込みが処理されますか?
- 17. Javaで割り込みがどのように知っていますか?
- 18. C#Async/Awaitは割り込みのように動作しますか?
- 19. デザイナーはどのように追跡できますか?
- 20. 「割り込みフック」とはどういう意味ですか?
- 21. どのように割り込み(つまりSIGTERMまたはSIGINT)を処理するのですか
- 22. トリガーカーネル割り込みハンドラ:どのように?
- 23. 共有割り込みラインの場合、使用する割り込みハンドラはどのようにして見つけられますか?
- 24. arduino割り込みサービスルーチン内で関数ポインタを使用してISRを変更する方法は?
- 25. MySQLに読み込まれたソースファイルを追跡するには?
- 26. プロセスメモリとCPUをどのように追跡できますか?
- 27. local_irq_save(flags)、このAPIはどのように割り込みシステムの状態を保存しますか?
- 28. ゲストが実行中の場合、割り込みはどうなりますか?
- 29. プロセッサは割り込みを要求しているデバイスをどのように認識できますか?
- 30. UINavigationControllerはどのように複数のUIViewControllerを追跡しますか?
"* _irq_handler"で関数トレースを実行すると、これはトレース出力(x86システム)の行です。 "Xorg-1448 [000] d.h. 830819.774909:ironlake_irq_handler <-__ handle _irq_event_percpu" "h"はハードアルコンテキストであることを意味します。それはあなたの2番目の質問に答えますか?そして最初に展開していただけますか? – michaeljt