6.10.2 Linux カーネルのデバッグについて

DS-5 は、Linux カーネルのソースレベルのデバッグをサポートしています。Linux カーネル(および関連するデバイスドライバ)は標準の ELF 形式の実行可能ファイルと同じ方法でデバッグできます。例えば、ブレークポイントをカーネルコードに設定し、ソースをステップ実行し、コールスタックを確認して、変数を観察できます。

現在マップされていないユーザ空間パラメータ(__user とマークされている)をデバッガが読み出すことはできません。
カーネルをデバッグするには
  1. 以下のオプションを使用して、カーネルソースをコンパイルします。
    • CONFIG_DEBUG_KERNEL=y
      カーネルのデバッグオプションを有効にします。
    • CONFIG_DEBUG_INFO=y
      デバッグ情報を使用して vmlinux をビルドします。
    • CONFIG_DEBUG_INFO_REDUCED=n
      カーネルのコンパイル時に完全なデバッグ情報を含みます。
    • CONFIG_PERF_EVENTS=n
      パフォーマンスイベントのサブシステムを無効にします。パフォーマンスイベントサブシステムの一部の実装では、内部的にハードウェアブレークポイントを使用し、デバッガによって設定されたハードウェアブレークポイントの使用を中断します。ハードウェアブレークポイントのヒットに失敗するデバッガや、イベントをロードおよびアンロードするカーネルモジュールの報告に失敗するデバッガを監視する場合は、このオプションを無効にすることをお勧めします。

      Streamline を使用する場合は、このオプションが有効になっている必要があります。
    カーネルソースをコンパイルすると、デバッグ情報を含む Linux カーネルイメージおよびシンボルファイルが生成されます。

    • 実行するデバッグのタイプによっては、その他のオプションが必要になることがあることに注意して下さい。詳細はカーネルのドキュメントをチェックして下さい。
    • Linux カーネルは常に完全な最適化でコンパイルされ、インライン展開が有効になっているので、以下のことに注意して下さい。
      • コードをステップ実行すると、一部の命令が並べ替えられている可能性があるため、予想どおりに動作しないことがあります。
      • 一部の変数はコンパイラによって最適化されて取り除かれる場合があるので、デバッガで使用できません。
  2. Linux カーネルをターゲットにロードします。
  3. カーネルデバッグ情報をデバッガにロードします。

    デバッグしている Linux カーネルを複数のコアで実行する場合は、デバッガの接続時に SMP 接続の型を選択することをお勧めします。SMP 接続の代わりにシングルコア接続を使用すると、再開する方法がないソフトウェアブレークポイントでその他のコアが停止してしまう可能性があります。
  4. 必要に応じて、カーネルをデバッグします。
関連する概念
6.10.3 Linux カーネルモジュールのデバッグについて
6.7 ベアメタル対称型マルチプロセスシステムのデバッグについて
関連する作業
2.6 Linux カーネルへの接続の設定
関連する参考文書
4.10 アプリケーションのステップ実行
5.1 ターゲット実行環境の検査
5.2 コールスタックの検査
4.11 Unix シグナルの処理
4.12 プロセッサ例外処理
10.39 [Debug Configurations] - [Files]タブ
10.40 [Debug Configurations] - [Debugger]タブ
10.4 [Breakpoints]ビュー
10.6 [Commands]ビュー
10.7 [Debug Control]ビュー
10.8 [Disassembly]ビュー
10.14 [Memory]ビュー
10.16 [Modules]ビュー
10.17 [Registers]ビュー
10.26 [Variables]ビュー
関連情報
ロード可能なカーネルモジュールのデバッグ
非機密扱いPDF file icon PDF 版ARM DUI0446VJ
Copyright © 2010-2015 ARM.All rights reserved.