Armadillo-500でGoogle Androidを動かす
エミュレータではなく実機でGoogle Androidを動かすのがロマンですが、組み込み機器初心者の私にはどうにも敷居が高いです。
なので、id:bs-androidさんやid:androidzaurusさんのような先達の偉業を最大限に利用して、ラクに動かしてみることにします。
Armadillo-500を買う
母艦PCを用意する
普通のWindows PCを用意します。私はDELL VOSTRO 1500を使っています。レガシーポートのない機種なので、PlanexのURS-03 USB-シリアル変換ケーブルをあわせて使います。
それにしても、母艦って日本語的な使い方なんですかねえ。外国人に「mothership PC」といっても全く通じなかったかぐわしい思い出があります(普通にhost PCって言えよ>自分)
まずは通電するかどうかを確認しましょう。母艦PCとArmadillo-500をシリアルケーブルで接続し、仮想ターミナルで接続します。
仮想ターミナルソフトとして私はTeraTermを使っています。
シリアル通信設定でボー・レート115200、データ8bit、パリティNone、ストップ1bit、フロー制御noneであることを確認して接続します。下記のログインプロンプトが確認できればOKです。
armadillo500 login:
さて、起動時にブートローダにパラメータを渡すためには、JP1ジャンパにジャンパピンを刺して、Hermit-Atブートローダのプロンプトが出るようにしておく必要があります。
ジャンパピンをさしてリセットし、下記のコマンド入力プロンプトが出ればOKです。
armadillo500 login:Hermit-At v1.1.17 (Armadillo-500) compiled at 15:21:17, Apr 9 2008 hermit>
bと入力してやると、既定のNAND領域からカーネルとルートファイルシステムを読み込みブートし、先ほどと同様のログインプロンプトが出るはずです。
開発環境を準備する
アットマークテクノの準備する開発環境ATDEは、VMware上の仮想マシンとして準備されています。無料のVMware Playerで動作しますので、これらのソフトウェアをインストールします。
ダウンロード:WMware Player
ダウンロード:開発環境→ATDE(vmwareイメージ)
vmwareイメージはzipファイル形式になっているので、展開ツールで展開したのち、フォルダ内のatde2.vmxを開きます。
カーネルのカスタマイズ
ここから先は、VMware Player内のGnome Terminal画面での作業となります。Atmark-distと呼ばれるソースコード群およびカーネルlinux-2.6.18-at3を取得します。
atmark%atde:~$ wget http://armadillo.atmark-techno.com/files/downloads/ armadillo-500/source/dist/atmark-dist-20071214.tar.gz atmark%atde:~$ wget http://armadillo.atmark-techno.com/files/downloads/ armadillo-500/source/kernel/linux-2.6.18-at3.tar.gz atmark@atde:~$ tar xf atmark-dist-20071214.tar.gz atmark@atde:~$ tar xf linux-2.6.18-at3.tar.gz atmark@atde:~$ mv linux-2.6.18-at3 atmark-dist-20071214 atmark@atde:~$ cd atmark-dist-20071214 atmark@atde:~/atmark-dist-20071214$ ln -s linux-2.6.18-at3 linux-2.6.x
Android情報-ブリリアントサービスさんの2008年3月17日の日記からパッチファイルを取得して適用します。
atmark@atde:~/atmark-dist-20071214$ wget http://brilliant.android.googlepages.com/ android4-linux-2.6.18at3-2.tar.bz2 atmark@atde:~/atmark-dist-20071214$ tar xf android4-linux-2.6.18at3-2.tar.bz2 atmark@atde:~/atmark-dist-20071214$ patch -p0 < android4-linux-2.6.18at3.patch
これでソースコードの準備は完了です。
次はカーネルの内容を設定します。
atmark@atde:~/atmark-dist-20071214$ make config
Vendorの項目でAtmarkTechnoと入力
AtmarkTechno Productsの項目でArmadillo-500と入力
Kernel Versionの項目でlinux-2.6.xと入力
Cross-devの項目でdefaultと入力
Libc Versionの項目でNoneと入力
Default all settingsの項目でyと入力
Customize Kernel Settingsの項目でnと入力
Customize Vendor/User Settingsの項目でnと入力
Update Default Vendor Settingsの項目でnと入力
OpenBinder IPC Driver (BINDER)でyと入力
Low Memory Killer (LOW_MEMORY_KILLER)でyと入力
最終調整を行います。変更箇所は少しなので、make menuconfigを利用します。
atmark@atde:~/atmark-dist-20071214$ make menuconfig
Kernel/Library/Defaults Selection ---> SPACE
[] Customize Kernel Settings SPACEでチェックを付けてESCで抜ける
ESCで抜ける
Do you wish to save your new kernel configuration?
Kernel Features ---> [*] Use the ARM EABI to compile the kernel
Device Drivers ---> Misc Devices <*> Low Memory Killer
Device Drivers ---> Character Devices <*> OpenBinder IPC Driver
に*印がついていることを確認してESC連打で抜ける
Do you wish to save your new kernel configuration?
atmark@atde:~/atmark-dist-20071214$ make dep all
ルートファイルシステムの取得
Android情報-ブリリアントサービスさんの2008年3月17日の日記からAndroidユーザランドイメージ(buildroot構築環境入り)を取得して展開します。
atmark@atde:~/atmark-dist-20071214/images$ cd atmark@atde:~wget http://brilliant.android.googlepages.com/android_m3-rc37a.img.tar.bz2aa atmark@atde:~wget http://brilliant.android.googlepages.com/android_m3-rc37a.img.tar.bz2ab atmark@atde:~wget http://brilliant.android.googlepages.com/android_m3-rc37a.img.tar.bz2ac atmark@atde:~ cat android_m3-rc37a.img.tar.bz2a? > android_m3-rc37a.img.tar.bz2 atmark@atde:~ tar xf android_m3-rc37a.img.tar.bz2
しかし起動しない。。。
現況:
ブート時のログを見ますと、
Linux version 2.6.18-at3 (atmark@atde) (gcc version 4.1.2 20061115 (prerelease) (Debian 4.1.1-21)) #5 PREEMPT Mon May 12 14:19:35 JST 2008
とあるので、カスタマイズしたカーネルの転送には成功している模様。
init: HOW ARE YOU GENTLEMEN
と出て、vga出力に
A N D R O I D _
とも出てくるので、initおよびそれを置いてあるルートファイルシステムも読めている模様。
でも
init: reading config file init: device init init: mtd partition -1, init: mtd partition 0, "nor.bootl init: mtd partition 1, "nor.kerne init: mtd partition 2, "nor.userl init: mtd partition 3, "nor.confi init: mtd partition 4, "nand.ipl" init: mtd partition 5, "nand.kern init: mtd partition 6, "nand.user init: mtd partition 7, "nand.free
ここのところで刺さってしまいます。デバイスドライバを正しく読み込めていない感じなのでしょうか?むー、困った。
困ったのでOmegamoon blogのやり方を試すべく、Zaurus SL-C1000をヤフオクでポチっとな(ぉ
ルートファイルシステムのNANDへの書き込み
展開されたandroid_m3-rc37a.imgをArmadillo-500のNAND領域に書き込みます。
ここからはArmadillo-500のコンソールでの作業となります。Tera Termではなくて、Gnomeに含まれているMinicomを使ってもいいですね。
armadillo500 login: guest [guest@armadillo500 (ttymxc0) ~]$ su Password: root [root@armadillo500 (ttymxc0) /home/guest] # (以降プロンプト省きます) # /bin/flash_eraseall /dev/mtd7 # fdisk /dev/mtdblock7
n→p→1→ENTER→ENTERとして領域を確保し、wで書き出します。再起動後に
# mke2fs -j /dev/mtdblock7 # mount /dev/mtdblock7 /mnt # cd /mnt # wget http://(どこか)/android_m3-rc37a.img # mkdir /rfs # mount -o loop /mnt/android_m3-rc37a.img /rfs # (cd /rfs; tar cf - *) | (cd /mnt; tar xf -) # sync # umount /rfs # umount /mnt
これで、NAND領域のmtdblock7に、androidのシステムイメージを配置できました。