firefox os 起動の仕組みを調べてみた

Post on 24-May-2015

8.531 Views

Category:

Technology

0 Downloads

Preview:

Click to see full reader

DESCRIPTION

2013年8月28日に開催される「関東Firefox OS勉強会 3rd ごった煮」の発表資料です。

TRANSCRIPT

Firefox OS 起動の仕組みを調べてみた

関東Firefox OS勉強会 3rd ごった煮 2013.8.28

2

本日お話する内容

• Firefox OSの内部構造

• Firefox OSが起動するまでの流れ

3

自己紹介

本発表は私の個人的な調査に基づくものです。 内容に誤りがあるかもしれませんがご了承ください

名前 西村 宗晃 (にしむねあ) ・https://www.facebook.com/muneaki.nishimura 職業 セキュリティエンジニア ・セキュア開発のコンサルティング ・Android端末~アプリの開発支援

4

求む!Geckoの勉強会を開いてくれる人

• Geckoの中身は複雑で素人には分からないことだらけ

• ウェブでは情報が見つからなかったり、あっても古くて今の仕様と違ったり

• でも、自分で勉強会を開くのはなんだか大変そう

• みんなで一緒にGeckoの中身を調べて きゃっきゃうふふ しませんか?

(C) 2010 Mozilla Japan

5

なぜ、起動処理?

OSアーキテクチャの骨格が理解できるから • OSを構成するモジュールの概要や、それぞれの依存関係など

セキュリティ的に重要な機能だから • 多くの処理がroot権限で動くのでよく狙われる • Androidの場合、root化やカスタムROMの起動などに利用される

6

Firefox OSの内部構造

Firefox OS 起動の仕組みを調べてみた

7

3層構造①

Gonk

Gecko

Gaia Firefox OSの標準UIおよび標準アプリ群。 全てのソフトはHTML/JS/CSSで開発(Webアプリ)

Webアプリの実行環境。FirefoxブラウザのエンジンであるGeckoを拡張し、Webアプリからデバイスの機能を操作できるようにしたもの

OSの基本機能を担当。また、ハードウェアの差異を吸収し、デバイス上でGeckoを動作させる役割を担う

8

3層構造②

Gonk

Gecko

Gaia • 起動後スクリーンに表示されるものは全てGaia • オペレーターや端末メーカー独自の実装に差替可能

• Gaiaの使用する機能は全てGeckoが提供 • 実装の大部分はPC版のFirefoxブラウザと共通 • 改変可能だがデメリットもある

(Updateに伴うコスト、MPLによる改変コードの開示義務)

• 低水準OS + GeckoのHAL • HALは使用するハードウェアに応じて改変可能、

ただしOSの差し替えは現実的に困難

9

3層構造をもう少しだけ分解

Gonk

Gecko

Gaia

Chrome

XULRunner

Systemアプリ

その他アプリ群

Linux Kernel

Android Misc.

10

Chrome

XULRunner

Systemアプリ

その他アプリ群

Linux Kernel

Android Misc.

Gonk

• 主目的はGeckoのChromeプロセスの起動

• 中身はほぼLinux KernelとAndroid

改変や追加したコード(図中のMisc.)は100kB以下

Androidのappprocessやsurfaceflingerは使わないので systemイメージから抜いている

Androidアーキテクチャとの整合性を取るための機能を追加 ⁃ fakeperm : パーミッションチェックを全てOKでパスさせるスタブ ⁃ rilproxy : 電話アプリ以外からrildにアクセスするためのプロキシ

11

Chrome

XULRunner

Systemアプリ

その他アプリ群

Linux Kernel

Android Misc.

XULRunner

• Cross PlatformのHTML/XULパーサおよびレンダラ

FirefoxブラウザをOS毎に個別開発せず済むように開発された

Geckoレンダリングエンジンを内包

• ブラウザの画面自体もレンダリングできる

Firefoxブラウザのウィンドウ(Chrome)もXULのドキュメント

• XULRunnerには2種類ある

Firefoxブラウザの内部に組み込まれたPrivateなXULRunner

スタンドアロンアプリの開発を可能とするPublicなXULRunner

12

Chrome

XULRunner

Systemアプリ

その他アプリ群

