日別アーカイブ: 2014/09/16

FirefoxOS v2.1 と tablet 指定

以前、v2.0 を試した際に「アイコンがでかい」という残念な結果を見たわけですが、先日の勉強会でネタ話にしていたところ、「確か tablet ビルドがあったような」ということで確認してみました。

Gaia のデバイス指定

gaia の Makefile を見ると、デバイス種別を指定するところがありました。phone が指定されていたからアイコンが3列、というのは何となく納得。

GAIA_DEVICE_TYPE := phone

Bugzilla にもBug 1010128 にて tablet が追加されているようです。これは試してみないと。

v2.1 へのアップグレード

tablet ビルドを試す前に、v2.0 から v2.1 に上がったこともあって(phoneのまま)そちらを先に試してみました。すると

マウスカーソルが動かない

という事態に。これは phone だからなのか、修正で何かトラブルなのかは追跡できてないですが、動きを見てると「マウス押す」→「マウス移動」→「マウス放す」という動作でしかカーソルが動かないので、もしかしたらタッチスクリーンの動作に引っ張られてそうな感じです。

v2.1 では新クラス GeckoTouchDispatcher が出来て nsAppShell にあった MouseEvent 処理がそちらに移動したので、その影響でマウス処理が正常にできていないのではないか? と思われます。マウス使う人が増えないとこれは当分直らないか…

tablet ビルドを試す

v2.0 で GAIA_DEVICE_TYPE=tablet のビルドを試したところ、まだ用意しただけで何もできないようで、アイコンも何もない画面で、Notification の Setting すら起動できない状態でした。
No Icon on v2.0 tablet

v2.1 で GAIA_DEVICE_TYPE=tablet のビルドではようやく v1.4 で見たアイコンが出現し、横スクロールができるようになっています。ただし、上記のようにマウスがまともに動かないので先に進むことすら困難な状態です。
appear icon on v2.1, but freeze cursor

ところで、tablet ビルドは以前通り横スクロール、phone ビルドは縦スクロールなので、端末の形態により UI のポリシーは変わっていくようです(今のところ)。ちなみにTVデバイス向けの tv ビルドも用意されているようです。

MK802IV と PicUntu

MK802IV を試す

これまで使っていた Android Stick の MK808B は、PicUntu の kernel config をいじらなくても結構使えたのでそれをベースに FirefoxOS を試していました。とはいえ一世代前の製品ということもあって不都合もあります。

  • 本線は RK3188 に移っているので開発から置いていかれる
  • Android も 4.2 から更新されることもない
  • Recovery 起動のままなので一度 Android を経由しないといけない (最新 PicUntu は直接起動可能)
  • もう一台ないと冒険できない(最悪焼き失敗したら文鎮になるので)

ということで RK3188 搭載の Stick に乗り換えるべく以前より同じメーカー Tronsmart の MK908 を購入して試していたのですが、 Tronsmart MK908 は PicUntu の本線でないことや build した kernel がなかなか安定して動かないことから、Rikomagic MK802IV を入手し、そちらを試しています。

MK802IV

MK802IV は直接 HDMI 端子が出ているのでディスプレイに直接挿すことができますが、HDMI オスコネクタなので今回は サンワサプライの HDMI-VGA 変換で アナログRGB に出すことにしました。

PicUntu 導入

PicUntu 4.5 は 本体 NAND メモリから boot 及び root filesystem を置くようになっています。Android は上書きにより使えなくなるので注意してください。

Windows による導入手順は FreakTab のスレッド に詳しく書いてありますが、翻訳しておきます(一部修正追記)。

  1. picuntu-4.5-BasicGUI-Nand をダウンロードし、任意の場所に展開します。
  2. 本体を bootloader モードにする必要があります。本体のmicroSD側にある通気スリット真ん中の凹んだ部分にボタンがあり、先の細い棒でボタンを押しながら電源を入れます。Android が起動している場合は、adb で接続して “adb reboot bootloader” でも可能です。
  3. rk_flash_1.37 フォルダの RKAndroidTool.exe を実行します。ウィンドウの下方に “Found Device ready to flash” が出ていれば OK です。
  4. オプションのうち binloader, parameter, kernel, boot, system をチェックし、misc, recovery, backup のチェックを外します。以下の画面のように設定します。rk_flash_tool
  5. 「Erase NAND」ボタンを押して 内蔵 NAND メモリを初期化します。
  6. 「Flash ROM」ボタンでイメージを書き込みます。
  7. 自動的に再起動され、GUI のログイン画面が立ち上がります。

PicUntu on MK802IV

Kernel ビルド

カーネルソースは github に公開されています。さらに kernel から最初に呼び出す initramfs もビルドに必要なので取得しておきます。

$ git clone https://github.com/aloksinha2001/Linux3188.git
$ git clone https://github.com/Galland/rk30_linux_initramfs.git

MK802IV で使える kernel config はすでに用意されているので、コピーしておきます。

$ cd Linux3188
$ cp arch/arm/configs/rk3188_picuntu-4.4-MK802IV-AP6210_defconfig .config

そのままでは NAND パーティションが異なる(Android recovery 向け)なので、.config の CONFIG_CMDLINE を以下のように置き換えます。パーティションは PicUntu-4.5-NANDGUI 向けの設定にしています。最後の text は CUI で起動するための指定です。

CONFIG_CMDLINE="init=/sbin/init root=/dev/mtdblock2 mtdparts=rk29xxnand:0x00008000@0x00002000(boot),0x00008000@0x0000A000(kernel),-@0x00012000(system) text"

さらに、Framebuffer Console の切り離しができるようにオプションを有効にします。これができないと FirefoxOS を乗せる際に Framebuffer Console が有効になったままになるため、画面が Console Log で延々上書きされることになってしまいます。

CONFIG_VT_HW_CONSOLE_BINDING=y

ビルドを実行します。以下では CCPATH にコンパイラの path を指定します。INSTALL_MOD_PATH はカーネルモジュールを保存する path を指定します。全て完了すると イメージファイル KERNEL.img が得られます。

$ export ARCH=arm
$ export CROSS_COMPILE=$CCPATH/arm-eabi-
$ export INSTALL_MOD_PATH=$PWD/mod
$ make -j4
$ make modules_install
$ mkknlimg arch/arm/boot/zImage ./KERNEL.img tvbox:

できた kernel イメージは上記で展開したフォルダにある rockdev\Image 以下に名前を変えて(たとえば mykernel.img とか)から保存し、 rk_flash_1.37 フォルダの RKAndroidTool.exe を起動して、kernel の path 部分を変えた名前(..\rockdev\Image\mykernel.img)に変更してから 「Flash ROM」で 書き込みます。

FirefoxOS の可能性

Android や FirefoxOS が使う OpenGLES ライブラリは GPU である Mali が使えるようにするため、kernel build でドライバも build する必要がありますが、今のところ有効にすると console が表示できずうまく起動しないようです。Framebuffer Console がぶつかるのかもしれませんが、原因追跡が必要です。

すでにパッケージに用意された build 済み ドライバは API バージョンが異なるため使用できないようなので、まずはこの辺りの突破が最初の関門のようです。