JLC2010「MeeGoのAndroidプラットフォームへの移植」をtudaったログ

  • MeeGo Androidの話は電池なしにつきtudaれませぬ。
  • 電源ゲットして再開可能に。
  • ラクルの天野さん。(たしか富山出身だったような...)
  • MoblinやMeeGoをやってきている。
  • 概要、Android端末の特徴(ハード)、移植方法の考え方、N1への移植、今後の課題/他のケースでの問題。
  • 概要。AndroidAndroid端末。Androidは日々バージョンアップ。HWも進化している。最新ハードウエアの採用。
  • メーカーやキャリアはリリーススピードについていけてるか? 古いデバイスはサポートされない。要因というか背景:Androidによってある一定の共通化が達成された。機能拡張しやすくなった。アップデート間隔が短くなった。
  • 古い端末をよみがえらせる。新しい可能性。サポートされない端末は増える。需要も増える。別のOSも動く。新しいバージョンのAndroid、他のLinux
  • テーマ:そもそも、Android端末で他のOSが動くの?どうすれば動くの?
  • Android端末の特徴。mtdでFlashROMにパーティションを構成。n1では6つ。それぞれ独自の用途が決まっている。Splash、リカバリ、ブート、システム(ROMアプリ、ライブラリ)、キャッシュ(システムアップデート用のキャッシュ)、ユーザーデータ(電話帳など)。
  • N1を例にしたが、基本的に他もこの構成ではないか。起動パーティション部分。kernelのzimageとcmdline(コマンドライン文字列情報)、initrd。1つのイメージに結合している。複数はいっていて起動を切り替え。
  • initrdをrootfsとして使う。proc dev systemなどをマウント。mtdのfsはyaffes2。SDカードがあれば、それもマウント。
  • 移植方法:2つの視点で考える。1.kernelのロード方法。どこから起動できるのか。ベストプラクティスは? 2.rootfsの場所。どこに置けるか?どれだけの容量が必要か。それぞれ3つの方法を紹介する。
  • kernelのロード方法。ケース1。boot領域の上書き。電源ONでそのまま起動。単体で起動できる。もっとも簡単。Androidが起動できなくなるかも。
  • ケース2。PCからイメージを転送してロード。fastbootコマンドでzImageを転送。mtdには書き込まない。電話機のAndroidには影響ない。起動時にはPCが必ず必要になる。
  • ケース3。リカバリ領域を上書きする。リカバリモードから起動できるようになる。単体で起動できる。Androidデュアルブートリカバリ領域からの復元/アップデートができなくなる。
  • 復元はfastbootからできるので大丈夫。(fastbootを採用してないシステムもあるのでそうはいかないゾ)。
  • rootfsの場所。ケース1。システム領域の上書き。yaffes2を使う。fastbootで上書き。システム領域のみで単体起動できる。Androidが起動できなくなる。
  • ケース2。ユーザーデータ領域を上書き。手順はシステム領域と同じ。systemは300MBくらいしかないので、少し大きい領域が使える。Androidのユーザーデータの保証ができなくなる。ちゃんと使えなくなる。
  • ケース3。SDCardを使う。PCでrootfsを書き込む。extfsで作成できる。mtdには影響はない。GB単位の十分なスペース。SDカードがないと使えない。
  • フルシステムをmtdに乗せるのは難しいので、圧縮FSとの組み合わせで使う。キャッシュ領域は使うには小さすぎる。
  • N1への移植。MeeGoを動かす。3月発表。Linuxの新しいディストリ。AtomとARM。携帯電話、ネットブック、車載、家電。intelNOKIAがやっている。(NOKIAの説明は違ったけどな)
  • 準備:kernelはPCからイメージ転送。rootfsはSDCard。N1本体とPC(Ubuntu)、USBケーブル。SD 4G。書き込み速度が重要なのでクラスの数字の大きいものを。
  • fastboot、mic2。mic2 MeeGoのツール。イメージ作成を行う。debパッケージあるので、sources.listに追加。
  • 手順1:rootfsの作成は、キックスターファイル。テンプレがあるので、それを使う。ddでイメージをコピー。(コマンドオプションは読めなかった。)
  • 手順2。kernelの作成。Androidクアルコム向けツリーを入手。2.6.32を使った。N1 2.2と同じものを。gitでソースを入手。mahimahiがN1の設定セット。initrdを無効に。Xで動いているので仮想端末を有効に。
  • コンパイルAndroidのクロス環境を使う。パス設定してmake。
  • N1をfastbootモードで動かす。PCにudevを改変し、ユーザー書き込みできるようにする。PCとN1を接続し、コマンドで転送。-c でkernelパラメーターを入れる。SDパーティションとFS、kernel imageなどを指定。デモ。
  • (をを、デモマシンがMeeGoだ。おもろいUIだな。)
  • タッチパネルも無線LANも動く。
  • 今後の課題/別のケース。ハードウエアレンダリングを有効にする。libEGL、libEGLSv2互換性の問題。MeeGoはGL依存なので滑らかな動作にならない。周辺装置対応。ボタン、トラックボール、センサ、カメラ等(アプリから)。
  • 電話機能対応。ATコマンドの調査が必要。ofonoを拡張する必要あり。
  • 注意点:バックアップを忘れずに。自身のリスクで。カスタマイズ。ブートローダーのunlockが必要。メーカーの保証対象外に。Lock状態に完全にもとにもどせない。
  • fastbootとUnlockだけでは書き換えられないデバイスもある。復元の仕組みを使う。Android自身をrootユーザーで動かす必要など。
  • 別のケース:AC100。Tegra2。Linux for Tegraを使ってイメージを書き換え。リカバリ領域から起動。SDにrootfs。Ubuntuの動作実績あり。音声出力、HDMI出力が難。
  • MeeGoではイリーガルインストラクションになってしまう。調整が必要。
  • おまけ:adbはMeeGoでも使える。N1をMeeGo化すると電源を落とすには電池外さないといけない。shutdownコマンドは使える。起動はわりと早い。
  • デュアルブートできるようにしている。boot領域を上書き。リカバリ領域にAndroidを置く。Androidと共存できるようにSDのパーティション構成を2つにしている。
  • 終わり。
  • あれ?会場に小林さんいる(^^)。
  • MeeGoにadbコマンド使えるようにkernelオプションを生かしている。MeeGoオリジナルのkernelに特徴はない。
  • MeeGoを動かすモチベーションは? MeeGoにフォーカスしているが、これじゃなくてもいい。スマフォ向けのUIがあるのはいい。
  • Androidとの差は?スタンダードなLinuxディストリ。OSSだけで構成できる。優位点はわからない。デバイスAndroid用だからそちらが使いやすくてあたりまえ。
  • MeeGoは何がたのしい?組み込み向けとしては環境がそろっている。新しい機能を盛り込んでいるところ。btrfsを使っているとか。風穴さん、オープン。議事録も出ている。誰も参加できる。
  • MeeGoにはJavaは乗る?入れたい人がいれれば動くかと。