Androidコンパイル環境の最適化手法

Androidフレームワークソースコードを日々コンパイルされているみなさん、お元気ですか?

今回はコンパイルする時間を短縮する為のTipsを紹介します。
もちろんAndroid以外にも有効です。

Ubuntuカーネルの最適化

デフォルトのカーネルでは最近主流のCPUのCore2Duoには最適化されていません。
その為、カーネルCore2Duo向けに最適化されたコンパイルをしてカーネルを入れ替えてしまいましょう。

VMWareの場合

この方法はVMWare上のUbuntuでも可能ですが、
VMWare上でCore2Duoを有効にするには、手順の一番初めに
vmxファイルに
numvcpus = "2"
の記述を追加して再起動しておいてください。
これだけでも
make -j4
などでのコンパイルが速くなります。

コンパイルに必要なツールのインストール

まずは下記のコマンドで、apt-getを情報を最新の状態にします。

sudo apt-get update


そしてカーネルコンパイルに必要なツールをインストールします。

sudo apt-get install kernel-package libncurses-dev ncurses-dev libqt3-mt-dev
最新カーネルソースコードの取得とコンパイル

最新カーネルソースコードを取得します。

sudo apt-get install linux-source


取得できたら、/usr/srcに移動します。

$ cd /usr/src


そして先ほど取得したカーネルソースコードを解凍しましょう。

$ sudo tar xjvf linux-source-2.6.**.tar.bz2

※**の部分は取得した時点のカーネルのヴァージョンに依存します。


解凍したディレクトリに移動します。

$ cd /user/src/linux-source-2.6.**

※**の部分は取得した時点のカーネルのヴァージョンに依存します。


現在のカーネルのconfigをコピーしておきます。

$ sudo cp /boot/config-2.6.**-**-generic .config

※**の部分は現在のカーネルのヴァージョンに依存します。
 /boot以下にある、最も新しいカーネルのconfigファイルを指定してください。


コピーしたconfigファイルの設定を反映させます。

$ sudo make oldconfig

現在のカーネルと最新のカーネルの間でコンパイルオプションが追加されている場合はいくつか質問されますが、Enterを押してデフォルト値で構いません。


xconfigでGUIカーネルのconfigを変更します。

$ sudo make xconfig

※xを使っていない場合はmenuconfigで。
以下の項目を変更します。
Processor type and features->Processor family->Core 2/newer Xeon
Processor type and features->Preemptible Kernel(Low-Latency Desktop)
Processor type and features->Timer frequency->1000Hz


変更したらCtrl+Sで保存してウインドウを閉じます。


変更したカーネルを識別できるようにEXTRAVERSIONを変更しておきます。

$ sudo vi Makefile
EXTRAVERSION = -**-core2duo

※**は最新カーネルのヴァージョンに依存します。
「-core2duo」は任意の文字列で構いません。カーネルのヴァージョン番号の最後に付加されます。


コンパイルします。

$ sudo make-kpkg --initrd kernel_image


コンパイルが完了したら、カーネルパッケージをインストールします。
#ひとつ上のディレクトリにカーネルdebパッケージが作成されているはずです。

$ cd ..
$ sudo dpkg -i linux-image-2.6.**-**-core2duo_2.6.**-**-core2duo-10.00.Custom_i386.deb

※**の部分は取得した時点のカーネルのヴァージョンに依存します。


成功していれば、OS再起動後に起動するカーネルを選択できるようになっているはずです。
適用されているかどうかは「uname -r」か「uname -a」で確認できます。

$ uname -r
2.6.**.**-core2duo


Android自体にはあまり関係ないですが、少しでもお役に立てば幸いです。