EMMA Mobile 1 HDK 上でAndroidを動かす

EMMA Mobileとは

EMMA Mobileとは旧NECエレクトロニクス社から発売された、携帯機器向けマルチメディアプロセッサです。
EMMA Mobileは以下の種類があります。

  • 高機能化と低消費電力化を追求した1シリーズ
    • 1-D:MobileDDR SDRAM(512Mbit)をパッケージに内蔵しセットの小型化、外部RAMとの高速インタフェースの設計が不要でユーザの基板設計を容易とする。
    • 1-S:Mobile DDR SDRAMとの外部I/Fを持ち、大容量メモリを利用することで大規模なソフトウェアを実行できる。
  • HDコンテンツ再生とグラフィックス処理機能の高機能化と低消費電力化を追求したEVシリーズ
    • EV1:HDコンテンツ再生機能を搭載する基本機能版。
    • EV2:マルチコアCPUと3Dグラフィックスを搭載する高性能版。


今回はこのEMMA Mobile 1のHDK上でAndroidを動かす方法について説明します。
ルネサスエレクトロニクスHPにスタートアップガイドがありますので、そちらを見て頂ければ確実なのですが全て英語で書かれています。

実行環境:

Ubuntu(64ビット上の8.04)
VMware上のUbuntuでも可

下準備:

作業用ディレクトリとしてという名前のディレクトリを作成します。(任意の名前で結構です)
EMMA Mobile 1 HDK付属のCDやルネサスエレクトロニクスのHPにあるEMMA Mobile 1用SDKファイルをの下に作ったarchivesディレクトリにコピーして下さい。
/home/ユーザ//archives

1.ビルドの準備

Androidのビルド手順

ビルドに必要なパッケージをインストールして下さい。

# sudo apt-get install sun-java5-jdk
# sudo apt-get install flex bison gperf libsdl-dev libesd0-dev libwxgtk2.6-dev build-essential zip curl libncurses5-dev zlib1g-dev
# sudo ln -s /usr/lib32/libX11.so.6 /usr/lib32/libX11.so
# sudo apt-get install git-core gnupg

ソースファイル取得のためにrepoというgitのマネージャツールをダウンロードし、実行権限を与えます。

# mkdir bin
# curl http://android.git.kernel.org/repo >~/bin/repo
# chmod a+x ~/bin/repo

ここで~/binにパスを通すため一度ログアウトします。


ソースファイル取得用のディレクトリ「mydroid」を作成し、mydroidに移動してrepo環境を初期化します。

 # mkdir mydroid
 # cd mydroid
 # repo init -u git://android.git.kernel.org/platform/manifest.git

名前やメールアドレスを聞かれますが、入力してもしなくても構いません。次に色分け表示するか聞かれるのでy/nお好きな方を選んで下さい。
初期化が終了すると次はソースファイルを取得し、makeコマンドを入力します。

# repo sync
# make
Android Open Sourceの取得

ディレクトリに移動し、mydroid-1.6r1ディレクトリを作りそこへ移動します。

# cd <SDK_WORK>
# mkdir mydroid-1.6r1
# cd mydroid-1.6r1

Androidを取得します。

# repo init -u git://android.git.kernel.org/platform/manifest.git -b android-1.6_r1
# repo sync

ここまでの作業を終わらせた段階でのディレクトリの中は以下のようになります。

alsa-libの取得

# git clone git://android.git.kernel.org/platform/external/alsa-lib.git
# cd alsa-lib
# git checkout -b origin/donut 7d7fc0e490064bd5

alsa_soundの取得

# git clone git://android.git.kernel.org/platform/hardware/alsa_sound.git
# cd alsa_sound
# git checkout -b origin/donut 64ff6838637d2285

上記で得たファイルをそれぞれ以下の場所へ移動して下さい。

  • alsa-lib :/mydroid-1.6r1/external

  • alsa_sound :/mydroid-1.6r1/hardware


*ALSAのファイルが無いとAndroid file systemをビルドする時エラーが発生します。

2.ビルド手順

ブートローダー、ファイルシステムカーネルのビルドの方法を説明します。

ブートローダーのビルド手順

(1)ビルドのために必要な環境をセット
カレント・ディレクトリ構成を前もって採用するために「set.sh」を修正して下さい。

# cp <SDK_WORK>/archives/set.sh .
# . ./set.sh


(2)SDKの中にある“EM1_android_bootloader.tar.gz”を展開

# cd <SDK_WORK> 
# tar zxf archives/EM1_android_bootloader.tar.gz

“u-boot”ディレクトリの下にファイルが展開されます。


(3)“u-boot”ディレクトリに移動

# cd u-boot


(4)eMMCのためのbootloaderの構築

# make clobber
# make em1_emmc_config_dkit
# make

U-Bootの構築が完了すると、”u-boot”ディレクトリの中に”u-boot-emmc.bin”が出来ます。

Android File Systemのビルド手順

