Linux」カテゴリーアーカイブ

Android/Linux MaruOS その3

コメントでも質問を頂いたので、もう少し詳しく書いてみます。
Maru OS は Windows 10 Mobile の Continuum のように、Android と Linux (Debian) Desktop が共存可能な OS となっています。

Linux on Android 等と違うのは、Android 環境を含めた Custom ROM として作られていることです。そのため既存の Android 環境に後付で install することは出来ず、Android OS 自体も置き換わります。

また端末単独で使うことを想定しておらず、外部の HDMI モニタ接続時のみ Desktop 環境が出現します。(前回のように端末側に Desktop が表示されることもあります)

Desktop 環境を使うためには、Bluetooth の Mouse や Keyboard と外部モニタを繋ぐための Slimport アダプタが必要です。

詳しくは 公式サイト を参照して下さい。
下記の内容は Nexus 5 と 0.2.3 の時点での内容となっています。

● Install 時にストレージ内容は消去されます

現時点の 0.2.3 が対応しているのは Nexus 5 だけとなっています。
インストーラがついているので手順は簡単ですが、ストレージのデータも OS も一旦全部消えます。Android 5.1.1 なので、Nexus 5 に提供されている公式の Android よりも古くなるのでご注意下さい。

● Play store は含まれていません

Android 側に含まれているアプリは最小限で Play Store など Google Apps がありません。FAQ で Google Apps の install 方法が提示されているので、その手順に従って追加する必要があるようです。

● HDMI モニタとの接続は Slimport です (Nexus 5)

Nexus 5 自体が HML に対応していないので HML アダプタは使えません。ご注意下さい。

● Maru Desktop Dashboard

外部モニタに接続して Desktop 環境がスタートすると、Android 側にも Maru Desktop Dashboard というアプリが起動します。ステータスバーのアイコンから呼び出せるので、Desktop 環境の Shutdown もここから行うことが出来ます。

HDMI ケーブルを抜いても、Maru Desktop Dashboard が起動している間は Desktop が残っています。移動先で再び HDMI に繋ぐと、そのままの状態で Desktop が復帰します。

● Desktop と Application

Desktop 環境は Debian 8 Jessie となっており apt (apt-get) でいろいろと install できます。
OpenGL ES ではなく OpenGL に対応しているためか、結構ソフトが動くようです。
使用している人の動画を見ると Blender も動いていることがわかります。
ただし GPU が使われていない (ソフトウエア描画) のでそれなりに低速です。

● Mouse, Keyboard のペアリング

Bluetooth デバイスのペアリングは Android 側の設定画面から行います。
マウスやキーボードで Android 側の UI は一切操作できず、Desktop 側の操作専用となります。
両方操作できてしまうと混乱するので当然かもしれません。

● Desktop 画面を本体に表示する

前回 の手順の詳細です。

1. 画面の回転を有効にしておく
2. もし起動しているなら Desktop を Shutdown しておく
3. HDMI モニタの電源を入れておく。
4. Slimport アダプタにモニタと繋がった HDMI をつなぐとステータスバーに Dashboard のアイコンが表示されるので、すぐにケーブルを抜く
5. 数秒後に Desktop が Android 本体の上半分に表示される
6. 隠れて見えないが上のタスクバーからスライドして通知領域を下に引き出す
7. Maru Deskto running の通知をタップして Maru Desktop Dashboard を開いた状態にする
8. 本体を横向きにして Desktop が全画面になる

Buletooth マウス・キーボードで操作できます。タッチ操作は出来ません。
電源の入った HDMI モニタを実際に繋がないと Desktop が起動しないようです。

Home ボタンを押すなど Maru Desktop Dashboard が裏側に回ると画面の回転が出来ないので、再び通知領域を引っ張って Maru Desktop running の通知を選択し、Dashboard 画面を開く必要があります。

電源ボタンを押しても (Sleep しても) 有効です。このまま持ち歩けますが、画面の上半分に常時 Desktop が表示されているので Android はほぼ使えなくなります。

終了させる場合は手探りです。Dashboard の右上あたりのボタンを OFF にしてから「SHUTDOWN」を選びます。

↓壁紙が似てるのでわかりにくいですが、上半分が Desktop です。
maruos_nexus5_01.jpeg

↓このように通知領域を引き出して Maru Desktiop running を開きます。
maruos_nexus5_02.jpeg

● VNC を使う

Android を併用しつつ本体で Desktop の内容を確認したいなら VNC を使う方法もあります。
Desktop 側で server を起動して Android で VNC client アプリを使います。
Bluetooth マウスやキーボードを使うと反応が遅れるので遅延が気になりますが、Android とすぐに切り替えできますしタッチパネルや仮想キーボードが使えるのは便利です。

遅延があるので、マウス・キーボードを使うならやはり上の直接描画の方が早くて快適です。

