Abstract
This report describes how to install Android OS into FriendlyElec's NanoPi-NEO.
はじめに
FriendlyElec社のミニミニサイズLinuxボード、NanoPi-NEOでAndroid OSを動作させる実験について報告します。
わずか4cm角の超ミニミニサイズでありながらARM Cortex-A7コア4コア搭載でとってもパワフル、しかもお値段手ごろで省エネなNanoPi-NEOでAndroidが動きます。
英語のチュートリアルはFriendlyArmのWikiに出てますが、その追試報告という形で説明します。
用意するもの
- NanoPi-NEO
- USBシリアル変換インターフェイス、またはRS-232Cレベル変換回路
- マイクロSDカード(今回は手持ちの16GBのものを使用しましたが、4GB以上あればいいそうです)
- Android OSのイメージ
- 低レベルフォーマッタとPhoenixCard(OSイメージに付属のもの)
- Windows PC(イメージ書き込みに必要)
あと、電源もお忘れなく。
OSイメージについて
OSイメージはFriendlyArmのNanoPi-NEOのWiki経由でGoogle Driveからダウンロードします。解凍するとFriendlyCoreなどいろいろなOSイメージが入ってますが、そのなかの3rd-ROMsのところにAndroidのイメージが入っています。
マイクロSDカードのフォーマット
まず最初にマイクロSDカードをフォーマットします。解凍したアーカイブのtoolsディレクトリにHDDLLFというソフトが入っていますのでそれをWindowsマシン上で起動し、マイクロSDカードを低レベルフォーマットします。
この作業は意外と時間がかかり、16GBのカードで約30分かかりました。
次にWindows上で標準のFAT32フォーマットを行います。
FriendlyArmのWikiの手順通りですが、この手順が面倒な場合は新品のマイクロSDカードをそのまま使ってもよいかと思われます(出荷時に低レベルフォーマットしてFAT32フォーマットしてある)。
OSイメージの書き込み
FriendlyArmのWikiによれば、「付属のPhoenixCardで書き込むこと」とありますが、まずはふつうにDiskimagerなどのソフトでべたっとddしてみました。
NanoPi-NEOに突っ込んで電源を入れると(端末ソフトのボーレートは115200bpsにセットしておくこと)、何も出ません。ブートローダのメッセージすら出ません。
次に付属のPhoenixCardで書き込みました。再度フォーマットからやり直してPhoenixCardで書き込みます。
このソフトには[Product]モードと[StartUp!]モードとあともう1つ謎のモードがあります。ここで重要なのはデフォルトのProductモードで書き込むとブートローダは起動しますがOSブートの段階でイメージをロードできずにブート失敗することです。
StartUp!モードを選択してイメージを書き込みます。PhoenixCardは少々動作が怪しいようで、時々エラーで止まりますが、その場合は再度書き込みを試みます。フォーマットをかける必要はありませんでした。
正常に書き込みが進むといろんなセクションへの書き込みを行ってる様子が表示されます。
ブートしてみる
こうして出来上がったマイクロSDカードをNanoPi-NEOに突っ込んでブートします。
基板上のデバッグUARTヘッダがコンソール入出力になっていますので、あらかじめUSBシリアル変換回路をつないでおき、端末ソフトを次のように設定します。
o ボーレート : 115200 bps
o データビット : 8bit
o ストップビット : 1bit
o パリティ : なし
電源を入れるとブートがはじまります。最初にU-Bootが起動し、U-BootがAndroid OSをロードして実行開始です。
初回ブート時はパーティションの生成などで少し時間がかかります。
rootのプロンプト(#)が出ればブート成功!!
NanoPi-NEO上のAndroidについて
Androidといえばスマートフォンやタブレットでおなじみのあの画面ですが、NanoPi-NEOにはHDMI出力がありません。最近売られているNanoPi-NEOにはコンポジットビデオ(CVBS)出力がついていますが、そちらにも映像信号が出力されている様子がありません。
コンポジットビデオが出力されるようであればNanoPi-NEOでスマートテレビが自作できそうですが、現状ではちょっと無理そうです。
よってたくさんあるGPIOヘッダを利用して、組み込みAndroidとして利用するのがよさそうです。
ARM Mali(ARMのGPU)に関しては初期状態でサポートされているようで、OpenGL ESにも対応しており、それ用のライブラリもインストールされています。もっとも、画面が出ないので目下のところあまり意味はありません。
こんなときは
再起動したい/シャットダウンしたい
Android OSを再起動したい場合は、プロンプトから次のコマンドを入力します。
# reboot
2回目以降のブートはかなり速いです。
なお、シャットダウンしたいときは
# reboot -p
でシャットダウンできます。シリアルコンソールを見ていると一度U-Bootに落ち、その後
CPU0 go to WFI
というメッセージ(割り込み待ち?)を出力して停止します。
起動しない
起動しない場合は大きくわけて2通りあります。基板上のLED(最近のNanoPi-NEOだと緑LED)の状態で判別可能です。
なお、正常に動作してる状態では緑LEDは一定周期で点滅しています。
点滅条件は/sys/class/leds以下のファイルで設定可能です。
◎ 緑LEDが点灯してない場合
U-Bootの起動に失敗しています。OSイメージを正しく書き込んだか確認してください。Unix系標準のddやWindows上のDiskimagerなど、イメージファイルをベタ書きするタイプのユーティリティで書き込むとこのようになります。
必ず付属のPhoenixCardで書き込んでください。
◎ 緑LEDが連続点灯してる場合
U-Bootは起動したものの、OSのロード実行に失敗して止まっています。PhoenixCardで書き込むとき、[StartUp!]モードで書き込んだかどうか確認してください。
[Product]モードで書き込むとU-Bootは起動しますが、OSのロードができません。
まとめ
NanoPi-NEO上でAndroid OSを動作させる方法について、FriendlyArmの資料をもとに追試した結果を報告しました。
確かにAndroid OSは動作しますが、ビデオ出力が出ないので現状ではタブレットのようなUIを持った機器としての利用はできません。
GPIOを活かして(sysfs経由でのアクセス)組み込みAndroidとしてなら使い道はありそうです。
なお、注意事項ですが、FriendlyArm社はNanoPi-NEO上でのAndroidについては関知しないとのことですので、Androidの動かし方などについての問い合わせは遠慮してください。