2013年6月24日月曜日

Xperia arcとXperia ray向けにFirefox OSをビルドしてみた

はじめに

docomo Galaxy S2 (SC-02C) docomo Galaxy S3 (SC-06D) に引き続き、
Xperia arcとXperia rayに対してFirefox OSをビルドしてみました。

動画はこちら


写真はこちら
Xperia arc


Xperia ray


ビルドの前に

日本版のXperia arcとXperia rayに対して、Firefox OSを含む非公式のロムをインストールするためには
bootloader unlockをする必要があります。私はOmniusというツールを使って行いました。
arc向けの解説はこちら、ray向けの解説はこちらが参考になります。
無料のunlockツールとしてはs1toolというものがあるようなので、そちらでも良いかもしれません。

なお、経験上ですが、Xperia rayを公式の最新OSにアップデートするとbootloader unlockできなくなるように見えました。
古い公式OSに焼きなおしても状況は変わらないので、穴がふさがれる?
なお、新品のrayの白ロムを買えば問題なくbootloader unlockできました。
Xperia arcの場合どうなのかはちょっとわかりません。

このあたりは自己責任でお願いします。

というわけで、ビルド法は以下の通りです。これまでと同様、
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`

(arc用にビルドするときは)
$ export DEVICE=anzu

(ray用にビルドするときは)
$ export DEVICE=urushi

$ git clone https://github.com/neuralassembly/B2JC.git B2G
$ cd B2G

通常のFirefox OSをビルドする場合は下記を、
$ ./config.sh $DEVICE

Boot to JCROMをビルドする場合は下記を実行します。
$ ./config.sh $DEVICE-b2jc

次に、Xperia arcまたはrayの /system ディレクトリのダンプを
ソースツリーに配置するのですが、ここではビルド済みCyanogenMod9のファイルを用いることにします。

$ mkdir $B2G_WORK/B2G/backup-$DEVICE
$ cd $B2G_WORK/B2G/backup-$DEVICE

(arcの場合、http://download.cyanogenmod.com/?device=anzu から
cm-9.1.0-anzu.zip をダウンロードしてここに配置、
 rayの場合、http://download.cyanogenmod.com/?device=urushi から
cm-9.1.0-urushi.zip をダウンロードしてここに配置)

$ unzip cm-9.1.0-$DEVICE.zip
$ cd $B2G_WORK/B2G/device/semc/$DEVICE/
$ ./extract-files.sh

以上の操作により、以下が作成されます。
$B2G_WORK/B2G/vendor/semc/anzu/  (arcの場合)
$B2G_WORK/B2G/vendor/semc/urushi/  (rayの場合)

さらに、Xperia rayでは傾きセンサの向きが逆になる(海外版と日本版の違い?)ので、 以下のパッチ当てを行います(rayのみ)。

$ cd $B2G_WORK/B2G/vendor/semc/urushi/proprietary/etc/
$ wget https://dl.dropboxusercontent.com/u/69652790/patch/b2g-urushi-sensors-conf.patch
$ patch < b2g-urushi-sensors-conf.patch

高解像度対応、日本語対応など

この章で行う操作は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 にセットすればよいです)

いくつかの修正

Xperia arcとrayに固有な問題の修正を行います。

電池残量や充電状況の取得に失敗する点、
画面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

また、Xperia arcのみ、下記でOTAアップデートを無効にします。
Xperia rayでは既にこのパッチは適用済みなので不要です。
$ cd $B2G_WORK/B2G/gaia/apps/system/js/
$ wget https://dl.dropboxusercontent.com/u/69652790/patch/b2g-update_manager.patch
$ patch < b2g-update_manager.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はCyanogenMod9のkernelを用います。

$ cd $B2G_WORK
$ git clone https://github.com/CyanogenMod/semc-kernel-msm7x30 -b ics
$ cd semc-kernel-msm7x30

$ export ARCH=arm
$ export CROSS_COMPILE=$B2G_WORK/B2G/prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin/arm-eabi-

$ make cyanogen_$DEVICE_defconfig
$ make -j16
$ cp `find drivers net -name "*.ko"` $B2G_WORK/B2G/device/semc/$DEVICE/
$ cp arch/arm/boot/zImage $B2G_WORK/B2G/device/semc/$DEVICE/kernel

ビルドと書き込み

以下のようにビルドを行います。

$ cd $B2G_WORK/B2G
$ ./build.sh otapackage

ビルドが終わると、
arcの場合  out/target/product/anzu/full_anzu-ota-eng.username.zip
rayの場合  out/target/product/urushi/full_urushi-ota-eng.username.zip
ができていますので、これを焼きます。

ダウンロード

ビルド済みパッケージはこちら

Xperia arc


Xperia ray



書き込み


あらかじめ、端末にfastbootとadbで接続できるよう、ドライバをインストールしておいてください。
まず、ビルドしてできたzipファイルをSDカードに配置しておきます。
また、あらかじめzipファイルからboot.imgを取り出しておき、PC上に置いておきます。 

次に、端末の電源を切り、arcの場合はメニューを押しながら、
rayの場合はボリュームアップキーを押しながらPCのUSBポートに接続します。
fastbootモードに入り、arcはUSBポートの横のLEDが、rayはホームボタンの周囲が
青く光るはずです。 そこで

$ fastboot flash boot boot.img

を実行し、boot.imgを焼きます。次に、以下のコマンドで再起動します。

$ fastboot reboot

Free Xperia Projectのロゴが見えている状態で、arcはメニューボタンを連打、
rayはボリュームダウンキーを連打します。 どちらも、成功するとホームキー周囲のLEDが点灯し、
CWM recoveryに入ります。

 CWM recoveryにて、wipe data/factory reset を実行後、
install zip from sdcardから、作成したzipファイルを焼いてください。

できることとできないこと

下記のような感じです。ほぼグローバル端末と変わらないからでしょうか、通話と3Gが使えます。
アップデートの通知が来ますが、アップデートしないでください。

arcもrayも解像度は480×854なのですが、これくらいの画面サイズが
Firefox OSには適しているようで、結構快適です。

あとはカメラをなんとかしたいですね。

通話-
3G通信-
Wifi-
SDカード-
カメラ×アプリ起動しないです
音楽再生-
動画再生-


おしまい

日本語化や高解像度の設定、odapackageの作成などにはsolaさんによる変更を
使わせて頂きました。感謝です。

Xperia arcとXperia rayでドッキング


こちらもどうぞ


Link to xda developers

このページを元にした議論やビルド成果へのリンク

Discussions and binaries based on this page are available in the following URLs.
Please note that these threads are not offered by me. My account in XDA is neuralassembly.

Many people are reporting that they applied OTA update, but it should not be applied to your device
because this update is for another device (maybe for unagi), not for arc nor ray.
When you applied the OTA update, the resolution of the Firefox OS becomes wrong.
The correct resolution is shown in the pictures in this page.



2013年6月10日月曜日

docomo Galaxy S3 (SC-06D) 向けにFirefox OSをビルドしてみた

はじめに

前回、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 での検出には成功するが、書き込みできない)

ビルド済みパッケージ


できることとできないこと

下記のような感じです。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)より
高いのですが、そのためにブラウザなどの文字表示が小さくなり、またタッチに反応する
エリアが狭くなってしまっていることが何度もありました(反応するまで何度もタッチする)。
また、画面が大きいせいもあるのか、もっさり感を感じる場面も多くありました。

また、Firefox OSとandroidとを比較した場合(比較してはいけないのでしょうが)、
androidでは快適に見られていた動画がFirefox OSではカクカクになるなど、
ネイティブまで触れるandroidと、HTML5メインのFirefox OSの差を感じさせられました。

もちろん、これらは自分でビルドした端末での評価なので、
公式のKEONやPEAKでは異なるのかもしれません。

「ネイティブ vs HTML5」という図式を見ると、Java1.1~Java2の頃の「C++ vs Java」
のどちらが速いかという論争を思い出してしまいます。
当時は「(ベンチマークの内容によっては)JavaはC++よりも高速」なんてよく言われてましたね。

結局Javaは「クライアントサイドでは遅い」というイメージを今でも払拭できていないと私は思いますが、
HTML5はどうなるか、気になるところです。

おしまい

日本語化や高解像度の設定、odapackageの作成などにはsolaさんいよる変更を、
プロプライエタリファイル周りではHomuHomuさんの一撃ツールを、
kernelはsakuramilkさんのものを
使わせて頂きました。

docomo Galaxy S2 (SC-02C) 向けにFirefox OSをビルドしてみた

はじめに

solaさんによる「Keon と Peak が届かないので、Nexus S を Firefox OS 端末にしてみた
から始まるFirefox OSについての連続投稿を見て、自分でも何かビルドしてみようと思い立ちました。

Firefox OSはandroid 4.0 (ICS)ベースであり、ICSが動く端末ならばFirefox OSを載せることは
技術的には可能、ということなので、手持ちのGalaxy S2とGalaxy S3に載せることを目標にします。
どちらの端末にもCyanogenMod 9 (ICSベースのカスタムロム) をビルドして
載せたことがあるので、多分なんとかなるだろう、との予測からです。

なお、「Firefox OS ビルドの必要条件」にあるように、Galaxy S2は優先度は低いとはいえ
公式にサポートされている端末なので、これでビルドの手順を把握してから
Galaxy S3に進むという手順を取ります。

Galaxy S2は去年9月にもビルドしたことがあって、その時はまだ完成度が低かったものが
どれくらい変化したか見たい、というのもあります。

目標

ビルドするにあたって、目標にしたのは下記の2点です。
  • kernelは自分でビルドしたものを用いる
  • ビルド用PCと端末に焼くPCとを別にしたい
一つ目のkernelについてですが、海外版と日本版のGalaxy S2ではバードウェア構成が
若干異なるので、日本版に対応したkernelをビルドして載せないと、
電池持ちが悪くなるなどの問題が起こるだろう、との判断からです。

また、二つ目ですが、Galaxy S2はFirefox OSのgaiaのインストールにadb接続を用います。
そのため、ビルド用PCだけではなく、端末に焼くPCにも
gaiaのソース一式が必要なので、取扱いがちょっと面倒でした。
この部分にはsolaさんによるodapackageの対応などを活用させて頂き、
CWM recoveryで焼けるzipファイルを作成するようにしています。
(odapackageとCWM recoveryによるインストールはGalaxy S3では必須になります)

手順は以下の通りです。
なお、ビルドのための環境構築はsolaさんによる
Keon と Peak が届かないので、Nexus S を Firefox OS 端末にしてみた
を参考にしてみてください。

なお、通常の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 sc02c

Boot to JCROMをダウンロードする場合は以下のコマンドを実行します。
$ ./config.sh sc02c-b2jc

次に、Galaxy S2 (SC-02C)の /system ディレクトリのダンプを
ソースツリーに配置します。

$ mkdir -p $B2G_WORK/B2G/backup-sc02c/system
$ cd $B2G_WORK/B2G/backup-sc02c/system
(端末がつながっていれば)
$ adb pull /system/. .

もし端末がビルド用のPCにつながっていない場合、あらかじめsystemを
ダンプしておき、何らかの方法でビルド用のマシンの
$B2G_WORK/B2G/backup-sc02c/system
に配置してください。できたら、以下のように/systemから抜き出したファイルをソースツリー上に配置します。

$ cd $B2G_WORK/B2G/device/samsung/sc02c/
$ ./extract-files.sh

この操作により、下記のディレクトリにプロプライエタリファイルなどが配置されます。
$B2G_WORK/B2G/vendor/samsung/sc02c/
$B2G_WORK/B2G/vendor/samsung/sc02c-common/

高解像度対応、日本語対応など

この章で行う操作は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

また、下記でOTAアップデートを無効にします。
$ cd $B2G_WORK/B2G/gaia/apps/system/js/
$ wget https://dl.dropboxusercontent.com/u/69652790/patch/b2g-update_manager.patch
$ patch < b2g-update_manager.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を配置済みなので飛ばしても問題ないです。

http://opensource.samsung.com/ からMobile→Mobile Phoneと辿り、
SC-02C_ICS_Opensource_Update1.zipを $B2G_WORKにダウンロードしておきます。

$ cd $B2G_WORK
$ unzip SC-02C_ICS_Opensource_Update1.zip
$ mkdir kernel
$ cd kernel
$ tar zxf ../Kernel.tar.gz

$ wget https://dl.dropboxusercontent.com/u/69652790/patch/b2g_jpn_ntt_defconfig -O arch/arm/configs/b2g_jpn_ntt_defconfig
$ git clone https://github.com/neuralassembly/initramfs-sc02c-b2g.git
$ rm -rf initramfs-sc02c-b2g/.git
$ rm -f initramfs-sc02c-b2g/README.md
 (initramfs-sc02c-b2gディレクトリがそのままrootfsになるので、
 不要なファイルを削除します。残しておいても影響ないので、
 気になる方は削除しないでもよいです)

$ export ARCH=arm
$ export CROSS_COMPILE=$B2G_WORK/B2G/prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin/arm-eabi-

$ make b2g_jpn_ntt_defconfig
$ make -j16

$ cp `find drivers -name "*.ko"` initramfs-sc02c-b2g/lib/modules/

$ make -j16

$ cp `find drivers -name "*.ko"` $B2G_WORK/B2G/device/samsung/sc02c/
$ cp arch/arm/boot/zImage $B2G_WORK/B2G/device/samsung/sc02c/kernel

ビルドと書き込み

以下のようにビルドを行います。

$ cd $B2G_WORK/B2G
$ ./build.sh otapackage

ビルドが終わると、
 out/target/product/sc02c/full_sc02c-ota-eng.username.zip
ができていますので、これをCWM recoveryで書き込んでください。

heimdallで焼きたい方は
 out/target/product/sc02c/ にある kernel と system.img を
heimdall flash --kernel kernel --factoryfs system.img
で焼いてもOKです。ただし、この場合heimdallのバージョンは1.3.1を用いてください。
1.3.2を用いると、system.img を焼く際に失敗します。

ビルド済みパッケージ

できることとできないこと

下記のような感じです。3GとWifiが使えるので、それなりに遊べます。アップデートの通知が来ますが、アップデートしないでください。

通話×-
3G通信docomo SIMでmopera.netに接続
Wifi-
SDカード内蔵メモリが使われる
カメラ×カメラアプリを起動して放っておくと数分間隔で絵は撮れてるので、努力次第でなんとかなるかも?
音楽再生-
動画再生R, G, B の各成分の画像が縦にずれて表示される


技術的なこと

少し細かな話ですが、「目標」で述べた2点について少し補足します。

kernelですが、Galaxy S2ではkernel (zImage) をそのままboot.imgにコピーして用います。
その際、rootfs は initramfs に配置します。
また、kernelをビルドするためのコンパイラはarm-eabi-4.4.3のものにしましたが、
これを用いないと、起動しないkernelができたり、insmodで読み込めない
カーネルモジュールができたりしました(よくあることのようです)。

また、otapackageの作成ですが、関連するコミットやリポジトリへのリンクを貼っておきます。
<solaさんによるもの>
sola-dolphin1 / B2JC / Supports build otapackage.
sola-dolphin1 / platform_build / Supports build otapackage.
sola-dolphin1 / platform_external_genext2fs
sola-dolphin1 / platform_external_e2fsprogs

<私による追加>
neuralassembly / platform_build / add support for BOARD_CUSTOM_BOOTIMG_MK
  例えば「kernelをそのままコピーしてboot.imgとする」というような指定を
 deviceディレクトリの端末毎のmkファイルで行えるようにした (CyanogenMod 9 由来)
neuralassembly / platform_build / skip common.CheckSize when creating otapackage
 こちらはエラー回避のため

ということで、公式にサポート端末である Galaxy S2 によって
ビルド法をある程度理解できたので、次回の Galaxy S3 へと続きます。

こちらもどうぞ