BeagleBone BlackにAndroidをインストールする

  • 18
    いいね
  • 0
    コメント
この記事は最終更新日から1年以上が経過しています。

BeagleBone BlackにAndroidをインストールする

 この記事は、Androidアドベント・カレンダーの12月2日分の記事です。

BeagleBone Blackとは

 BeagleBone Blackは、5000円以下で購入できる名刺サイズのボードです。
 beagleboad.orgによって、オープンハードウエアとして開発されており、日本でも簡単に入手できます。
 SoCにARM Cortex-A8 1GHzのTI AM335xを採用していて、DRAMも512MB搭載されています。
 手のひらに乗るような、とても小さなボードですが、Androidだけでなく、UbuntuやDebianなどのLinux環境も動作させることもできます。出荷状態では、Linuxディストリビューションとして、Angstromがインストールされています。
 世間では、RasPiが人気ですが、価格は数百円差で、動画の再生をする場合を除いては、トータルなパフォーマンスはBeagleBone Blackのほうに分があります。

 BeagleBone Blackについての詳細な情報は、以下のサイトを見てみてください。

 日経Linuxなどの記事で常連の米田さんによる書籍も出ています。

Androidのインストール

 BeagleBone Blackに、Androidをインストールしてみましょう。

 作業環境はUbuntu 12.04を使っています。

 一番シンプルな方法は、SoC製造元のTIで配布しているバイナリを、SDカードに焼いて起動することです。
 TIでは、BeagleBone Blackを対象に、AM335xについてのサポートページの中で、自社製のボードと同様のサポート情報を提供しています。
 TIのサポートページは、日本語のページもありますが、情報が少ないので英語ページを見ます。

ビルド済みイメージファイルの取得

 英語のページから、以下のDev Kitのページを開きます。現在の最新版は、Android 4.2.2です。

 ページの下のほうに、"Pre-built Images"の項目があり、そこにBeagleBone Blackのリンクがありますので、そこをクリックしてダウンロードします。ここでは、wgetコマンドを使ってダウンロードしました。

~$ mkdir bbb
~$ cd bbb
~/bbb$ wget http://downloads.ti.com/sitara_android/esd/TI_Android_DevKit/TI_Android_JB_4_2_2_DevKit_4_1_1/exports/TI_Android_JB_4.2.2_DevKit_4.1.1_beagleboneblack.tar.gz

 ダウンロードしたアーカイブを展開します。展開してできたbeagleboneblackを見てみましょう。

~/bbb$ tar zxf ../TI_Android_JB_4.2.2_DevKit_4.1.1_beagleboneblack.tar.gz
~/bbb$ cd beagleboneblack/
~/bbb/beagleboneblack$ ls
Boot_Images  Filesystem  Media_Clips  README.txt  START_HERE  mkmmc-android.sh

 ディレクトリが4つと、README、実行用のシェルスクリプトファイルが入っています。それぞれの内容を見てみましょう。

 Boot_Imagesディレクトリには、4つのファイルが入っています。

~/bbb/temp/beagleboneblack$ cd Boot_Images/
~/bbb/temp/beagleboneblack/Boot_Images$ ls
MLO  u-boot.img  uEnv.txt  uImage

 MLOは、初期起動プログラムです。MLOは、第二弾のブートローダーであるu-boot.imgをロードして起動します。uEnv.txtは、u-boot用の設定ファイルです。uImageは、u-bootから起動するLinux kernelで、u-bootから起動できるようにヘッダが付けられたものです。

 Filesystemディレクトリには、rootfs.tar.bz2が1つだけ入っていました。これは、Androidのrootファイルシステムのアーカイブです。

~/bbb/temp/beagleboneblack/Boot_Images$ cd ../Filesystem/
~/bbb/temp/beagleboneblack/Filesystem$ ls
rootfs.tar.bz2

 Media_Clipsディレクトリには、画像、音声、動画などのサンプルファイルが入っています。

~/bbb/temp/beagleboneblack/Filesystem$ cd ../Media_Clips/
~/bbb/temp/beagleboneblack/Media_Clips$ ls
Audio  Images  Video

 START_HEREディレクトリには、UserGuideのHTMLファイルが入っています。

~/bbb/temp/beagleboneblack/Media_Clips$ cd ../START_HERE/
~/bbb/temp/beagleboneblack/START_HERE$ ls
Setup.htm  Setup_files

 README.txtには、SDカードや、内蔵eMMCへのAndroidの書き込み方法が書かれてます。基本的には、mkmmc-android.shスクリプトで行います。

README for preparing SD/MMC/Micro-SD CARD for booting Android

Pre-Requesites

1) Need to have an SD/MMC/Micro-SD card with atleast 2GB of size.
2) The script needs to be invoked from ubuntu linux machine 8.04 or above.
3) User needs to have sudo privileges.
(略)

ビルド済みイメージファイルをSDカードに書き込む

 インストール用のmicroSDカードを用意します。容量は2GB以上のものが必要です。ここでは8GBのものを用意しました。

 microSDカードは、USBカードリーダーに差し込んで、PCに差し込みます。dmesgコマンドの出力を見ると、認識したデバイス名がわかります。この場合、sdcとして認識しています。