関連エントリ
Android/Linux MaruOS その2
Nexus 5 に Maru OS を入れてみた

Android/Linux MaruOS その2

Maru OS は Windows 10 Mobile にある Continuum の Android 版のようなものです。普段は Android の Smartphone ですが、Keyboard や HDMI モニタを繋ぐと Linux Desktop として使うことが出来ます。(前回)

maruos06.jpeg

HDMI 接続時のタイミングによっては、外部モニタではなく本体側に Desktop が表示されることがあります。これはこれで便利なのでそのまま使っています。(Slimport 経由で外部モニタ接続 → Dashboard 起動直後に切断)
Mouse, Keyboard は Desktop 用にペアリングしたものが使えます。解像度が 1920×1080 なので、外部出力と一致していることから本当にそのままです。

関連エントリ
Nexus 5 に Maru OS を入れてみた
Nexus 7 上に開発環境をつくる (4) Ubuntu 13.04
Nexus 7 上に開発環境をつくる (3) Ubuntu
Nexus 7 上に開発環境をつくる (2) Bluetooth と OpenGL ES 2.0

Nexus 5 に Maru OS を入れてみた

Android 7.0 (Nougat) の対象外になった Nexus 5 ですが、MaruOS が動くらしいので入れてみました。HDMI 経由でモニタを接続すると Desktop PC として使えるようになります。

Maru OS

中央の小さい画面が Nexus 5 16GB model です。後ろのモニタは 11inch (OnLap 1101H)

maruos01.jpeg

↓ 起動すると普通の Android の画面。OS は Android 5.1.1。アプリは最小限

maruos03.jpeg

SlimPort 経由で HDMI 接続すると Debian の Desktop になります。Keyboard や Mouse は予め Bluetooth で接続しておく必要があります。

maruos04.jpeg

Nexus 5 以外に必要な物は下記の通り

・SlimPort の HDMI アダプタ
・Bluetooth Keyboard
・Bluetooth Mouse

Bluetooth のペアリングは Android 側で行います。ペアリングと接続が完了しても Android 画面の操作が出来ないので注意が必要です。Desktop 側の操作だけマウスとキーボードが有効になっているようです。Bluetooth 接続後の動作確認のために HDMI を先に繋いでおくことをおすすめします。

Desktop は Linux そのままです。開発環境を整えてアプリケーションビルドなども普通にできます。HDMI ケーブルを外しても状態は残っているので、再びケーブルを繋ぐと以前の画面のまま復帰できるようです。Android 側の操作で終了させることも出来ます。

Nexus 5 本体の電源ボタンを押す (Sleep する) と Desktop 側も Sleep してしまうようです。使うときは Nexus 本体側の画面も常時点灯状態にしておく必要あり。

Mobile 端末で動く Desktop 環境としては思ったよりもレスポンスが良く十分使えそうです。RAM が多い上に CPU 世代も違うので当然ですが、以前使っていた Nexus 7 (2012) の Linux (Ubuntu) や NetWalker、古い Raspberry Pi よりも快適でした。

下記はビルド時間の比較。

                    real   user      CPU         clock  core
-------------------------------------------------------------
Nexus 5 + MaruOS    3:29   4:42      Krait 400   2.3GHz  4
Raspberry Pi 2      5:51  20:08      Cortex-A7   0.9GHz  4
Raspberry Pi 3      2:18   6:57      Cortex-A53  1.2GHz  4

real, user 共に実行時間。(分:秒) 値が小さい方が高速。

実際の時間 (real) では Raspberry Pi 3 に敵いませんが Raspberry Pi 2 よりは早く完了しています。user 時間が最も短いため core 自体の能力は高いことがわかります。Thread の恩恵が少ないのでストレージが遅いか描画に取られているのかもしれません。

OpenGL API に対応しており GL 2.1 + ES 2.0 が使えます。ソフトウエア描画なので GPU は用いられていません。かなり低速ですが一応 3D 描画できました。1~2 fps 程度。

maruos05.jpeg

関連エントリ
Nexus 7 上に開発環境をつくる (4) Ubuntu 13.04
Nexus 7 上に開発環境をつくる (3) Ubuntu
Nexus 7 上に開発環境をつくる (2) Bluetooth と OpenGL ES 2.0
Android Tablet Nexus 7 上に開発環境をつくる (Ubuntu)
NetWalker PC-Z1 i.MX515 OpenGL ES 2.0 (2)

2955U vs N3150/J1900/Athlon5350 (コンパイル時間の比較)

Celeron 2955U は低価格帯 PC に使われていた CPU (Haswell 世代) です。2955U を搭載した PC を入手したので flatlib3 のコンパイル時間を比較してみました。(Debug+Release)

