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

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

Linuxカーネルにtarfsを組み込むための手順を解説。今回はAndroidを題材に開発環境構築、デバッグ方法を紹介する

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

 筆者が入社試験の面接を受けたとき、「アプリケーション開発とカーネル開発どちらをやりたいですか?」と聞かれました。「アプリケーション?」「カーネル? サンダース!?」……返答に困りながら、苦し紛れに「どっちもやりたいです!」と答えたことをいまでも覚えています。

 「どうやってコンピュータは動くのだろう?」「CPUは1個しかないのに、Excelを同時にたくさん起動できるのはなぜ?」などなど、分からないことばかりだったあのころ……。後に「カーネル」がその鍵を握っていることを知ったときは、胸が躍りました。

 筆者にとってそんな思い入れのあるカーネルですが、今回からLinuxカーネルに、tarfsを組み込むための道筋を解説していきます。ただし、単に教科書的なLinuxカーネルやファイルシステムの概要を説明するだけでは面白くないので、多少横道にそれてみたいと思います。

AndroidでLinuxカーネルを学ぶ

 最近、スマートフォンで脚光を浴びているAndroidには、Linuxカーネルが入っています。今回はこれを題材にして、Linuxカーネルで遊びながら学んでいきましょう!

 まず、Android Linuxカーネル開発の環境構築方法、およびカーネルデバッグ方法について解説します。デバッグ対象としては、Androidエミュレータを使用することにします。なお、今回使用した開発環境は表1、表2のとおりで、Windows上に仮想マシン(Ubuntu 9.04)をインストールし、そのLinux仮想マシンからAndroidエミュレータを動作させます。

 そして、連載第1回「ないと困る!? ファイルシステムのありがたみ」で、若手社員が返答できなかったAndroid端末のファイルシステム(注1)を確認してみましょう。また、カーネルデバッグの内容は、dfコマンドを実行したときにLinuxカーネルの処理を止めて、そのときのデータを見てみます。

OS Windows 7
CPU Core2Duo 2.93GHz
メモリ 3Gbytes
HDD 約500Gbytes
表1 開発マシン環境

仮想マシン VirtualBox 3.2.4
OS Ubuntu 9.04
メモリ 1500Mbytes
仮想HDD 30Gbytes
表2 仮想マシン環境

※注1:正確には、Androidエミュレータなので実際と異なる可能性があります。


Android上でLinuxカーネルをデバッグするまでの流れ

 今回使用するAndroidの版数は、「android-2.1_r2」とします。

 Android上でLinuxカーネルをデバッグするために必要なステップは、以下のとおりです。

  1. Androidエミュレータ用Linuxカーネルコンパイル環境を構築する
  2. Androidエミュレータ用Linuxカーネルをコンパイルする
  3. Androidエミュレータ実行環境を構築する
  4. Linuxカーネルをデバッグする

Androidエミュレータ用Linuxカーネルコンパイル環境の構築手順

 それでは、Androidエミュレータ用Linuxカーネルのコンパイル環境を構築しましょう。ここで必要となる作業は、以下の3つです。

(1)開発用パッケージのインストール

(2)Androidエミュレータ用Linuxカーネルソース(android-goldfish-2.6.29)のダウンロード

(3)Androidエミュレータ用クロスコンパイル環境のダウンロード

 まず、開発用パッケージを以下のコマンドを実行してインストールしましょう。

$ sudo apt-get install git-core gnupg sun-java5-jdk flex bison gperf libsdl-
dev libesd0-devlibwxgtk2.6-dev build-essential zip curl libncurses5-
dev zlib1g-dev ddd 

 次に、Android開発環境用のディレクトリを以下のように作成し、そのディレクトリに移動しましょう。

$ mkdir ${HOME}/mydroid
$ cd ${HOME}/mydroid 

 Androidのソースは、基本的にGitリポジトリで管理されており、サイトを見てみると、リポジトリが多数あることが分かります。これらの中から、必要なものを取ってくるわけですが、Androidエミュレータ用Linuxカーネルソースは、以下の要領でダウンロードできます。

$ 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 

関連リンク:
android.git.kernel.org Git

 Androidエミュレータ用のカーネルモジュールを作成するためには、カーネルソースをコンパイルし、Androidエミュレータ専用の命令コードを作る必要があります。この命令コードは、CPUに依存するものであり、AndroidエミュレータのCPUはARMです。一方、筆者の開発環境はx86ですので、x86マシン環境でARM用の命令コードを生成する必要があります。一般的にこのような場合、特殊なコンパイラ(クロスコンパイラ)を使う必要がありますが、Androidのサイトではそのクロスコンパイラを用意してくれています(ありがたいですね)。

 それでは、クロスコンパイラを以下の要領でダウンロードしましょう。

$ cd ${HOME}/mydroid
$ git clone git://android.git.kernel.org/platform/prebuilt.git 

       1|2|3 次のページへ

Copyright© 2017 ITmedia, Inc. All Rights Reserved.