Google Android@CELF18

CELF18Google Andoroidの発表のレポートです。

感想

今まで、Web等の記事では、VMより上の話ばかりだったので、今回の低レベルなレイヤーに関する話はとても面白かった。Linuxカーネルだけ使うというアプローチは、これから流行りそうです。KMCのPartner-Jは使えたら面白そうです。プロセス表示機能は面白い。ただし購入してまで使おうというモチベーションは無い。待ってれば、だれかなんとかしてくれそう。

Google Android

  • 京都マイクロコンピュータの辻さん
  • Google AndroidSDKが2007/11/12にリリース。ちょうどET2007の開催直前だった。
  • QEMUむけのデバッガは以前から開発していて、ET2007でデモする予定だった。
  • ミドルウェア(Webkit, SQLite, ,...)がネイティブコード
  • dalvik VM上でアプリが動く。アプリはJava
  • SDKQEMUのARMエミュレータ上で動く
  • QEMU, LinuxカーネルGPL
  • 各種ミドルウェアJAVA仮想マシン、各種アプリケーションはバイナリ提供。Apache license。今は、ソースコードが公開されていないが、2008年中にはソースコードが公開されると言っている
  • コードはオープンソースだけでない、Googleが購入したコードも含まれる。ただ、Googleが購入したコードは、ソースコードを公開できる契約になっているらしい。
  • QEMU ARM
    • 最新ではARMv7までサポート NEONも CP15コプロもサポートしている。
    • ただデバッグ用のCP14はコードがあるが、貧弱なのでKMCでやっている。
    • ARM用のQEMUには、CodeSourceryのクレジットが各所にある。
  • AndroidでのQEMU
    • GoogleがgoldfishというHWシミュレータをQEMUに実装
    • QEMUに独自のプロファイル機能を追加実装
  • AndroidLinux
    • 2.6.23
    • goldfish HW依存のソースを追加
    • CPUはARM926を想定
  • ビルド環境
  • KMCでやったこと
    • QEMUの仮想CPUデバッグをするデバッガを研究開発していた
    • たまたま、AndroidQEMUを使っていた。
    • せっかくなので動かしてみた
  • デモ
    • core2duo 2GHZのQEMU上で600 bogo mips。500MHzのARMと同じくらいの値。
  • AndroidLinux環境
    • 本当にカーネルしか使ってない!!!
    • libcは、glicやulibcでなくて、BSDのlibc
    • ルートファイルシステムも特徴的 /system ファイル数が300以下
    • busyboxみたいな、toolboxでまとめられている
    • /data はrw, /tmp, /varはRAMディスク、それ以外はreadonly
  • 動いているプロセス
    • linux的には、app_processが動いている
    • デーモンは数個
    • 初期化も軽い 普通のコマンドはifocnfig routeくらい
  • Javaについて
    • JAVA2MEは完全に無視
    • J2SEのクラスライブラリのサブセット+Andoroidの独自クラス
    • 電話やSMS関連のAPIが追加
    • 通常のJavaアプリケーションの作り方の手順が参考になる。
    • J2SEのサブセットなのでサーバーアプリも作れそう
  • 感じたこと
  • 将来の予想
    • もしかすると、組み込みでもPCの水平分業モデルが成立するかも(バイナリ提供にも関わらず、移植が楽)
    • パッケージングの完成度は非常に高い。
    • 上位アプリケーション開発のコミュニティができる可能性がある。
  • 影響 (個人の考え)
    • セットベンダーは悪い話ではない
    • 一部のソフトウェアベンダへの影響があるかも
  • KMCは
  • Q&A
    • Q Partner-Jのプロセス表示ははスレッドとプロセスの違いがわかるのか
    • A 分かる。マルチスレッドなアプリになっている。スレッドの種類は不明、独自のスレッドかも (Linux thread, NPL threead)
    • Q スレッド、プロセスの数は?
    • A スレッド、プロセスあわせて83個
    • Q マルチコア対応は?
    • A カーネルが対応すれば住むはず。QEMUの対応は良くわからない。MPCORE上でも動くんじゃないかなぁ
    • Q ルートファイルシステムはどこに置かれているんでしょうか
    • A シミュレーター上では、FlashのHWシミュレータ経由でマウントしている。実機では、サイズは、30Mのフラッシュに収まる。VMのキャッシュがディスクを結構使用する。
    • Q 画面のバッファは
    • A 次の資料で説明する。
    • Q GDBはうごくんですか
    • A QEMUGDBインターフェイスを持っているので、動いているかもしれない。ハードウェアブレイクポイントとかは使えない。
    • Q 画面の解像度は
    • A 変更できる
    • Q アプリケーションのセキュリティは
    • A J2SEのモデルを使うんじゃないかなぁ

実機でGoogle Android

  • 富士通ソフトウェアテクノジーズの近藤さん
  • willcom core module forum用に移植した
  • カーネルを移植すれば動くと考えたら、そうだった。
  • dmesgを解析
  • adbでカーネルコンフィグを取り出した
  • コンフィグにEABIとTHUMB命令が必要
  • OpenBinder
  • root fileを取り出す。
  • 4つのファイルを作ったら、起動時の赤球が動き出した
  • straceでひたすら調べる
  • /dev/bider のメジャー番号はあわせましょう
  • C言語アプリはstatic linkすれば作れる
  • 画面がちらつくので、フレームバッファは2画面分用意する
  • 電話機能
    • rild が司る
    • 各通信方式に応じて専用のDLLをローディングする。
    • wsimdを作った。
    • 本当はlibwsim-ril.soを作りたい。が、情報がない。
  • ボード
    • Freescale MX.31のボード
    • ソフィアシステム Sandgate III
      • W-SIMはまだ動かない