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

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

DS-5 では、簡単なキャラクタデバイスドライバの例として、FVP 上でコンパイル、実行、およびデバッグできる modex.c を用意しています。
また Windows ユーザに対しては、 DS-5 が提供する Linux ディストリビューションプロジェクトに相当するビルド済みイメージバイナリが提供されています。
カーネルやモジュールをコンパイルする方法については、次の URL から入手できる readme.html を参照してください:<DS-5 installation folder>/DS-5/examples/docs/kernel_module

モジュールをデバッグするには、その前に以下の条件を満たす必要があります。
  1. カーネルソースコードが展開され、ターゲットとまったく同じカーネルバージョンに対してカーネルがコンパイルされていること。
  2. ターゲットとまったく同じカーネルバージョンに対して、ロード可能なモジュールがコンパイルされていること。
    これらのイメージは、いずれも必ずデバッグ情報とともにコンパイルしてください。デバッガがモジュールをデバッグする際、両方のイメージのランタイム情報が必要です。
DS-5 チートシートで使用可能な例をインポートした後で、以下の手順を実行します。

手順

  1. デバッガをターゲットに接続します。デバイスドライバのサンプルに、事前設定済みの起動ファイルが用意されています。
    1. [Run]メニューから[Debug Configurations...]を選択します。
    2. コンフィギュレーションツリーで、[ DS-5 Debugger]を展開します。
    3. kernel-module-beagle-example エントリを選択します。
    4. [Connection]タブには、[Debug Hardware Address]フィールドを除くほとんどの接続設定が含まれています。デバッガとデバッグハードウェアエージェント間の接続に使用する、IP アドレスまたは名前を入力します。
      図 2-11 Linux カーネルモジュール構成用の一般的な接続
      Linux カーネルモジュール構成用の一般的な接続

    5. [Files]タブには、Linux カーネルとモジュールに関するデバッグ情報をロードするためのデバッガ設定が含まれています。例えば、以下の図に示すように、[Application on host to download]フィールドを無視し、カーネルイメージとモジュールイメージの両方を選択します。
      図 2-12 Linux カーネルモジュール構成用の一般的なファイル選択
      Linux カーネルモジュール構成用の一般的なファイル選択

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

モジュールを挿入および削除すると、デバッガはターゲットを停止し、デバッグ情報と既存のブレークポイントのメモリ位置を自動的に解決します。したがって、ソースコードを再コンパイルする際に、デバッガを停止して再接続する必要はありません。
便利なターミナルシェルコマンド:
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 DUI0478RJ
Copyright © 2010-2014 ARM.All rights reserved.