2.9 ローダブルカーネルモジュールのデバッグ

DS-5 を使用してローダブルカーネルモジュールを開発、デバッグすることができます。ローダブルモジュールは、開発中に実行しているカーネルで動的に挿入および削除でき、カーネルを頻繁に再コンパイルする必要はありません。

このチュートリアルでは、簡単なキャラクタデバイスドライバ modex.c を使用します。これは、 DS-5 で使用できる ARMv7 Linux アプリケーションの例の一部です。
modex.c を使用すると、ターゲットに対してコンパイル、実行、およびデバッグできます。<DS-5 installation folder>/DS-5/examples/docs/kernel_modulereadme.html には、ターゲットに対するカスタマイズについての情報が含まれています。

独自のモジュールを使用する場合は、デバッグする前に、以下の条件を満たす必要があります。
  • カーネルソースコードが展開され、ターゲットとまったく同じカーネルバージョンに対してカーネルがコンパイルされていること。
  • ターゲットとまったく同じカーネルバージョンに対して、ロード可能なモジュールがコンパイルされていること。
  • これらのイメージをデバッグ情報とともにコンパイルしていること。デバッガがモジュールをデバッグする際、両方のイメージのランタイム情報が必要です。

手順

  1. デバッグコンフィギュレーションを新規作成します。
    1. DS-5 のメインメニューから、[実行] > [デバッグコンフィギュレーション] を選択します。
    2. [デバッグコンフィギュレーション]ダイアログボックスで、新しい起動コンフィギュレーションを作成して名前を付けます。例えば、my_board のように入力します。
    3. [接続]タブで、ターゲットとプラットフォームを選択し、ターゲット接続を設定します。
      図 2-11 Linux カーネル/デバイスドライバデバッグ用の一般的な接続設定
      Linux カーネル/デバイスドライバデバッグ用の一般的な接続設定

    4. [ファイル]タブで、Linux カーネルとモジュールに関するデバッグ情報をロードするためのデバッガ設定をセットアップします。
      図 2-12 Linux カーネル/デバイスドライバデバッグ用の一般的なファイル設定
      Linux カーネル/デバイスドライバデバッグ用の一般的なファイル設定

    5. [デバッガ]タブで、[実行制御]パネルの[接続のみ]を選択します。
    6. [デバッグ]をクリックしてターゲットにデバッガを接続します。
  2. ターミナルシェルを設定し、ターゲットに接続します。これには DS-5 に付属のリモートシステムエクスプローラ(RSE)を使用できます。
  3. RSE を使用し、コンパイル済みのモジュールをターゲットにコピーします。
    1. ホストワークステーションで、.../linux_system/kernel_module/stripped/modex.ko ファイルに移動します。
    2. モジュールをターゲットの書き込み可能なディレクトリにドラッグアンドドロップします。
  4. ターミナルシェルを使用して、modex.ko カーネルモジュールを挿入します。
    1. カーネルモジュールの場所に移動します。
    2. 以下のコマンドを実行します。insmod modex.ko [モジュール]ビューで、ロード済みのモジュールの詳細が更新されて表示されます。
  5. 必要に応じてブレークポイントを設定、実行、ステップ実行をして、モジュールをデバッグします。
  6. モジュールのソースコードを変更するには
    1. ターミナルシェルで必要に応じてコマンドを使用してモジュールを削除します。例えば、rmmod modex
    2. モジュールを再コンパイルします。
    3. 3 から 5 の手順を必要に応じて繰り返します。

モジュールを挿入および削除すると、デバッガはターゲットを停止し、デバッグ情報と既存のブレークポイントのメモリ位置を自動的に解決します。したがって、ソースコードを再コンパイルする際に、デバッガを停止して再接続する必要はありません。
便利なターミナルシェルコマンド:
lsmod
ロード済みのすべてのモジュールに関する情報が表示されます。
insmod
ローダブルモジュール を挿入します。
rmmod
モジュールを削除します。
便利な DS-5 デバッガ コマンド
info os-modules
接続後にロードされた OS モジュールのリストを表示します。
info os-log
OS ログバッファの内容を表示します。
info os-version
OS のバージョンを表示します。
info processes
各プロセスの ID、現在の状態、および関連するスタックフレーム情報を示す一覧を表示します。
set os-log-capture
オペレーティングシステム(OS)のログメッセージのキャプチャとコンソールへの出力を制御します。
接続後にロードされた OS モジュールは、[Modules]ビューに表示されます。
関連する参考文書
3.6  DS-5™ 付属のサンプル
関連情報
Linux カーネルへの接続の設定
実行制御
ターゲットの検査
Linux カーネルのデバッグについて
Linux カーネルモジュールのデバッグについて
ARM Linux の問題と解決法
ターゲット接続の問題と解決法
オペレーティングシステム(OS) DS-5 デバッガコマンド
シリアル接続および SSH 接続用のターゲット管理端末
非機密扱いPDF file icon PDF 版ARM DUI0478SJ
Copyright © 2010-2014 ARM.All rights reserved.