Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
ラベル sc-02c の投稿を表示しています。 すべての投稿を表示
ラベル sc-02c の投稿を表示しています。 すべての投稿を表示

2013年10月8日火曜日

Xperia arc/rayとGalaxy S2/S3向けFirefox OS 1.1のビルド法を更新し、ビルド済みファイルを公開した話

はじめに

10/20(日)に東京電機大学で開催されるAndroid Bazaar and Coneference 2013 Autumnで展示するために、
安定して動作するFirefox OS端末が必要になったので、これまでビルド法を公開してきたGalaxy S2/S3、Xperia arc/ray へのビルドを試してみました。
ビルド法を公開した当時とは色々と状況が変わっているので、変更点などをメモ。
ついでにビルド済みファイルを公開。

これまでの経緯

2013年の6月に、下記の通りGalaxys S2/S3、Xperia arc/ray へのFirefox OSのビルド法を公開しました。

このビルド法は、下記の構成でソースを取得してビルドするようになっていました。
  • gaia:masterブランチの最新
  • gecko:gecko-18ブランチの最新
  • gonk:android 4.0 または cyanogenmod 9

しかし、7月以降、高解像度端末では上のままでは正しい解像度でのビルドができなくなっていました。


正しい解像度(6月頃) 正しくない解像度(7月以降)


このあたりのコミットとかこのあたりのコメントを追っていくと情報が得られますが、
gaiaでの簡易的な高解像度端末への対応を削除して、
gecko(masterとv1.1.0hdブランチ)の高解像度端末への対応度を高めていくということのようです。

Xperia arcとGalaxy S2への対応

ということで、まず、Xperia arcとGalaxy S2はビルド法を下記の構成に変更しました。
  • gaia:v1.1.0hdブランチの最新
  • gecko:v1.1.0hdブランチの最新(gecko 18.1)
  • gonk:android 4.0 または cyanogenmod 9

この2つは素直な端末なのか、トラブルは少ないです。Firefox OSのバージョンでいうと1.1ですね。

gaiaをmasterにしなかったのは、変更が頻繁すぎるため、
geckoをmasterにしなかったのは、gonkをcyanogenmod 9のままにしておきたかったからです。
(cyanogenmod 9のままgeckoをmasterにすると、WifiやSIMが使えなくなったりと、残念な感じになります)

Boot 2 JCROMの方は下記のようにしています。
  • gaia:master-jcブランチの最新
  • gecko:v1.1.0hdブランチの最新
  • gonk:android 4.0 または cyanogenmod 9

基本的には上記の方法でビルドするのですが、下記のように、端末ごとにいくつか例外があります。

Xperia rayへの対応

