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