KGDBを使って、Android組み込みボードをリモートデバッグしよう!【後編】〜USBガジェットドライバをデバッグする(1)〜実践しながら学ぶ Android USBガジェットの仕組み(3)(2/2 ページ)

» 2011年12月12日 12時05分 公開
[中垣内勇祐、森崇、中谷洋一(永和システムマネジメント),@IT MONOist]
前のページへ 1|2       

カーネルを変更する

 通信インフラの検討の結果、ターゲットボードのリモートデバッグでは、LANを使うことにしました。これからLANを経由してデバッグするために必要となるKGDB(KGDB over Ethernet)を組み込んだカーネルを作成し、ターゲットボードのカーネルを変更していきます。

 そのための手順(図1)は、以下の通りであり、今回は「1.ホストPC上でKGDBを組み込んだカーネルを再構築」について解説します。

  1. ホストPC上でKGDBを組み込んだカーネルを再構築
  2. ホストPC上でUSBデバイスドライバを作成
  3. ターゲットボードにカーネルイメージを転送
  4. ターゲットボードの既存のカーネルを変更

カーネルを変更する カーネルを変更する

カーネルを再構築する

 ターゲットボードの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

※注2:「android.git.kernel.org」のGitリポジトリがつながりづらい場合、ホストを「codeaurora.org」に変更して試してみてください。ただし、非公式ミラーであるため自己責任でお願いします。


ソース取得
 次は、本ボードの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以下に配置しました。

source以下に配置

 なお、上記ソースにはLAN経由でリモートデバッグするためのドライバ(KGDB over Ethernet)が含まれておりません。このため、オープンソースの“ネットの海”より対象ドライバソースを拾ってきて、「kgdboe.c」というファイル名で「drivers/net」直下に配置しました。

コンフィグとコンパイル
 これで必要なファイルはそろいましたので、カーネルのコンフィギュレーションを行います。作業ディレクトリは主に「sourse/kernel2」で行います。

(1)kgdboe.cをコンパイル対象にする
 「drivers/net/Makefile」の230行目付近に以下を追加します。

kgdboe.cをコンパイル対象にする

(2)kgdboe.cをカーネルコンフィギュレーション対象にする
 「lib/Kconfig.kgdb」の30行目付近に以下を追加します。

kgdboe.cをカーネルコンフィギュレーション対象にする

(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]キーを押します。

「Kernel hacking」を選択

 「KGDB: kernel debugging with remote gdb」を選択し、[スペース]キーを押すと、チェックマーク(*)が付き“有効”となります。これでOKですが、このまま[Enter]を押して、このメニュー内部を確認してみましょう。

「kernel debugging with remote gdb」を選択

 (2)の「Kconfig.kgdb」の修正に合わせて、KGDBの設定項目が拡張されていることが分かります。デフォルトで有効になるように記述していたため、本稿で使用する「KGDB: use kgdb over the ethernet」にチェックが入っています。

 <Exit>を選択していき、最初の画面に戻り、Save(保存)をしてカーネルのコンフィギュレーションを終了します。

(5)コンパイルする
 「make」コマンドを実行すると、コンパイルが開始されます。コンパイルが終わると、以下のようなメッセージが出力され、カーネルイメージ(zImage)が作られていることが分かります。

メッセージが出力

 カーネルのデバッグで必要となるファイルは以下の2つです。

  1. arch/arm/boot/zImage 
    ターゲットボードに展開するLinuxカーネルの圧縮イメージ
  2. vmlinux 
    カーネルデバッグに使用するLinuxカーネルイメージ

 今回はカーネルの再構築までの流れを説明しました。冒頭でお伝えした通り、次回は、カーネルイメージをUSB転送するためにLinux上で動作するUSBデバイスドライバの作成方法について解説する予定です。お楽しみに! (次回に続く)


Android コーナー

Androidコーナー
「Android(アンドロイド)」の組み込み機器への適用からアプリ開発、レポート、ニュースなどさまざまな技術情報・最新動向をお届けする!!

>>コーナーTOPはこちらから


前のページへ 1|2       

Copyright © ITmedia, Inc. All Rights Reserved.