2012/02/24

BeagleBoard-xMでICS(Android4.0)―自前ビルド版―

前のポストではPre-built Imageを使いましたが、ソースから自分でビルドしてICSをBeagleBoard-xMで動かしてみました。

これも基本的には「ICSonBeagleboard_WithSGX」の手順の通りですが、いくつか補足を付けてステップを説明します。
補足はこんな風にイタリックにしています。

私のPC環境ですが

  • OSはUbuntu 10.10 64bit
  • CPUはCore2 Quad Q9650 (3.00GHz)
  • メモリは4GB

といったところです。

作業には以下が必要です。
  • sudoできるアカウント
  • microSDにアクセスできる (USBのアダプタとか)
  • HDDの空き容量25GB程度
  • 作業時間として、ダウンロードから始めて最速でも約2,3時間

ビルドは以下の方針で進めます。
  • x-loaderはビルドしない (Pre-built Imageのを使う)
  • u-bootはビルドしない (Pre-built Imageのを使う)
  • kernel, Android, SGX対応モジュールをビルドする
何かカスタマイズするにしても、通常、x-loaderやu-bootは変更しないことが多いです。
あるとして、ブート手順の早い側ではu-bootの起動スクリプトboot.scrを変更することがあるぐらいです。

やっと手順です。

シェルはbash (つまりデフォルトのまま)を使って、少なくとも作業するターミナルでは環境変数LANGをCにします。
export LANG=C

repoコマンド用にディレクトリを用意します。
mkdir -p ~/bin
PATH=~/bin:$PATH
PATHの設定は~/.bashrcにしておくのがいいでしょう。

次にrepoコマンドを用意します。
curl https://dl-ssl.google.com/dl/googlesource/git-repo/repo > ~/bin/repo
chmod +x ~/bin/repo
既にrepoコマンドを用意してある場合は、改めてダウンロードする必要はありません。
でも時々アップデートされているので、最新のを使うのがいいかもしれません。

これまた時々、ダウンロードに失敗して、エラーのHTML記述が~/bin/repoに記録されることがあります。
正しくスクリプトがダウンロードされたか確認します。
head ~/bin/repo
先頭の行が#!/bin/shとなっていたら大丈夫でしょう。

レポジトリを置くディレクトリを用意します。
mkdir ~/rowboat-android
cd ~/rowboat-android
ここが20GBぐらいになりますので、空き容量の十分な場所に用意してください。

レポジトリを用意します。
repo init -u git://gitorious.org/rowboat/manifest.git -m rowboat-ics.xml
元Wikiはちょっと誤字になってます(repo init -uが余分)。
若干時間かかります。
repo sync
repo syncには1時間以上かかります(インターネット接続環境にもよります)。
エラーになることがありますが、最初からやり直さずに(つまりディレクトリ消したりせずに)、何回か上のコマンド実行すれば大抵大丈夫です。

元WikiではRowboatTools.tar.gzをダウンロードしていますが、今回のビルド方針では不要なのでダウンロードしません。

クロスコンパイラへのパスを準備します。
export PATH=~/rowboat-android/prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin:$PATH

元Wikiではx-loaderのビルドしていますが、ビルド方針の通りスキップします。

同様にu-bootのビルドもスキップします。
u-bootをビルドすると生成されるmkimageが後で必要になりますが、Ubuntuのパッケージのを使えばOKです。
インストールは sudo apt-get install uboot-mkimage とします。

kernel、Android、SGXモジュールをビルドします。
make TARGET_PRODUCT=beagleboard OMAPES=5.x
数十分かかります。マルチコアな環境なら-j 4などと並列実行のオプション付けると高速化できます。

ここから元Wikiとちょっと違います。

microSDカードに書く準備としてrootfs.tar.bz2を作ります。
make fs_tarball
これでout/target/product/beagleboard/rootfa.tar.bz2が生成されます。

別のディレクトリでPre-built Imageをダウンロード、展開します。
wget http://rowboat.googlecode.com/files/beagleboard_xm_sgx.tar.gz
tar xfz beagleboard_xm_sgx.tar.gz
自前ビルドのものに置き換えるのでPre-built Imageのファイルを消します。
cd beagleboard_xm
rm Boot_Images/uImage
rm Filesystem/rootfs.tar.bz2

自前ビルドした結果を配置してmicroSDカードに書き込みます。
cp ~/rowboat-android/kernel/arch/arm/boot/uImage Boot_Images/
cp ~/rowboat-android/out/target/product/beagleboard/rootfa.tar.bz2 Filesystem/
sudo ./mkmmc-android.sh /dev/sdb
環境によってmicroSDが/dev/sdbだったり/dev/sdcだったりします。
間違ってHDDのデバイスを指定してしまうと大変なことになるので要注意です。

あとは完成したmicroSDをBeagleBoard-xMに刺して電源投入して起動を待ちます。

0 件のコメント:

コメントを投稿