LoginSignup
16
16

More than 5 years have passed since last update.

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

Posted at

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

16
16
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
16
16