ロード可能なカーネルモジュールのデバッグ

DS-5 を使用してロード可能なカーネルモジュールを開発し、デバッグすることができます。ロード可能なモジュールは、頻繁にカーネルをコンパルすることなく、開発時に実行中のカーネルとの間で動的に挿入および削除できるモジュールです。

DS-5 では、簡単なキャラクタデバイスドライバの例として、ターゲット上でコンパイル、実行、およびデバッグできる modex.c を用意しています。また Windows ユーザに対しては、DS-5 が提供する Linux ディストリビューションプロジェクトに相当するビルド済みイメージバイナリが提供されています。または、カーネルやモジュールのコンパイルの詳細については、kernel_module サンプルに付属の readme.html を参照してください。

Show/hide前提条件

モジュールをデバッグするには、その前に以下の条件を満たす必要があります。

  • カーネルソースコードが展開され、ターゲットとまったく同じカーネルバージョンに対してカーネルがコンパイルされていること。

  • ターゲットとまったく同じカーネルバージョンに対して、ロード可能なモジュールがコンパイルされていること。

Note

これらのイメージは、いずれも必ずデバッグ情報とともにコンパイルしてください。デバッガがモジュールをデバッグする際、両方のイメージのンタイム情報が必要です。

Show/hide手順

ロード可能なモジュール modex.c をデバッグするには

  1. デバッガをターゲットに接続します。デバイスドライバのサンプルに、事前設定済みの起動ファイルが用意されています。

    1. [実行]メニューから[デバッグコンフィギュレーション...]を選択します。

    2. コンフィギュレーションツリーで、[DS-5 Debugger]を展開します。

    3. module-beagle-example エントリを選択します。

    4. [Connection]タブには、[Debug Hardware Address]フィールドを除くほとんどの接続設定が含まれています。デバッガとデバッグハードウェアエージェント間の接続に使用する、IP アドレスまたは名前を入力します。

      Figure 11. Linux カーネルモジュール構成用の一般的な接続

      Linux カーネルモジュール構成用の一般的な接続

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

      Figure 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. 手順 345 を必要に応じて繰り返します。

Note

モジュールを挿入および削除すると、デバッガはターゲットを停止し、デバッグ情報と既存のブレークポイントのメモリ位置を自動的に解決します。したがって、ソースコードを再コンパイルする際に、デバッガを停止して再接続する必要はありません。

便利なターミナルシェルコマンド:

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]ビューに表示されます。

Show/hide関連項目

Copyright © 2010, 2011 ARM. All rights reserved.ARM DUI 0478FJ
Non-ConfidentialID111611