Linuxカーネルにtarfsを組み込むための手順を解説。今回はAndroidを題材に開発環境構築、デバッグ方法を紹介する
筆者が入社試験の面接を受けたとき、「アプリケーション開発とカーネル開発どちらをやりたいですか?」と聞かれました。「アプリケーション?」「カーネル? サンダース!?」……返答に困りながら、苦し紛れに「どっちもやりたいです!」と答えたことをいまでも覚えています。
「どうやってコンピュータは動くのだろう?」「CPUは1個しかないのに、Excelを同時にたくさん起動できるのはなぜ?」などなど、分からないことばかりだったあのころ……。後に「カーネル」がその鍵を握っていることを知ったときは、胸が躍りました。
筆者にとってそんな思い入れのあるカーネルですが、今回からLinuxカーネルに、tarfsを組み込むための道筋を解説していきます。ただし、単に教科書的な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 仮想マシン環境 |
今回使用するAndroidの版数は、「android-2.1_r2」とします。
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
Copyright © ITmedia, Inc. All Rights Reserved.