Android
AndroidDay 2

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

More than 5 years have passed since last update.


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です。マウスやキーボードをつないで使ってみてください。