(1)Android File SystemをEMMA Mobile 1用に変更
SDKの中にある“change-1.6r1_YYMMDD.tar.gz”を展開します。(YYMMDDは日付情報)

# cd <SDK_WORK>
# tar zxf archives/change-1.6r1_YYMMDD.tar.gz

“change-YYMMDD”ディレクトリの下にファイルが展開されます。
“change-YYMMDD”ディレクトリの中身を/mydroid-1.6r1にコピー・上書きします。

# tar cv -C ./change-YYMMDD . | tar xv -C ./mydroid-1.6r1


(2)EMMA Mobile 1 SDKのOMFライブラリを適用
“EM1_SDK_Android_OMF_Vxx_xx_xx_xx.tar.gz”を展開します。

# tar zxf archives/EM1_SDK_Android_OMF_Vxx_xx_xx_xx.tar.gz

“mydroid_omf”ディレクトリの下に展開されます。
“mydroid_omf”の中身を/mydroid-1.6r1にコピー・上書きします。

# tar cv -C ./mydroid_omf . | tar xv -C ./mydroid-1.6r1


(3)ビルドを実行
”mydroid-1.6r1”ディレクトリに移動しAndroid File Systemを構築します。

# cd mydroid-1.6r1 
# make

構築されると、以下の場所にFile Systemが作られます。
Mydroid-1.6r1/out/target/product/em1/


(4) File Systemのファイルを圧縮

# cd out/target/product/em1/ 
# tar zcf ~/tmp-fs.tar.gz system data root

圧縮ファイルの転送先として任意のディレクトを指定して下さい。上記の例ではユーザーホームディレクトリを指定しています。

Androidカーネルの構築方法

(1)SDKの中の「mkimage」に実行属性を加える

# cp <SDK_WORK>/archives/mkimage <SDK_WORK>
# chmod +x <SDK_WORK>/mkimage
# export PATH=$PATH:<SDK_WORK>


(2)カーネルソースコードの展開

# cd <SDK_WORK> 
# tar zxf archives/kernel_2.6.29-tagnname.tar.gz

ファイルは”kernel”ディレクトリの下に展開されます。
“kernel”ディレクトリの下のファイルを/mydroid-1.6r1にコピー・上書きします。

# tar cv ./kernel | tar xv -C ./mydroid-1.6r1


(3)カーネルをEMMA Mobile 1用に変更
SDKの中の”change-kernel-em1-YYMMDD.tar.gz”を展開します。(YYMMDDは日付データ)

# tar zxf archives/change-kernel-em1-YYMMDD.tar.gz

“change_linux_em1”の下にファイルは展開されます。
“change_linux_em1”ディレクトリの下にあるファイルを”mydroid-1.6r1/kernel”にコピー・上書きします。

# tar cv -C ./change_linux_em1 . | tar xv -C ./mydroid-1.6r1/kernel


(4)ビルドのために必要な環境をセット
カレント・ディレクトリ構成を前もって採用するために「set.sh」を修正して下さい。

# cp <SDK_WORK>/archives/set.sh .
# . ./set.sh


(5)カーネルコンフィギュレーションをコピー
カーネルソースディレクトリの下にある”dot.config_dkit”ファイルを”.config”にコピーします。

# cd <SDK_WORK>/mydroid-1.6r1/kernel
# cp dot.config-dkit .config


(6)ビルドを実行
“mydroid-1.6r1/kernel”に移動しカーネルを構築します。

# cd <SDK_WORK>/mydroid-1.6r1/kernel 
# make

成功すると以下の場所にカーネルイメージ(uImage)が作られます。(*)
mydroid-1.6r1/kernel/arch/arm/boot/uImage
また、モジュールファイルは次の場所に作られます。
mydroid-1.6r1/kernel/arch/arm/mach-mp200/inter_dsp.ko
mydroid-1.6r1/kernel/drivers/avc/mp200_avc.ko


(*) もしuImageファイルが作成されなければ、以下を実行してもう一度(6)をして下さい。

# export PATH=$PATH:/home/ユーザ/<SDK_WORK>/
Android File Systemの作成

(1)ファイルシステム「tmp-fs.tar.gz」を抽出して、下記のように構成を変更して下さい。

# mkdir <SDK_WORK>/android-fs
# cd <SDK_WORK>/android-fs
# tar zxf ~/tmp-fs.tar.gz
# mv data root
# mv system root
# mv root/* ./
# rmdir root


(2)モジュールファイルを追加します
カーネルカーネルなどの変更により再度構築されている場合は、ファイル以下にコピーしてください。また、モジュールを加える場合は、ファイルをコピーして下さい。

# cp ~/<SDK_WORK>/mydroid-1.6r1/kernel/arch/arm/mach-mp200/inter_dsp.ko lib/modules/
# cp ~/<SDK_WORK>/mydroid-1.6r1/kernel/drivers/avc/mp200_avc.ko lib/modules/


