AndroidエミュレータでLinuxカーネルをデバッグ!!

Androidエミュレータを利用してLinuxカーネルデバッグするという記事があったのでやってみた。

→参考
http://monoist.atmarkit.co.jp/fembedded/articles/filesys/06/filesys_06a.html

→開発パッケージをインストール
$ sudo apt-get install git-core gnupg sun-java5-jdk flex bison gperf libsdl-dev libesd0-dev libwxgtk2.6-dev build-essential zip curl libncurses5-dev zlib1g-dev ddd

カーネルの取得
$ mkdir ${HOME}/mydroid
$ cd ${HOME}/mydroid
$ git clone git://android.git.kernel.org/kernel/common.git
$ cd common
$ git checkout -b android-goldfish-2.6.29 origin/android-goldfish-2.6.29
$ cd ..

→クロスコンパイラの取得
$ cd ${HOME}/mydroid
$ git clone git://android.git.kernel.org/platform/prebuilt.git
$ cd common

環境変数を設定
$ export ARCH=arm
$ export CROSS_COMPILE=../prebuilt/linux-x86/toolchain/arm-eabi-4.4.0/bin/arm-eabi-

→makeの設定
$ make goldfish_defconfig
$ make menuconfig

以下を設定
Kernel hacking --->
 [*]Compile the kernel with debug info

→make開始
$ make

エミュレータ環境の構築
android-sdk_r06-linux_86.tgzをダウンロードし、${HOME}/mydroidへ
$ tar xzvf android-sdk_r06-linux_86.tgz
$ cd android-sdk-linux_86/tools/

→パッケージインストール(以降はVM上のターミナルで実行する)
$ ./android

※「Settings」→「Proxy Settings」でプロキシの設定を行う。
 HTTP Proxy Server :wwwcache0.int.jpd.co.jp
 HTTP Proxy Port :8080
※「Settings」→「Misc」で「Force http://...」にチェックを入れる。
※「Available Packages」で[Refresh]ボタンを実行するとパッケージが表示されるので
 「Android 2.1」だけを選択し、[Install Selected]をクリックし、インストール。

エミュレータを起動
$ android-sdk-linux_86/tools/emulator -kernel common/arch/arm/boot/zImage @androidDev -qemu -s


→デバッガを起動
$ ddd --debugger ../prebuilt/linux-x86/toolchain/arm-eabi-4.4.0/bin/arm-eabi-gdb

デバッガを使いこなせればカーネルのお勉強にもなるので暇なときにやってみる。