CPU core clock C/T Compiler RAM コンパイル時間
Celeron 2955U Haswell 1.4GHz 2C2T Clang-3.4 4GB 93
Athlon 5350 Jaguar 2.0GHz 4C4T Clang-3.6 8GB 88
Celeron N3150 Airmont 1.6GHz 4C4T Clang-3.6 16GB 108
Celeron J1900 Silvermont 2.0GHz 4C4T Clang-3.4 8GB 79
参考用 core clock C/T Compiler RAM コンパイル時間
Core i7-4790K Haswell 4.0GHz 4C8T Clang-3.6 16GB 15
Atom Z540 Bonnell 1.8GHz 1C2T Clang-3.4 2GB 426
Raspberry Pi2 Cortex-A7 0.9GHz 4C4T Clang-3.5 1GB 402
Raspberry Pi ARM1176 0.7GHz 1C1T Clang-3.5 0.5GB 1893
Netwalker Cortex-A8 0.8GHz 1C1T GCC-4.7 0.5GB 1902

・コンパイル時間の単位は秒、値が小さい方が高速

RAM 容量やストレージの速度など動作環境が一致していないのであまり厳密ではありません。特に Raspberry Pi は SD カードの速度に依存するので参考程度にお願いします。

core 数が半分でクロックも低いながら、2955U は Atom/Jaguar 系の 4 core/2GHz とほぼ同程度のコンパイル時間となっています。さまざまな機能が無効化されていますが性能は高く、core 単体では Atom/Jaguar に対して 2倍以上速いことになります。
J1900 よりも新しい N3150 の方が遅いのは TDP も低く Clock が下がっているため。GPU 性能では 4EU しかない J1900 が一番不利になっています。

CPU GPU sp clock fop FLOPS
Celeron 2955U HD Graphics Gen7.5 10EU 200-1000MHz 160 160.0
Celeron N3150 HD Graphics Gen8 12EU 320-640MHz 192 122.9
Celeron J1900 HD Graphics Gen7 4EU 688-854MHz 64 54.7
Athlon 5350 RADEON R3 (8400) 128sp 600MHz 256 153.6

関連エントリ
Raspberry Pi 2 で速くなったコンパイル時間の比較
BayTrail vs Kabini (Celeron J1900 vs Athlon 5350)
コンパイル時間の比較 BayTrail
Android Tablet Nexus 7 上に開発環境をつくる (Ubuntu)

Raspberry Pi 2 OpenGL ES のレイヤー合成

大幅に強化された CPU と違い、GPU 周りは Raspberry Pi 1 とほとんど変わっていないようです。
以前移植したコードが Raspberry Pi 2 でもそのまま動いています。

Raspberry Pi 2 の Desktop (Raspbian) から起動できる Minecraft は、
一見 Windows 内で動いているように見えますが他のウィンドウの下に隠れることができません。
3D Rendering 自体は別のレイヤーに描画されており、
スクリーンに対して Overlay で表示されているようです。

raspberry_pi_201.jpg

↑ 上のように半透明が描画されているシーンだけ下のウィンドウが透けて見えます。
フレームバッファに alpha 値が入るとレイヤー同士の合成とみなされてしまうため。

この辺りの挙動は Window 無しのフルスクリーン描画と違いがないようです。
自分が移植したプログラムでも最初は下記のようになっていました。

raspberry_pi_202.jpg

↑背景を alpha = 0.0f でクリアしていたため console と合成されてしまっています。
うっすら見えているのは alpha 値が入っているところだけです。

OpenGL で常に Alpha=1.0 を書き込んでも良いのですが、
VideoCore の API でも指定できるようです。
下記のように alpha に固定値 255 を指定することで layer が不透明になりました。

static VC_DISPMANX_ALPHA_T alpha= {
  DISPMANX_FLAGS_ALPHA_FIXED_ALL_PIXELS,
  255,
  NULL
};

dispman_element= vc_dispmanx_element_add(
  dispman_update,           // DISPMANX_UPDATE_HANDLE_T
  dispman_display,          // DISPMANX_DISPLAY_HANDLE_T
  0,                        // layer
  &dest_rect,               // VC_RECT_T*
  0,                        // DISPMANX_RESOURCE_HANDLE_T
  &src_rect,                // VC_RECT_T*
  DISPMANX_PROTECTION_NONE, // DISPMANX_PROTECTION_T
  &alpha,                   // VC_DISPMANX_ALPHA_T
  NULL,                     // DISPMANX_CLAMP_T*
  DISPMANX_NO_ROTATE        // DISPMANX_TRANSFORM_T
);

↓不透明になったもの

raspberry_pi_203.jpg

他にも位置の指定や拡縮、90度回転や反転等の指定もできるようです。

↓ ありもののケース(旧型)

raspberry_pi_1b.jpg

関連エントリ
Raspberry Pi 2 で速くなったコンパイル時間の比較