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