[ 7255.526629] scsi 2:0:0:0: Direct-Access     Generic  STORAGE DEVICE   9404 PQ: 0 ANSI: 0
[ 7255.529122] sd 2:0:0:0: Attached scsi generic sg2 type 0
[ 7255.638698] sd 2:0:0:0: [sdc] 15278080 512-byte logical blocks: (7.82 GB/7.28 GiB)
[ 7255.640317] sd 2:0:0:0: [sdc] Write Protect is off
[ 7255.640328] sd 2:0:0:0: [sdc] Mode Sense: 03 00 00 00
[ 7255.641933] sd 2:0:0:0: [sdc] No Caching mode page present
[ 7255.641944] sd 2:0:0:0: [sdc] Assuming drive cache: write through
[ 7255.647113] sd 2:0:0:0: [sdc] No Caching mode page present
[ 7255.647123] sd 2:0:0:0: [sdc] Assuming drive cache: write through
[ 7255.649898]  sdc: sdc1
[ 7255.654226] sd 2:0:0:0: [sdc] No Caching mode page present
[ 7255.654237] sd 2:0:0:0: [sdc] Assuming drive cache: write through
[ 7255.654243] sd 2:0:0:0: [sdc] Attached SCSI removable disk

 インストールスクリプトは、日本語シェル環境ではうまく動作しないので、まずは設定を変更しておきます。sdcへの書き込みを行います。

~/bbb/temp/beagleboneblack$ export LANG=C
~/bbb/temp/beagleboneblack$ sudo ./mkmmc-android.sh /dev/sdc

 sudoのパスワード確認の後、sdcで間違いないか確認が出ます。間違いなければ、yとリターンを入れます。書き込みにはやや時間がかかります。

Assuming Default Locations for Prebuilt Images
All data on /dev/sdc now will be destroyed! Continue? [y/n]
y
[Unmounting all existing partitions on the device ]
umount: /dev/sdc: not mounted
umount: /dev/sdc1: not mounted
[Partitioning /dev/sdc...]
Disk /dev/sdc doesn't contain a valid partition table
DISK SIZE - 7822376960 bytes
CYLINDERS - 951
[Making filesystems...]
[Copying files...]
[Copying START_HERE folder to boot partition]
[Done]

 Doneが表示されたら作業は終わりです。

Android起動用SDカードの内容

 作成したSDカードの中身を見てみましょう。

$ sudo fdisk -l /dev/sdc

Disk /dev/sdc: 7822 MB, 7822376960 bytes
255 heads, 63 sectors/track, 951 cylinders, total 15278080 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000

   Device Boot      Start         End      Blocks   Id  System
/dev/sdc1   *          63      144584       72261    c  W95 FAT32 (LBA)
/dev/sdc2          144585     3951989     1903702+  83  Linux
/dev/sdc3         3951990     7759394     1903702+  83  Linux
/dev/sdc4         7759395    15277814     3759210    c  W95 FAT32 (LBA)

 中は4つのパーティションに分かれています。

  • sdc1: 起動用のパーティション
  • sdc2: rootfs: Androidのシステム
  • sdc3: usrdata Android用の内蔵データ領域
  • sdc4: data AndroidのSDカード相当の外部データ領域

 sdc1の内容は、起動ファイル以外にも、START_HEREディレクトリがコピーされていました。u-bootの設定ファイルの中も見ておきます。

$ sudo mount /dev/sdc1 /media
$ ls /media/
MLO  START_HERE  u-boot.img  uEnv.txt  uImage
$ cat /media/uEnv.txt
bootargs=console=ttyO0,115200n8 androidboot.console=ttyO0 mem=512M root=/dev/mmcblk0p2 rw rootfstype=ext4 rootwait init=/init ip=off
bootcmd=mmc rescan ; fatload mmc 0 81000000 uImage ; bootm 81000000
uenvcmd=boot
$ sudo umount /media/

 sdc2の内容は、rootfs.tar.bz2が展開されたものです。

$ sudo mount /dev/sdc2 /media
$ ls /media/
data             init.am335xevm.rc      init.usb.rc  system
default.prop     init.am335xevm.usb.rc  lost+found   ueventd.am335xevm.rc
dev              init.goldfish.rc       proc         ueventd.goldfish.rc
fstab.am335xevm  init.rc                sbin         ueventd.rc
init             init.trace.rc          sys
$ sudo umount /media/

 sdc3の内容は、からっぽです。

$ sudo mount /dev/sdc3 /media
$ ls /media/
lost+found
$ sudo umount /media

 sdc4の内容は、Media_Clipsディレクトリの内容がコピーされていました。

$ sudo mount /dev/sdc4 /media
$ ls /media/
Audio  Images  Video
$ sudo umount /media

BeagleBone BlackでAndroidを起動する

 BeagleBone Blackに、作成したmicroSDカードを挿入し、microHDMI-HDMIアダプタを接続し、HDMIモニタに接続します。今回はUSB給電するため、付属のminiUSBから給電接続します。

 ANDROIDロゴが表示されて、Androidが起動します...

 ロゴループして起動しないじゃん... orz

 と、思ったら、初回起動にえらく時間がかかっただけでした。気長に待ってください。

boot

 起動してしまえば、あとは普通にAndroidです。マウスやキーボードをつないで使ってみてください。

この投稿は Android Advent Calendar 20132日目の記事です。