はじめに
前回、docomo Galaxy S2 (SC-02C) にFirefox OSをビルドし、感覚をつかみました。これに基づいて Galaxy S3 (SC-06D) にFirefox OSをビルドしてみます。
Galaxy S2は(海外版とは言え)公式にサポートされている端末でしたが、
Galaxy S3はそうではありません。そこで問題となるのが、ハードウェア絡みのドライバを
どう用意するかです。
mozilla-b2g / b2g-manifestのリポジトリを見ると、公式ではlinaroやcodeauroraなどのコードを利用していますが、
それと同じことをし、さらにdevice以下のmkファイルを自分で用意するのは私の手に負えないと考え、
既に動作が確認されている CyanogenMod9 からハードウェア依存のコードを全て持ってくるようにしました。
CyanogenMod9は依存関係が深いので、framework/base や system/core まで
CyanogenMod9のものを持ってくる羽目になりましたが、結果的に動いたのでよしとします。
(詳細はneuralassembly / b2g-manifest / sc06d.xml を見て下さい)
動画はこちら
というわけで、ビルド法は以下の通りです。Galaxy S2のときと同様、
solaさんによる「Keon と Peak が届かないので、Nexus S を Firefox OS 端末にしてみた」
によるビルド法を踏襲したものになっています。
また、ビルド環境の構築にも上記のsolaさんのページを参考にしてみてください。
なお、通常のFirefox OSと、solaさんによるカスタムロムであるBoot to JCROMの
両方のビルド法を以下で解説します。
ソースの準備
ソースを下記のようにダウンロードします(環境によりますが30分~1時間くらいかかります)。$ mkdir ~/b2g_work $ cd ~/b2g_work $ export B2G_WORK=`pwd` $ git clone https://github.com/neuralassembly/B2JC.git B2G $ cd B2G
通常のFirefox OSのビルドの際は以下のコマンドを、
$ ./config.sh sc06d
solaさんによるBoot to JCROMのビルドの際は以下のコマンドを実行します。
$ ./config.sh sc06d-b2jc
次に、Galaxy S3 の /system ディレクトリのダンプを
ソースツリーに配置するのですが、ここではHomuHomu さんらが開発されている一撃ツールと
ビルド済みCyanogenMod9のファイルを用いることにします。
$ mkdir $B2G_WORK/B2G/backup-sc06d $ cd $B2G_WORK/B2G/backup-sc06d $ wget http://dl.dropbox.com/u/14219187/make_JP_CompleteROM_SC06D.zip $ unzip make_JP_CompleteROM_SC06D.zip (http://goo.im/devs/cm/d2att/nightly/ から cm-9-20120916-NIGHTLY-d2att.zip をダウンロードしてここに配置) $ unzip cm-9-20120916-NIGHTLY-d2att.zip $ cd $B2G_WORK/B2G/device/samsung/sc06d/ $ ./extract-files.sh
以上の操作により、以下が作成されます。
$B2G_WORK/B2G/vendor/samsung/sc06d/
高解像度対応、日本語対応など
この章で行う操作はsolaさんによるものを流用させて頂いております。また、この章の内容は、通常のFirefox OSをビルドするときのみ行ってください。
Boot to JCROMをビルドする場合は次の「いくつかの修正」へ進んでください。
下記のように日本語辞書を用意します。
$ cd $B2G_WORK (naist-jdic-0.4.3.tar.gzを http://sourceforge.jp/projects/naist-jdic/releases/ からダウンロードして配置) $ tar zxvf naist-jdic-0.4.3.tar.gz $ cd $B2G_WORK/B2G/gaia/apps/keyboard/js/imes/jskanji/dict $ mkdir ipadic $ cp $B2G_WORK/naist-jdic-0.4.3/naist-jdic.dic ipadic/ $ make json (この命令は環境変数LANGの値によっては失敗します。ja_JP.utf8 にセットすればよいです)
いくつかの修正
画面ON時にHOMEボタン裏のLEDが光りっぱなしになるのが気になるので以下で修正します。$ cd $B2G_WORK/B2G/gecko/hal/gonk/ $ wget https://dl.dropboxusercontent.com/u/69652790/patch/b2g-GonkHal.patch $ patch < b2g-GonkHal.patch
環境変数設定
次に、環境変数設定を行います。$ export LOCALE_BASEDIR=$B2G_WORK/B2G/multilocale/gaia-l10n $ export LOCALES_FILE=$B2G_WORK/B2G/multilocale/languages-japan.json $ export PATH="$PATH:$B2G_WORK/B2G/multilocale/compare-locales/scripts" $ export PYTHONPATH="$B2G_WORK/B2G/multilocale/compare-locales/lib" $ export MOZILLA_OFFICIAL=1 $ export GAIA_DEV_PIXELS_PER_PX=2
kernel のビルド
ここは自分でkernelをビルドしたい人のみ行って下さい。既に日本版のkernelを配置済みなので飛ばしても問題ないです。
kernelはsakuramilkさんの公開されているSC-06D用kernelを使わせていただきます。
$ cd $B2G_WORK $ git clone https://github.com/sakuramilk/sc06d_kernel_ics.git -b android-linux-3.0-master $ cd sc06d_kernel_ics $ wget https://dl.dropboxusercontent.com/u/69652790/patch/sc06d_kernel_makefile.patch $ patch < sc06d_kernel_makefile.patch $ export ARCH=arm $ export CROSS_COMPILE=$B2G_WORK/B2G/prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin/arm-eabi- $ make sc06d_aosp_defconfig $ make -j16 $ cp `find drivers -name "*.ko" ` $B2G_WORK/B2G/device/samsung/sc06d/ $ cp arch/arm/boot/zImage $B2G_WORK/B2G/device/samsung/sc06d/kernel
ビルドと書き込み
以下のようにビルドを行います。$ cd $B2G_WORK/B2G $ ./build.sh otapackage
ビルドが終わると、
out/target/product/sc06d/full_sc06d-ota-eng.username.zip
ができていますので、これをCWM recoveryで書き込んでください。
heimdallでの書き込みには私は成功していません。
(heimdall detect での検出には成功するが、書き込みできない)
ビルド済みパッケージ
- Firefox OS 1.1: full_sc06d-ota-eng.neuralassembly_fxos1.1_20131007.zip
- Boot to JCROM: full_sc06d-ota-eng.neuralassembly_b2jcrom_20131007.zip
できることとできないこと
下記のような感じです。Wifiが使えるので、それなりに遊べます。アップデートの通知が来ますが、アップデートしないでください。通話 | × | - |
3G通信 | × | - |
Wifi | ○ | - |
SDカード | ○ | 内蔵メモリではなく、外付けのSDカードを使用 |
カメラ | × | アプリ起動しないです |
音楽再生 | ○ | - |
動画再生 | ○ | - |
そういえば、端末をつないでからadbで接続できるようになるまで、1~2分待たされます。なぜ?
技術的なこと&ハマったこと
Galaxy S2でotapackageを作るために必要な変更は前頁にて紹介しましたが、
ここではさらに以下を追加しました。
ramdisk のアドレスをdeviceディレクトリの各端末のmkファイルで指定できるようにしています。
(CyanogenMod 9由来)
Galaxy S3 でFirefox OSを動かすにあたり、まず必要なことはkernelを正常に動作させることです。
kernelが起動して起動スクリプトが実行されれば、次のステップであるgaiaが起動しなくても、
adb shellで端末の中身を見ることができるので、問題を発見しやすくなります。
(ただしこの際、画面は真っ黒なまま)
次に、gaiaの起動ですが、Galaxy S2の起動法に従えば、以下の手順で起動プロセスが進みます。
(1) init.b2g.rc のインポート
(2) /system/b2g/b2g などに実行パーミッションを与える
(3) check-sysimage.shを実行し、OSがandroidかFirefox OSかを判定する
(4) 判定結果に基づき、 servicemanager-g というサービスを起動する
(5) /system/bin/b2g.sh が起動される
(6) /system/b2g/b2g が実行される
(2)の /system/b2g/b2g に実行パーミッションを与えるのが曲者で、
この時点で/system パーティションが読み書きできる状態でなければ
実行権限が与えられず、(6)の起動に失敗します。これに気づくまで数日かかりました。
また、実行パーミッションをうまく与えても、数回に一回しか起動しない、という
状態になりました。これは起動プロセスのタイミングの問題だろうと考え、
上の、やや回りくどい起動プロセスを下記のように簡略化しました。
(init.b2g.rcやcheck-sysimage.shは残してありますが、実行されていない)
これにより、確実に起動するようになりました。
(1) /system/b2g/b2g などに実行パーミッションを与える
(2) servicemanager-g というサービスを起動する
(3) /system/bin/b2g.sh が起動される
(4) /system/b2g/b2g が実行される
使ってみた感想など
Galaxy S2とGalaxy S3とでは、その性能差からS3の方が快適だろうと予想していたのですが、
必ずしもそうではありませんでした。S3の解像度(720x1280)はS2の解像度(480×800)より
高いのですが、そのためにブラウザなどの文字表示が小さくなり、またタッチに反応する
エリアが狭くなってしまっていることが何度もありました(反応するまで何度もタッチする)。
また、画面が大きいせいもあるのか、もっさり感を感じる場面も多くありました。
必ずしもそうではありませんでした。S3の解像度(720x1280)はS2の解像度(480×800)より
高いのですが、そのためにブラウザなどの文字表示が小さくなり、またタッチに反応する
エリアが狭くなってしまっていることが何度もありました(反応するまで何度もタッチする)。
また、画面が大きいせいもあるのか、もっさり感を感じる場面も多くありました。
また、Firefox OSとandroidとを比較した場合(比較してはいけないのでしょうが)、
androidでは快適に見られていた動画がFirefox OSではカクカクになるなど、
ネイティブまで触れるandroidと、HTML5メインのFirefox OSの差を感じさせられました。
もちろん、これらは自分でビルドした端末での評価なので、
公式のKEONやPEAKでは異なるのかもしれません。
「ネイティブ vs HTML5」という図式を見ると、Java1.1~Java2の頃の「C++ vs Java」
のどちらが速いかという論争を思い出してしまいます。
当時は「(ベンチマークの内容によっては)JavaはC++よりも高速」なんてよく言われてましたね。
もちろん、これらは自分でビルドした端末での評価なので、
公式のKEONやPEAKでは異なるのかもしれません。
「ネイティブ vs HTML5」という図式を見ると、Java1.1~Java2の頃の「C++ vs Java」
のどちらが速いかという論争を思い出してしまいます。
当時は「(ベンチマークの内容によっては)JavaはC++よりも高速」なんてよく言われてましたね。
結局Javaは「クライアントサイドでは遅い」というイメージを今でも払拭できていないと私は思いますが、
HTML5はどうなるか、気になるところです。
おしまい
日本語化や高解像度の設定、odapackageの作成などにはsolaさんいよる変更を、
プロプライエタリファイル周りではHomuHomuさんの一撃ツールを、
kernelはsakuramilkさんのものを
使わせて頂きました。
皆さんに感謝です。
Galaxy S2とGalaxy S3とでドッキング
こちらもどうぞ
- docomo Galaxy S2 (SC-02C) 向けにFirefox OSをビルドしてみた
- Xperia arcとXperia ray向けにFirefox OSをビルドしてみた
- Boot to JCROMをGalaxy S2/S3、Xperia arc/ray向けにビルドしてみた
- Firefox OSとRaspberry Piで三輪オムニホイールロボットを操作してみた
0 件のコメント:
コメントを投稿