Open Embedded Software Foundation 今村 謙之
日本Androidの会 出村 成和

BeagleBoardでビルドする

 では、BeagleBoard上での作業に移りましょう。今回は、一般的なBeagleBoardでAndroidを動かすための基本作業までを行います。実際の改造などは、次回以降に解説していきます。基本的な手順は、次のようになります。

(1)リポジトリからソースコードを取得
(2)カーネルのビルド(コンパイル)
(3)モジュールのビルド
(4)Android(ユーザーランド)のビルド
(5)カーネルとAndroidのセットアップ
(6)BeagleBoardのセットアップ

 まずは、GitHubリポジトリから、OESFのEmbedded Masterのソースコードを取得します*2。ローカルマシンのダウンロード先は、「/home/oesf/em1」として解説を進めます。

 Gitリポジトリからソースコードを取得するために「clone」コマンドを利用します*3

$ git clone git://github.com/OESF/
Embedded-Master-ARM -o EmbeddedMaster-1.0.0 
このマークで改行

 ダウンロードが終わったら、ビルドしたいところですが、その前に環境変数を一つ設定しておきます。これは、長いディレクトリ名を入力する手間を省くためのものです。

$ export ANDROID=/home/oesf/em1/Embedded-Master-ARM 

 さらに、BeagleBoard向けカーネルは、ブートローダーに「U-Boot」を利用するため、その「mkimage」をインストールします。mkimageは、通常のLinuxカーネルのビルドで作られる「zImage」や「bzImage」などをU-Boot用のフォーマットに変換するためのツールです。

$ sudo apt-get install uboot-mkimage 

 では、BeagleBoard向けカーネルのビルドを図3のように行います。

図3●BeagleBoard向けカーネルのビルド
図3●BeagleBoard向けカーネルのビルド
[画像のクリックで拡大表示]

 ここでやっと、苦労して構築したクロスコンパイル環境が利用されています。具体的には、「ARCH」パラメータでクロスコンパイル先のCPUアーキテクチャを指定して、「CROSS_COMPILE」パラメータでクロスコンパイル関連ツールを指定しています。

 次に、必要なモジュールを、あるべき場所にコピーします。

$ cp drivers/net/wireless/rt2x00/*.ko $ANDROID/
vendor/ti/omap3beagle 

 通常のLinuxカーネルのビルドにおいて「make modules_install」に相当します。モジュールをインストールするものです。

 続いて、Android一式のビルドとなります。これは、Linuxでいえばユーザーランド部のビルドです。Linuxであればディストリビューションという形でビルド済みのものが提供されていますが、Androidでの開発の場合には、自分で準備する必要があります。

$ cd $ANDROID 
$ source ./build/envsetup.sh 
$ choosecombo 1 1 omap3beagle 3 
$ make 

 これは、先ほど「ANDROID」変数で設定したディレクトリに入り、ファイルをスクリプトとして読み込む「source」コマンドで、Androidのビルドに必要なシェルスクリプト「envsetup.sh」を利用可能にしています。次いで、envsetup.shの中にある「choosecombo」コマンドで、コンパイルに必要な環境変数を設定します。この環境変数は自分で選択し設定できます。ターゲットボードのCPUアーキテクチャやクロスコンパイル環境のホストマシンのOSなど各種あります。これらを使って「make」でビルドを実行します。

 これだけで、ビルドは終了となります。実際には、Androidならではのビルド手法により、ビルドされているのですが、それは次回に解説します。