(3)属性変更

# chmod +r system/usr/keychars/*
# sudo chown -R 1000:1000 ./


(4)圧縮

# sudo tar zcf ../android-fs.tar.gz ./

3.実行方法

EMMA Mobile 1 HDKの中のeMMC-NANDへAndroidブートイメージユニット(ブートローダカーネルAndroid File System)を書き込む方法、そしてAndroidを起動する方法を説明します。


ホストPCにコンソール画面を表示するためにHDKの”CON”コネクタにUSBケーブルを挿入し、ホストPCと接続して下さい。
ホストPCではターミナルソフトを使ってコンソール画面を見ます。TeraTerm等のソフトをインストールし、以下のように設定して下さい。

  • ボーレート:115200
  • Data:8bit
  • Parity:none
  • Stop Bit:1Bit
  • Flow Control:none


(1)eMMCを書き直すためのSDカードを作成
a)microSDカード(2Gバイト程度の容量)をFAT16でフォーマットします。
b)microSDカードへ「emmctools」ディレクトリーの下のファイルを格納します。(emmctoolsは付属CD等の中にあります)


(2)Androidブートイメージの格納
a)(1)によって作られた「emmc」に次のファイルを格納します。

(/home/ユーザ//u-boot/u-boot-emmc.bin)

  • uImage 以下の場所に作られたカーネルイメージ

(/home/ユーザ//mydroid-1.6r1/kernel/arch/arm/boot/uImage)

(/home/ユーザ/)
SDカードの中は以下のような構成になります。

 SDカード:
  |
  |cramfs
  |install.sh
  |param.bin
  |sdboot.bin
  |uboot-sd.bin
  |uImage
  |
  ∟emmc
    uImage
    u-boot-emmc.bin
    android-fs.tar.gz


(3)書き直し
a)SDブートにセットするために、EMMA Mobile 1 HDKのディップスイッチ・DSW1(bootmode)をセットします。

"DSW1-1" : ON
"DSW1-2" : ON

"DSW1-3": OFF
"DSW1-4" : ON

b)HDKのスロットルにmicroSDカードを挿入し、HDKの電源を入れ、ホストPCにコンソール画面が表示されるようにします。
c)以下のようなメッセージが表示されればeMMCブート環境の構築が成功したことを意味します。

---------------------
- install complete! –
---------------------
Welcome to Wind River Linux
Please press Enter to activate this console.

d)HDKの電源を切り、microSDカードを取り出します。


(4)eMMCブートでAndroidをスタート
a)eMMCブートするために、EMMA Mobile 1 HDKのディップスイッチ・DSW1(bootmode)をセットします。

"DSW1-1" : ON
"DSW1-2" : ON

"DSW1-3" : ON
"DSW1-4" : OFF

b)HDKの電源を入れ、ホストPCにコンソール画面が表示されるようにします。
c)電源を入れて3秒以内にコンソール画面で何らかのキーを入力し、コンソールディスプレイからの入力を可能にして下さい。以下のコマンドを入力した後、HDKを再起動しSDKを再起動して下さい。
もし起動後3秒以内に何らかのキーを入力出来なければ、Linuxが起動しカーネルパニックを起こします。このような場合、HDKの”reset”スイッチを押しSDKを再起動して下さい。再起動後、再び3秒以内に何らかのキーを入力して下さい。

EM1# setenv ext3cmd setenv bootargs root=/dev/mmcblk0p3 noinitrd init=/init console=ttyS0,115200n8n SELINUX_INIT=no mem=32M@0x30000000 mem=32M@0x34000000 mem=32M@0x36000000 rw video=qfb: ip=none rootfstype=ext3 rootwait\;bootm 30007fc0 
EM1# saveenv

このセッティングはAndroid File Systemをスタートさせるためです。このセッティングを一度行っていれば、このセッティングは毎回必要ではありません。初期設定に戻したい場合は、下記コマンドをタイプしてください。

EM1# setenv ext3cmd setenv bootargs root=/dev/mmcblk0p3 noinitrd init=/linuxrc console=ttyS0,115200n8n SELINUX_INIT=no mem=32M@0x30000000 mem=32M@0x34000000 mem=32M@0x36000000 rw video=qfb: ip=none rootfstype=ext3 rootwait\;bootm 30007fc0 
EM1# saveenv

d)HDKの再起動
数秒後Androidが起動します。


以上でEMMA Mobile 1 HDK上でのAndroid構築は終了です。主にmake時にエラーが発生して困ったのですが、原因はPATHがきちんと通っていなかったせいなので、その点に注意すれば難しくないと思います。

補足:

EMMA Mobile 1 HDK上のキーとAndroidのキーは以下と一致します。

SW2:Volume Down
SW3:Up
SW4:Volume Up
SW6:right
SW7:select
SW8:left
SW9:Screen Off
SW10:down
SW12:Back
SW13:menu

by:おおき