まず、Xperia rayではgecko v1.1.0hdでの解像度の取り扱いがうまくいっていないようなので、
geckoをgecko-18、gaiaを6月末の時点のものに固定していくつか修正を加えます。
  • gaia:masterブランチの6月末+いくつかの修正(ココ
  • gecko:gecko-18ブランチの最新
  • gonk:android 4.0 または cyanogenmod 9

Boot 2 JCROMは下記の通りです。
  • gaia:master-jcブランチの6月末+いくつかの修正(ココ
  • gecko:gecko-18ブランチの最新
  • gonk:android 4.0 または cyanogenmod 9

Galaxy S3への対応

この中では一番解像度が高い端末なのですが、Xperia ray同様、
gecko  v1.1.0hdでの解像度の取扱いがうまくいっておらず、さらに
gecko-18でも8月以降、起動が途中で止まってしまうコードが入っているようで、
gecko-18の7月末頃のコードを利用します。
  • gaia:masterブランチの6月末+いくつかの修正(ココ
  • gecko:gecko-18ブランチの7月末頃
  • gonk:android 4.0 または cyanogenmod 9

Boot 2 JCROMも同様です。
  • gaia:master-jcブランチの6月末+いくつかの修正(ココ
  • gecko:gecko-18ブランチの7月末頃
  • gonk:android 4.0 または cyanogenmod 9

ビルド済みパッケージ公開について

せっかくなので今日の時点でのビルド済みファイルをダウンロード可能にしました。
下記の各端末のページでダウンロード可能です。

なお、アップデートは無効にしてあるので、OTAアップデートは飛んできません。

これは、海外から「OTAアップデートしたらカメラが使えた!」というコメントが多くて困ったためです。
OTAアップデートすると解像度が狂ったり、こちらで修正した問題点が復活したりするのでOTAアップデートすべきではないです。
そもそも非公式端末にOTAアップデートが降ってきて適用できること自体問題だと思います。

おわりに

非公式端末へのインストールなので仕方ないのですが、特にXperia rayとGalaxy S3で
ビルド時のトラブルが多いです。

Galaxy S3の場合はgaiaとgeckoを両方masterにしてFirefox OS 1.2ベースにすると
状況は改善するようなのですが、gonkをJelly Beanベースにしなければいけないので、
作業に手を付けるのはいつになるか、わかりません。

Xperia rayについては、Firefox OS 1.2にするのは難しそうだし、このあたりが限界かも?
という気がしてきました。

というわけで、おしまい。

2013年7月1日月曜日

Boot to JCROMをGalaxy S2/S3、Xperia arc/ray向けにビルドしてみた

androidsolaさんが開発されているFirefox OSベースのカスタムロム
Boot to JCROMをGalaxy S2、Galaxy S3、Xperia arc、Xperia ray向けにビルドしてみました。

ビルド法はFirefox OSのビルド法に近いので下記のページに追記する形でまとめました。


動作している様子は下記の写真のようになります。

SDカード領域にテーマ画像を配置することで、
ロック画面、壁紙、通知画面、ステータスバーに画像が貼れていることがわかります。

テーマのサンプルはBoot to JCROM公式ページのこちらから入手できます。

左からGalaxy S2、Galaxy S3、Xperia ray、Xperia arc


開発者向け端末が出たばかりという時期でカスタムロム開発を始める
androidsolaさんのスピード感が素晴らしいと思います。

2013年6月10日月曜日

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 へと続きます。

こちらもどうぞ


2012年7月19日木曜日

docomo Galaxy S II (SC-02C) 用 Cyanogenmod 9 のビルド方法


docomo Galaxy S II (SC-02C)用に Cyanogenmod9 をビルドしてみました。

海外版 Galaxy S II 用の Cyanogenmod 9 はこちらからダウンロードできます。
META-INF/com/google/android/updater-script
の先頭付近にて SC-02C に対する許可を与えればインストールができ、
ほとんどの機能を使うことができます。

しかし、docomo の端末に最適化されたものではないため、

  • 電池のもちが悪い
  • センサが正しくない値を返す
などの問題があります。

そこで、docomo の端末で快適に使えるようビルドしてみました。
ここではそのビルド方法をまとめます。

変更したのは主に下記の通りです

  • docomo端末用の変更を kernel に追加する(こちらで入手できる2.6系のカーネルを参考に)
  • センサのライブラリを日本の端末のものを利用するよう変更
  • その他(APN設定、フォント、エリアメール対応など)


なお、この方法では端末内のバイナリを利用するため、
ビルド済みのものを配布することはしません。

端末には、最新の公式android 4.0.3 (IML74K.OMLPG) をあらかじめ入れておきます。
また、64bit の Ubuntu を、androidをビルドできるよう設定しておきます(本ページでは省略)。
adb コマンドが使える必要もあります。
さらに、Ubuntu からadbコマンドで端末の中身を取り出せるよう、

/etc/udev/rules.d/51-android.rules に
SUBSYSTEM=="usb", ATTRS{idVendor}=="04e8:685e", SYMLINK+="android_adb", MODE="0666" GROUP="plugdev"

と記述しておきます。

以上の準備のもと、以下の様に作業を進めます。
mkdir ~/cm9work
cd ~/cm9work
repo init -u git://github.com/CyanogenMod/android.git -b ics
ここで
gedit .repo/local_manifest.xml
を起動し、下記の内容を記述して保存します。

<?xml version="1.0" encoding="UTF-8"?>
<manifest>
  <remote  name="bitbucket" fetch="https://bitbucket.org/" />
  <project name="CyanogenMod/android_packages_apps_SamsungServiceMode" path="packages/apps/SamsungServiceMode" remote="github" />
  <project name="teamhacksung/buildscripts" path="buildscripts" remote="github" />
  <project name="neuralassembly/cm9_device_samsung_sc02c" path="device/samsung/sc02c" remote="bitbucket" revision="master" />
  <project name="neuralassembly/cm9_kernel_samsung_smdk4210jp" path="kernel/samsung/smdk4210jp" remote="bitbucket" revision="master" />
</manifest>

そして、下記の様にダウンロードを開始します。

repo sync -j16

ダウンロードが終了したら、下記の様にproprietaryなバイナリの準備を行います。
海外端末のバイナリは NIGHTLY ビルドから、  SC-02C のバイナリは adb により端末から吸い出します。
あらかじめ Ubuntu に IML74K.OMLPG な端末を接続し、adb で認識できるようにしてから
作業を進めます。

mkdir device/samsung/sc02c/cm9
cd device/samsung/sc02c/cm9
wget http://download.cyanogenmod.com/get/jenkins/4513/cm-9-20120717-NIGHTLY-galaxys2.zip
(その時点で入手できる最新のものを利用するのが良いと思います)
unzip cm-9-20120717-NIGHTLY-galaxys2.zip
cd ..
./extract-files.sh

しばらく待つとバイナリの準備は完了します。

そこで、下記の様にビルドを開始します。

cd ~/cm9work
./buildscripts/samsung/build.sh  sc02c

ビルド完了したときにできるファイルは
out/target/product/sc02c/cm-9-xxxxxxxx-UNOFFICIAL-sc02c.zip
です。これを clockworkmod リカバリで焼くことになるので、
あらかじめ内部SDカード領域にコピーしておきます。
また、gapps-ics-20120429-signed.zip もどこかで見つけて
内部SDカード領域にコピーしておきます。

ここから先は実際に焼く作業になります。失敗した場合の
戻し方を予め調べてから実行してください。

まず、 Up2_SU_CWM_KJ4-2.tar をどこかで見つけ、
Odin v.3.04 でPDAにセットして焼きます。
(ここでは clockworkmod リカバリを起動したいだけなので、
色々なやり方があると思います)

この時点で clockworkmod リカバリ しか起動しなくなるので、
Volume Up + HOME + 電源長押しで clockworkmod リカバリ を起動します。
このリカバリの決定ボタンはホームボタンであることに注意します。

wipe data/factory reset
install zip from sdcard→chooze zip from internal sdcard

の順で実行し、cm-9-xxxxxxxx-UNOFFICIAL-sc02c.zip を
インストールすると、リカバリも含めて新しくなります。
ここで下記のように一旦リカバリを終了します。

Go Back→power off

そして再びVolume Up + HOME + 電源長押しで最新の clockworkmod リカバリを起動します。
この最新のリカバリで下記の順で選択し、もう一度同じファイルを焼きます。
今度は決定は電源ボタンなので注意。

install zip from sdcard→chooze zip from internal sdcard

終わったら gapps-ics-20120429-signed.zip も焼きます。

終わったら
Go Back→reboot system now
で再起動、でおしまいです。

まあ本当は JCROM が使える docomo 端末を増やしたかった
だけなんですけどね。


[備考]
海外モデルの場合、
https://github.com/CyanogenMod/android_kernel_samsung_smdk4210
を kernel/samsung/smdk4210 に、
https://github.com/CyanogenMod/android_device_samsung_galaxys2
を device/samsung/galaxys2
にセットし、ターゲットは galaxys2 を指定します。