Linux Kernel

Android Misc.

Chrome

• 簡単に言うとブラウザウィンドウのこと

FirefoxブラウザのChrome ⁃ chrome://browser/content/browser.xul ⁃ アドレスバーや戻るボタンがある ⁃ コンテンツ領域にWebページを表示する

Firefox OSのChrome ⁃ chrome://browser/content/shell.xul ⁃ 何の装飾も無い黒塗りのウィンドウ※ ⁃ iframeでWebアプリを表示する

※ v1.1はApp Manifestのchromeフィールドを定義することで、そのアプリが前面で開かれている間のみ戻るボタンなどを表示できます

13

Chrome

XULRunner

Systemアプリ

その他アプリ群

Linux Kernel

Android Misc.

Systemアプリ

• スマホとしての基本機能を提供するアプリ

ウィンドウ制御、電力管理、画面ロック、通知など

他のアプリを起動する処理も担う

• Chromeプロセス上で動作する

Chromeプロセス:Firefox OSの基幹プロセス ⁃ システムに1つだけ存在、root権限で動作

Geckoの重要な機能はChromeプロセス上で実行される ⁃ アプリのインストールや起動 ⁃ ほとんどのハードウェアを制御

14

Chrome

XULRunner

Systemアプリ

その他アプリ群

Linux Kernel

Android Misc.

その他のアプリ群

• Gaia標準のプリインストールアプリ群

カメラ、ブラウザ、カレンダー、メーラーなど

• Contentプロセス上で動作する※

Contentプロセス:権限の制限されたアプリ用のプロセス ⁃ 1アプリに付き1プロセス割り当てられる ⁃ アプリが落ちてもOSを巻き込まない

Firefoxブラウザのplugin-containerプロセスの仕組みを流用 ⁃ plugin-containerとはFlash等のプラグインを表示する専用プロセス ⁃ プラグインが落ちてもブラウザを巻き込まない

※ 現在、ブラウザアプリはChromeプロセスで動作しています (恐らくBug 761935が原因)

15

Firefox OSが起動するまでの流れ

Firefox OS 起動の仕組みを調べてみた

16

Gonk

Gecko

Gaia

起動の順序(ざっくり)

Chrome

XULRunner

Systemアプリ

その他アプリ群

Linux Kernel

Android Misc.

下から上に起動

17

Gonkの起動処理

Linux Kernel を起動

Androidのsurfaceflingerや zygoteなどは起動しない

Chromeプロセス を開始

Gecko を起動

fakeperm, rilproxyを起動

Androidのrild, vold, netd, mediaserverなどを起動

Androidのinitプロセス を開始

init.b2g.rc をロード

init.rc をロード

Firefox OSのみ

• zygote(全Androidアプリの親プロセス)の代わりにChromeプロセスを起動 ⁃ Dalvik VM(Java仮想マシン)の代わりにGeckoを起動

18

Geckoの起動処理

• Binderを初期化 • XPCOMをプリロード • 起動ロゴを表示

XULRunnerを起動 Firefox OS固有部分を初期化

• XPCOMを初期化 • プロファイルをロード • 各種サービスを初期化 • プリファレンス※を初期化 • Chrome(shell.xul)をロード

• ブラウザウィンドウを描画 • iframeを生成しホームURL

をロード

(Chrome)

Chromeを描画

※ プリファレンス:Firefoxブラウザのアドレスバーに about:config と入力すると表示されるやつです

19

Gaiaの起動処理

• CSS(Gaia-UI Building Blocksなど)をロード • OS起動ロゴを表示 • 各機能(Window Managerなど)とUIを初期化

Chromeのスタートページ(ホームURL)としてSystemアプリのindex.htmlを開く Homescreenアプリをロードして完了

20

まとめ

① Firefox OSの3層構造:Gonk, Gecko, Gaia • Gonk → Gecko → Gaiaの順に起動

② Geckoから後の起動処理はWebブラウザーの概念そのまま • ブラウザウィンドウ(Chrome)を開く • ホームURLとしてSystemアプリを開く • 全てのアプリはiframe上のコンテンツ

③ どなたかGeckoの勉強会を開いて下さい! • 今日はこれを言うために来ました

top related