連載
» 2010年08月03日 00時00分 公開

作りながら理解するファイルシステムの仕組み(6):AndroidエミュレータでLinuxカーネルをデバッグ!! (2/3)

[森 崇 株式会社 永和システムマネジメント,@IT MONOist]

Androidエミュレータ用Linuxカーネルをコンパイルする

 Linuxカーネルをコンパイルするために、カーネルソースが配置されているディレクトリに移動しましょう。


$cd common 

 次に、以下の要領でクロスコンパイル用の環境変数に設定します。

$ export ARCH=arm
$ export CROSS_COMPILE=../prebuilt/linux-x86/toolchain/arm-eabi-4.4.0/bin/arm-eabi- 

 これでコンパイルの準備が整ったわけですが、カーネルのコンフィグレーションを行う必要があります。これは、カーネル機能の追加/削除を行う作業であり、今回の場合は、Androidエミュレータ用にカーネルをカスタマイズする必要があります。また、それに加えて、Linuxカーネルをデバッグできるように設定する必要もあります。

 まず、Androidエミュレータ用のコンフィグレーションを以下の要領で行います。

$ make goldfish_defconfig 

 次に、Linuxカーネルをデバッグできるようにするために、カーネルのコンフィグレーションの設定画面を以下の要領で開きます。

$ make menuconfig 

カーネルコンフィグレーション 図1 カーネルコンフィグレーション

 図1は、カーネルコンフィグレーション設定の初期画面です。ここから、キーボードの[↓]キーを押下して、「Kernel hacking --->」の項目で[Enter]キーを押します。

debug infoを有効にする 図2 debug infoを有効にする

 すると図2の画面が現れます。[↓]キーを押下して、「Compile the kernel with debug info」を選択し、[スペース]キーを押すと、[ ]内に*が表示されます。後は、[→]キーを押下し、<Exit>を選択して、[Enter]キーを押し、最初の画面に戻ります。最初の画面も同様に<Exit>を選択し、saveして終了します。

 これでカーネルのコンフィグレーションは終了です。なお、この設定は「.config」というファイルに保存されていますので、興味のある方はぜひ参照してみてください。

 それでは、makeコマンドを実行し、コンパイルをはじめましょう。

$ make 

 コンパイルが終わると、以下のようなメッセージが出力され、Linuxカーネルモジュールが作られていることが分かります。

========================================================
        :
  LD      vmlinux
  SYSMAP  System.map
  SYSMAP  .tmp_System.map
  OBJCOPY arch/arm/boot/Image
  Kernel: arch/arm/boot/Image is ready
  AS      arch/arm/boot/compressed/head.o
  GZIP    arch/arm/boot/compressed/piggy.gz
  AS      arch/arm/boot/compressed/piggy.o
  CC      arch/arm/boot/compressed/misc.o
  LD      arch/arm/boot/compressed/vmlinux
  OBJCOPY arch/arm/boot/zImage
  Kernel: arch/arm/boot/zImage is ready
======================================================== 

 これらの中で、Linuxカーネルをデバッグするために必要となるファイルは、以下の2つです。

1. arch/arm/boot/zImage
……Androidエミュレータで使用するLinuxカーネルの圧縮イメージ
2. vmlinux
……LinuxカーネルをデバッグするためのLinuxカーネルイメージ

Androidエミュレータ実行環境を構築する

 次に、Androidエミュレータ実行環境を以下の手順で実行していきます。

  1. Android SDKをダウンロードする
  2. Androidパッケージをインストールする
  3. Android仮想デバイスを作成する

 Androidエミュレータは、Android SDKの中に入っているので、仮想マシン上でFirefoxを開き、Android SDKのサイトから、「android-sdk_r06-linux_86.tgz」をダウンロードしましょう。

関連リンク:
Android SDK | Android Developers

 ダウンロードが完了すると、デスクトップ上にファイルが保存されるので、そのファイルを「${HOME}/mydroid」配下に移動し、以下の要領で展開したら「tools」ディレクトリ配下に移動します。

$ tar xzvf android-sdk_r06-linux_86.tgz
$ cd android-sdk-linux_86/tools/ 

 それでは、早速、Androidパッケージをインストールするために、以下のandroidコマンドを実行します。

$ ./android 

 すると図3のように、仮想デバイスマネージャが起動します。

仮想デバイスマネージャ 図3 仮想デバイスマネージャ

 まず、Androidのパッケージからインストールします。図4の画面左の「Available Packages」を選択すると、画面右に「https://dl-ssl.google.com/android/repository/repository.xml」が現れるので、それを選択します。

Androidパッケージのインストール 図4 Androidパッケージのインストール

 するとAndroidプラットフォームが複数現れるので、「Android 2.1」だけを選択し、[Install Selected]をクリックし、インストールをはじめます。

 インストールが終了したら、図4の画面左の「Virtual Devices」を選択します。すると、画面右上に[New...]というボタンが現れるので、それをクリックして仮想デバイス作成画面を起動します。仮想デバイスの設定情報は、図5のようにして[Create AVD]ボタンをクリックします。

仮想デバイスを作成 図5 仮想デバイスを作成

 これで、Androidエミュレータを実行するための準備はすべて整いました。なお、ここで作成した仮想デバイスやインストールしたパッケージは、「${HOME}/.android」配下に配置されていますので、興味のある方は参照してみてください。

Copyright © ITmedia, Inc. All Rights Reserved.