KGDBを使って、Android組み込みボードをリモートデバッグしよう!【後編】〜USBガジェットドライバをデバッグする(1)〜:実践しながら学ぶ Android USBガジェットの仕組み(3)(2/2 ページ)
KGDBを使ってAndroid搭載の組み込みボードをリモートデバッグする。【後編】第1弾の今回は、リモートデバッグする上で欠かせない通信インフラの検討を行い、ホストPC上でカーネルの再構築をする方法を解説。
カーネルを変更する
通信インフラの検討の結果、ターゲットボードのリモートデバッグでは、LANを使うことにしました。これからLANを経由してデバッグするために必要となるKGDB(KGDB over Ethernet)を組み込んだカーネルを作成し、ターゲットボードのカーネルを変更していきます。
そのための手順(図1)は、以下の通りであり、今回は「1.ホストPC上でKGDBを組み込んだカーネルを再構築」について解説します。
- ホストPC上でKGDBを組み込んだカーネルを再構築
- ホストPC上でUSBデバイスドライバを作成
- ターゲットボードにカーネルイメージを転送
- ターゲットボードの既存のカーネルを変更
カーネルを再構築する
ターゲットボードのAndroidでKGDBを利用するために、ホストPC上でKGDBを組み込んだカーネルを作成します。
クロスコンパイラのインストール
組み込みボード用のコンパイルといえば、何といっても「クロスコンパイル」ですね。カーネルのコンパイルはホストPC上で実行しますが、ボードはARM系のプロセッサを使っていますので、異なる環境向けにコンパイルできるクロスコンパイラが必要となります。
次のコマンドを実行し、AndroidのGitリポジトリからクロスコンパイラを取得します(注2)。
sudo apt-get install git libncurses-dev git clone git://android.git.kernel.org/platform/prebuilt.git
ソース取得
次は、本ボードのAndroidカーネルソース(Eclair)を以下より取得します。
Webサイト | http://www.csun.co.jp/hpgen/HPB/entries/22.html |
---|---|
ダウンロードファイル | ut6410-android2.1.zip |
ファイルサイズ | 910Mbyte |
ダウンロードしたファイルを展開すると以下の圧縮ファイルが現れます。
Androidフレームワーク | ut6410-android2.1-v2.0-20101004.tgz |
---|---|
Androidカーネル | ut6410-kernel-v2.0-20101004.tgz |
ブートローダ | ut6410-uboot-v2.0-20101004.tgz |
カーネルソースは「ut6410-kernel-v2.0-20101004.tgz」です。この圧縮ファイルをさらに展開して再構築をはじめます。なお、本稿ではカーネルソースの展開ディレクトリ名を「kernel2」に変更し、「source」ディレクトリ以下に配置しています。また、先ほど用意したクロスコンパイラもsource以下に配置しました。
なお、上記ソースにはLAN経由でリモートデバッグするためのドライバ(KGDB over Ethernet)が含まれておりません。このため、オープンソースの“ネットの海”より対象ドライバソースを拾ってきて、「kgdboe.c」というファイル名で「drivers/net」直下に配置しました。
コンフィグとコンパイル
これで必要なファイルはそろいましたので、カーネルのコンフィギュレーションを行います。作業ディレクトリは主に「sourse/kernel2」で行います。
(1)kgdboe.cをコンパイル対象にする
「drivers/net/Makefile」の230行目付近に以下を追加します。
(2)kgdboe.cをカーネルコンフィギュレーション対象にする
「lib/Kconfig.kgdb」の30行目付近に以下を追加します。
(3)カーネルのクロスコンパイラの指定を環境変数で行えるようにする
「Makefile」の194行目付近のクロスコンパイラ設定をコメントアウトします。
先ほどコメントアウトした変数の代わりに、以下の環境変数を設定します。
export CROSS_COMPILE=../mydroid/prebuilt/linux-x86/toolchain/arm-eabi-4.4.0/bin/arm-eabi-
(4)カーネルのコンフィギュレーションをする
まず、ターゲットボードのコンフィギュレーション用のファイルを「.config」にコピーし、コンフィギュレーション画面を起動します。
cp UT_LCD43C.config .config make menuconfig
すると、次のような設定画面が起動します。
ここで「Kernel hacking」を選択し、[Enter]キーを押します。
「KGDB: kernel debugging with remote gdb」を選択し、[スペース]キーを押すと、チェックマーク(*)が付き“有効”となります。これでOKですが、このまま[Enter]を押して、このメニュー内部を確認してみましょう。
(2)の「Kconfig.kgdb」の修正に合わせて、KGDBの設定項目が拡張されていることが分かります。デフォルトで有効になるように記述していたため、本稿で使用する「KGDB: use kgdb over the ethernet」にチェックが入っています。
<Exit>を選択していき、最初の画面に戻り、Save(保存)をしてカーネルのコンフィギュレーションを終了します。
(5)コンパイルする
「make」コマンドを実行すると、コンパイルが開始されます。コンパイルが終わると、以下のようなメッセージが出力され、カーネルイメージ(zImage)が作られていることが分かります。
カーネルのデバッグで必要となるファイルは以下の2つです。
- arch/arm/boot/zImage
ターゲットボードに展開するLinuxカーネルの圧縮イメージ - vmlinux
カーネルデバッグに使用するLinuxカーネルイメージ
今回はカーネルの再構築までの流れを説明しました。冒頭でお伝えした通り、次回は、カーネルイメージをUSB転送するためにLinux上で動作するUSBデバイスドライバの作成方法について解説する予定です。お楽しみに! (次回に続く)
関連キーワード
組み込みAndroid開発 | 実践しながら学ぶ Android USBガジェットの仕組み | USB | Android | 組み込み | Androidケータイ | アプリケーション開発 | Androidがもたらす組み込み開発の新たな可能性 | 組み込み開発 | 作りながら理解するファイルシステムの仕組み
Copyright © ITmedia, Inc. All Rights Reserved.