KGDBを使ってAndroid搭載の組み込みボードをリモートデバッグする。【後編】第3弾の今回は、「ターゲットボードのカーネルを変更し、グラフィカルなデバッガでデバッグする」について解説する。
前回は、Linux上でUSBデバイスドライバを作成する方法を解説しました。
ターゲットボードをリモートデバッグするには、ボード上のカーネルを、「KGDB(Kernel Gnu DeBugger)」を組み込んだカーネルに変更する必要があります。
そのための手順(図1)は、以下の通りであり、今回は「ターゲットボードのカーネルを変更し、グラフィカルなデバッガでデバッグする」について解説します。
ターゲットボードのカーネルを変更するには、ターゲットボードのブートシーケンスを理解しておく必要があります。
本ターゲットボードの電源をONにすると、まずブートローダ(U-Boot)に処理が渡されます。U-Bootは3秒間キー入力待ちをした後、NAND Flash上にあるカーネルイメージ(zImage)をメモリ上にロードします。そして、プログラムカウンタをそのメモリ領域の先頭に移動させることでカーネルに処理が移り、最終的にAndroidが起動します。
つまり、NAND Flashに配置されているカーネルイメージを、変更したいカーネルに書き換えればよいわけです。ターゲットボードのカーネルイメージの配置場所は、以下の通りです(表1)。
先頭アドレス | 0x900000 |
---|---|
サイズ | 0x300000 |
表1 カーネルイメージの配置場所 |
ただし、NAND Flashは直接書き換えることはできません。以下のように、まず対象領域を消去し、その領域に変更したいカーネルイメージをコピーして、ターゲットボードをリセットすることで書き換えます。
$ nand erase 900000 300000
とはいえ、カーネルイメージはホストPC上にあるわけですから、ホストPC上のカーネルイメージをターゲットボードに転送するところから始めなければなりません。これから、その方法について説明していきます。
ホストPC上にあるカーネルイメージを、ターゲットボードに転送するための手順は、以下の3ステップです。
ホストPC上のUSBデバイスドライバは、前回作成した「dnw.zip」を使います。まずは、これを解凍して、USBデバイスドライバをコンパイルしましょう。
「dnw.zip」を解凍すると、以下のファイルが展開されます。
この状態で「make」コマンドを実行すると、必要なモジュールを全てコンパイルしてくれます。
コンパイルが終わると、以下のようになります。
このうち必要なものは、「dnw」と「androidbulk.ko」です。「dnw」は、アプリケーションであり、ユーザーがデータを転送する際に使用します。「androidbulk.ko」は、Linux USBデバイスドライバです。
それでは、「insmod」コマンドを使って、USBデバイスドライバをインストールしてみましょう。インストールできたかどうかは、「lsmod」コマンドで確認します。
うまくインストールできましたね。ちなみに、アンインストールは「rmmod」コマンドで行います。
Copyright © ITmedia, Inc. All Rights Reserved.