2015年12月のCM12.1リリース

2015年12月のCM12.1リリース

16:50 0
12月分のCM12.1と、日本語訳を取り込んだCM13.0を更新しました。

Euphoria-OSとResurrection-Remixについては、先月以降更新がなくなってしまったので、尻切れですが先月分が最終ビルドになります。

BlissPopは多少更新がありましたが、ビルドしている暇がなかったので、新年に持ち越しです。

私がCyanogenModを好んで選ぶ理由の一つがサポートの信頼感ですね。コミュニティやメンテナがはっきりしないROMは開発者の気分でディスコンになりやすいので、老舗の安定感は安心できます。

更新履歴は各サポートページから確認下さい。

2015年12月のCM13.0リリース

23:08 3

クリスマスには少し遅くなりましたが、CM13.0の12月分を更新しました。

さすがにTXのストックカーネル(とストックバイナリ)も時代遅れになって、Android6.0で加わった変更に追随するのが大変になってきました。Android側のソースにも色々と手を加えてWi-Fiと内蔵ストレージ、SDカードを有効化したので、だいぶ常用できるようになったと思います。

残った不具合はカメラとFMですが、カメラはまだしばらく時間がかかりそうです。少なくともXperiaのCMメンテナが苦戦しているうちは難しいでしょう。FMはCM13.0の開発が進めば自ずと使えるようになると思います。

年末までには、CM12.1をはじめ他のROMもビルドして公開します。

詳しい更新履歴はCM13.0のサポートページで確認してください。

ブートローダーがロックされた端末向けのカスタムROMのビルド方法解説

16:55 9

先日よりコメント欄で、ブートローダーがロックされた端末向けのカスタムROMの作り方についてやり取りをしていたのですが、出来上がったノウハウを共有して広めるのも良いかなと思い、ビルド手順を分かりやすく解説することにしました。


おおまかな流れ

  1. ビルドしたいROMのソースを取得
  2. ビルドしたいROM向けのデバイスツリーを用意
  3. ビルド対象の端末のストックカーネルソースを取得
  4. ビルドしたいROMのソースツリーにストックカーネルソースを適切に配置
  5. デバイスツリーを編集してストックカーネルソースとdefconfigを使うようにする
  6. デバイスツリーを編集してストックカーネルが対応しない機能を削るために、フラグを追加、削除
  7. ストックカーネルを使う際に問題が起こるdisplay HAL、media HALあたりを編集
  8. その他、ストックカーネル向けに変更した方が良い部分を適宜修正(特にSELinuxの動作モードについてはsepolicyなりinitなりを編集してpermissiveかdisabledにする)
  9. ビルドが成功するまで、何度もトライアンドエラーでエラー箇所を修正
  10. ビルドが成功したら、出来上がったROMとramdiskを取り出す
  11. hijack-ramdisk内のシェルスクリプトを対象端末向けに調整して、出来上がったramdiskも中に入れる
  12. 出来上がったROMとhijack-ramdiskを実機に導入して、機能的なバグがあればデバイスツリーを修正して再ビルド

実践

上記の流れに沿って実際にブートローダーがロックされた端末向けに作業してみます。
例としてhayabusa(GX)を使っても良いのですが、せっかく一から書き起こすので新規にhuashan(SP)向けにCM12.1をビルドしてみます。

*ここでは標準的なROMのビルド環境は全て整っている前提で話を進めます

1. CM12.1のソースを用意

repo init -u https://github.com/CyanogenMod/android.git -b cm-12.1

repo sync -j16

2. huashanのデバイスツリーを用意

. build/envsetup.sh

breakfast huashan

huashanのデバイスツリーとCMのカーネルソースがダウンロードされます。

デバイスツリーを用意したら、実機をつないでプロプライエタリなファイルを取り出すのですが、ここでは便宜上、TheMuppetsから拝借します。

svn checkout https://github.com/TheMuppets/proprietary_vendor_sony/trunk/huashan

ワーキングディレクトリにベンダーファイルを含んだ"huashan"というフォルダが作られます。

3. huashanのストックカーネルソースを入手

huashanのストックカーネルソースをSony Developer World の Xperia open source archivesで手に入れます。

huashanの最終ビルドは12.1.A.1.207なので、それ用を使いましょう。

ソースは圧縮されているので適当なアーカイバで解凍して、中のkernelフォルダを取り出します。
"kernel"では分かりにくいので、仮に"viskan"と名前を変更します。
(huashanのプラットフォームはviskanというそうです。blueとGPU以外同じSoCで互換性も高いのにわざわざ分けられているのですね。)

4. デバイスツリー、ベンダーファイル、カーネルソースを配置

ストックカーネルソースとベンダーファイルを用意したら、CMのソースツリーが以下の形になるように配置して下さい。

CM12.1-huashan
├── abi
├── android
├── art
├── bionic
├── bootable
├── build
├── cts
├── dalvik
├── developers
├── development
├── device
├── docs
├── external
├── frameworks
├── hardware
├── libcore
├── libnativehelper
├── ndk
├── packages
├── pdk
├── prebuilts
├── sdk
├── system
├── tools
├── kernel
│   └── sony
│       ├── msm8960t
│       └── viskan
├── vendor
│   ├── cm
│   ├── cmsdk
│   └── sony
│       └── huashan
└── Makefile

5. デバイスツリーをストックカーネル向けに編集

ここからは、huashanのデバイスツリーをストックカーネル向けに編集します。

使用するカーネルソースとdefconfigの場所を変更します。

device/sony/huashan/BoardConfig.mk

# Kernel properties
TARGET_KERNEL_SOURCE := kernel/sony/viskan
TARGET_KERNEL_CONFIG := viskan_huashan_defconfig

メディア、ディスプレイ、オーディオHALはcaf版を使うので、そちらも追記

device/sony/huashan/BoardConfig.mk

# QCOM/CAF hardware
COMMON_GLOBAL_CFLAGS += -DQCOM_HARDWARE
BOARD_USES_QCOM_HARDWARE := true
TARGET_QCOM_AUDIO_VARIANT := caf
TARGET_QCOM_DISPLAY_VARIANT := caf
TARGET_QCOM_MEDIA_VARIANT := caf

# QCOM enhanced A/V
TARGET_ENABLE_QC_AV_ENHANCEMENTS := true

同時にDisplay HALの不要なフラグを削除かコメントアウト

# Display HAL
USE_OPENGL_RENDERER := true
TARGET_USES_ION := true
TARGET_USES_C2D_COMPOSITION := true

#TARGET_DISPLAY_USE_RETIRE_FENCE := true
NUM_FRAMEBUFFER_SURFACE_BUFFERS := 3

6. ストックカーネルに合わせてmedia-cafとdisplay-cafを入れ替える

本来は個別にビルド時のエラー箇所を修正する必要がありますが、今回は関連箇所のコミットをリバート済みのリポジトリを使わせてもらいます。


hardware/qcom/display-caf/msm8960
hardware/qcom/media-caf/msm8960

二箇所のフォルダを入れ替える

7. その他、ストックカーネル向けの変更

huashanのストックカーネルソースはGCC4.7でビルドされていますが、CM12.1はGCC4.9でビルドされるので、それ用の変更をカーネスソースに加えます。

kernel/drivers/usb/gadget/Makefile
kernel/net/bluetooth/Makefile

KBUILD_CFLAGS += -Wno-sizeof-pointer-memaccess

Android 5.1のSELinuxの制限を緩めるために、sepolicyを編集

external/sepolicy/Android.mk

FORCE_PERMISSIVE_TO_UNCONFINED:=false

このままビルドするとzip内のカーネルが自ビルドのものになるので、適宜ストックカーネルと入れ替えるようにする。(詳しくは、そのうち今回のソースを公開するので、そちらを見てください)

8. ビルド開始

さて、これで準備が出来ました。いよいよビルドを始めます。

brunch huashan

全てが適切に編集されていればビルドが通るはずです。

まとめ

今回作成したブートローダーがロックされたXperia SP用のCM12.1のROMとSP向けのhijack-ramdiskを公開します。ただ、実機で動作確認できないので、起動しないかも知れません。

cm-12.1-20151204-UNOFFICIAL-huashan

huashan hijack-ramdisk for CM12.1

Xperia SPを持っていて試される方がいれば、結果を教えてください。

流れとしては以上のようになりますが、見れば分かるとおり、それなりに処理の内容を理解してエラーに対処できる程度の知識がないと難しいです。ただリポジトリを引っ張ってきてビルドするレベルからのステップアップには良いかと思います。

非rootでマルチユーザーを有効化する方法(失敗)

22:41 2

非rootでマルチユーザーを有効化する方法(失敗)

最近は枯れた端末の開発がメインになって新しい機種の事情に疎くなりがちなのですが、docomo版Xperia Z5シリーズを除いて、Xperiaの国内キャリアモデルはマルチユーザー機能が塞がれていると聞きます。

そもそも自分がマルチユーザー機能を使ったことがないので全く興味が無かったのですが、同じ端末上でソシャゲの複アカ運用で使うという話を聞いたときはなるほどな、と思いましたね。

マルチユーザーを有効化する手順は割とあちこちのブログでまとめられていて目新しさはありませんが、どこも大体root化が必要であると書いています。

# Multi Users
fw.max_users=3
fw.show_multiuserui=1

こんな具合にbuild.propに追記する方法ですね。

しかし、Androidのシステムプロパティを設定する方法はbuild.propの編集に限りません。
同じ事をadb shellから行うとどうなるか試してみました。

実践

私のZ3 Compactはroot化してあるので本当に非rootで同じ事ができるのか自信はありませんが、SuperSUからrootを無効化して行いました。


端末とPCをつないでコマンドプロンプトから以下を打ち込みます。

adb shell
setprop fw.max_users 3
setprop fw.show_multiuserui true

すると、ちゃんと端末の方でもマルチユーザーの設定が見えるようになりました。


解説

おそらく、shell権限で実行しているのでコマンドが通るのでしょう。同じ事を端末上のアプリからしても拒否されます。

ただ、setpropで設定する値は一時的なものなので、build.propと違って端末を再起動する度にPCから同じ操作をして設定を再表示する必要があります。もっとも、最近では再起動の頻度も減っていますから、何も出来ないよりかはマシというところですね。

今後の展望

上記と同じコマンドを発行するアプリを作って手軽に扱えるようにしようと思ったのですが、アプリの権限ではコマンドが拒否されてしまったので使い物になりませんでした。
脆弱性になるのでまず無理でしょうが、アプリにシェル権限を持たせることができれば、ずっと面白くなるのになと思います。

今後はどんどんセキュリティが厳しくなって、リテールデバイスをユーザーがカスタマイズする余地が狭まってくるでしょうから、こういった非rootでもシステムの一端に触れられるような小技を探していきたいなと思います。

非rootユーザーの方で試される方がいれば、結果を是非教えてください。

訂正

これでいけるだろうと高を括っていたのですが、コメントで報告頂いたところによると上手くいかないようですね。もしかすると、自分でも覚えていないうちにroot権限でsetpropをしていて、その形跡が残っていたのかも知れません。やはりそう易々とは遊ばせてくれないようですね。
報告頂いた方、ありがとうございました。

2015年11月のROMリリース

2015年11月のROMリリース

22:43 0
11月のROMリリースです。

CM12.1、Resurrection-Remix5.5.9、BlissPop4.0.3、Euphoria-OS1.1を11/22付のソースでビルドしました。主な変更はBlissPopに各種最適化オプションを付けた点と、RRをPermissiveに変更した点です。

CM13.0についてはいくらかのバグを修正しましたが、常用までもう少しかかりそうです。

それぞれのROMの更新履歴は、各サポートページを確認ください。
Xperia GXの/dataをSDCardパーティションへマウントする

Xperia GXの/dataをSDCardパーティションへマウントする

23:30 0
前回のエントリで、GXには古い端末ならではの悩みがあると書きました。データ領域と内蔵ストレージの領域が別のパーティションに分かれているために、データ領域に2GBしか振り分けられずAndroid 5.0以降ではすぐに空き容量低下となってしまう問題です。

解決案

システムのパーティションをマウントするための指定は、ramdisk内のfstabで行うのですが、この記述を書き換えることで/dataをUserdataではなく、SDCardへマウントしてしまうという考えです。

こうすることで、2GBしか割り振られていないUserdataではなく、11.1GBのスペースがあるSDCardパーティションを使って、その中に内蔵ストレージ領域をエミュレートさせる(=/data/mediaを作る)ことが出来るのではないかと思います。

/dev/block/platform/msm_sdcc.1/by-name/SDCard     /data             ext4        noatime,nosuid,nodev,barrier=1,data=ordered,noauto_da_alloc                               wait,check,encryptable=footer,length=-16384

もともとのUserdataパーティションは、適当な名前でマウントして、/data内の手頃なフォルダからシンボリックリンクを張るなどすれば無駄がないでしょうね。

これならば、/dataの逼迫問題とAndroid 6.0以降のVoldの変更にいっぺんに対応できるはずなので、良案と思っているのですが、実際に試すとなるとファイルのバックアップやらフォーマットが面倒ですね。簡単にCM12.1以前に戻れなくなってしまいますし。

<参考>
鈴の音情報局blog CM12.1(Android 5.1.1)を焼いたXperia GXをしばらく使ってみて・・・思いの外快適、しかし・・・

Androidのストレージ領域の取り扱いについて(Adoptable Storageとは)

23:00 2

私がAndroidの中身について触りだしたのが2012年後期モデルのXperia GXからですが、Androidのストレージ領域の扱いについて当時のモデルから今に至るまで何度か設計に変更がありました。

内蔵ストレージ

GXの頃は、内蔵ストレージ(=ユーザーが動画や音楽などを置いておく16GBやら32GBの場所=/sdcard)は、一つのeMMCチップ上で15番目のパーティションとして用意されていました。GXのパーティション構成は以下のようになっています。

Number  Start (sector)    End (sector)  Size       Code  Name

   1             256            4351   2.0 MiB     FFFF  TA

   2            4352            7423   1.5 MiB     FFFF  Boot

   3            7424           10495   1.5 MiB     FFFF  Boot2

   4           12288           53247   20.0 MiB    FFFF  Kernel

   5           53248           55295   1024.0 KiB  FFFF  TZ

   6           57344           63487   3.0 MiB     FFFF  modemst1

   7           65536           71679   3.0 MiB     FFFF  modemst2

   8           73728           79871   3.0 MiB     FFFF  fsg

   9           79872           90111   5.0 MiB     8300  ramdump

  10           90112          106495   8.0 MiB     8300  apps_log

  11          106496          139263   16.0 MiB    8300  FOTAKernel

  12          139264         2654207   1.2 GiB     8300  System

  13         2654208         3166207   250.0 MiB   8300  Cache

  14         3166208         7360511   2.0 GiB     8300  Userdata

  15         7360512        30535646   11.1 GiB    FFFF  SDCard


15番目の11.1GBでSDCardというラベルが貼ってあるものがそれですね。内蔵ストレージなのにSDカードというラベルもおかしな話ですが、初期のAndroidは内蔵ストレージ領域を持たず、外部SDカードにしか対応していなかった頃の名残です。その一つ前のUserdataが/dataとしてユーザーアプリなどの保存場所に使われるのですが、このパーティションは2GBしか割り振られていないので、Android 4.1.2の時代ならまだしも、Android 6.0のご時世でARTのoatファイルがスペースを取るようになると、すぐに空き容量が無くなります。

そういった問題を解決するためか、同じblueプラットフォームでも2013年前期に発売されたXperia SPあたりから、内蔵ストレージ用に専用のパーティションを用意することはなくなりました。
具体的には、上の表でいうところのUserdataとSDCardが統合されて、10GB以上の/data領域を確保できるようになったわけです。そして、今まで内蔵ストレージとして用意された領域(/sdcard)は、/data/media以下で扱われるようになりました。flashtoolでWipe Dataすると、内蔵ストレージも消えるのはこのためです。

言い換えると、ユーザーアプリをインストールする場所と音楽などのメディアを保存する場所が、同じ領域を共有するようになったわけですね。

ストレージの扱い

ストレージの扱いについては、かなり混迷を極めたといって良いでしょう。内蔵ストレージとSDカード用のマウントポイントも取っ散らかっていて、よくこれだけ作ったものだと思います。

/mnt/media_rw/sdcard0
/storage/sdcard0
/sdcard
/mnt/sdcard
/data/media
/storage/emulated

これらが全て同じ領域を指しているのだから面倒です。(厳密には、それぞれ役割があったり互換性のためだけにシンボリックリンクになっていたりします)

Android 6.0のAdoptable Storage

Android 6.0ではストレージのマウントを担当するVoldに大きな変更が加えられて、Adoptable Storageという概念が登場しました。

ユーザーへの利点は、外部SDカードを挿入したデバイス専用にフォーマットすることで、あたかも内蔵ストレージ(/sdcard)として利用することが出来る点です。

Xperia M4 Aquaの8GBモデルが、先の表のようなパーティション構成の結果、/data(+/data/media)領域が1.26GB程度になってしまったことでひんしゅくを買ったのは記憶に新しいですが、仮に128GBのmicroSDカードを(/data/media)としてフォーマットすれば、その分、インストールできるユーザーアプリは増えますし(/dataの使える領域が相対的に増える)、広大な領域を内蔵ストレージとして音楽などのメディアの保存に使えるわけです。

開発者への利点は、先に挙げたようなマウントポイントをすべて取り払うことができるようになったところです。Voldがダイナミックにストレージを扱うようになったので、fuseデーモンにマウントポイントを指定したり(storage_list.xml)、initプロセスで互換性のためにマウントポイントのシンボリックリンクを張る必要もなくなりました。

ただし、新しいVoldはXperia GXのような、内蔵ストレージ用にSDCardという専用のパーティションを持つようなデバイスのことは考慮していないようです。Google的にはいい加減新しい端末に乗り換えろということなのでしょう。この対応については、同じように内蔵ストレージ専用のパーティションを持つOPPO find 7用にCMのメンテナーが試行錯誤してくれています。

少々、専門的な話になったので、GXでの実用的な話は次のエントリに分けることにします。

<参考>
Adoptable Storage | Android Open Source Project

Sony cripples the ‘8GB’ Xperia M4 Aqua | Xperia Blog

Change Id7ec3ea4: vold: Support internal storage partitions | review.cyanogenmod Code Review


カーネルコマンドラインを使わずにSELinuxを静かにする方法

カーネルコマンドラインを使わずにSELinuxを静かにする方法

20:00 0
SELinuxはデバイスのセキュリティを強固にするには有用ですが、アクセスの許可/拒否ルールを正しく設定しないと起動の段階でinitプロセスが延々とループするなど問題も多いです。

Android 4.3

Android 4.3でSELinuxが導入された時は、デフォルトでPermissiveで動作するようになっていたので、アクセスルールがおかしくてもログが氾濫するだけで実害はありませんでした。

Android 4.4

Android 4.4では動作モードがEnforcingに変更され、単にアクセスログを取るだけではなく、実際にアクセスを制限するようになったので、ルール設定がおかしいと動作しない機能が出るようになりました。

例えば、Xperia GX用のCM11やCM12.1でベースバンドが読めなくなるのは、rmt_storageに正しいアクセスルールが設定されていないため、modemst1パーティションなどのバンド情報を取得できないために起こります。

もっとも、Android 4.4の段階では多くのプロセスがunconfinedドメインに指定されていたので、多少設定が不正だとしても致命的なエラーは出ないようになっていました。

*1 unconfinedドメインとは、SELinuxによって制限されないドメインのことで、全てのアクセスを許可するように設定されています。

*2 SELinuxの動作モードとは別に、permissiveドメインという、動作モードに関わらずログ出力だけされる設定もあります。

Android 5.0

ところが、Android 5.0から、unconfinedドメインの指定が狭まり、今までは見逃されていたプロセスもアクセス制御を受けるようになりました。
また、アクセスポリシーを管理するsepolicyのソースにも変更が加えられ、permissiveドメインの設定で見逃されていたプロセスも、unconfinedかEnforcingかで厳密に管理されるようになりました。

ただし、この段階では、
android_external_sepolicy/Android.mkにFORCE_PERMISSIVE_TO_UNCONFINEDというフラグが設定されているので、これをfalseにすることで、Android 4.4までと同じ挙動にすることが出来ました。

*3 GXでも、このフラグをfalseにしなければ起動時にinitが延々とループすることになります。

Android 6.0

Android 6.0では、いよいよこのフラグも廃止され、完全なアクセスポリシーを定義する必要がでてきたので、SELinuxのポリシー設定に詳しくない一般開発者にとっては厳しい状況になりました。

SELinuxを静かにするには

通常は、起動時にSELinuxをPermissiveモードにするためにカーネルコマンドラインという、カーネルからAndroidのinitプロセスに渡されるパラメーターでPermissiveを指定することで回避できますが、ブートローダーがロックされていて、任意のカーネルコマンドラインを指定できないGXではこの方法が使えません。

*4 カーネルコマンドラインはデバイスソースのBoardConfig.mkで、
BOARD_KERNEL_CMDLINE  := androidboot.selinux=permissiveの形で指定できます。

仕方が無いので、カーネルコマンドラインを受け取って処理しているinitプロセスのソースまで遡って、SELinuxの初期化処理自体をしないように変更することにしました。

android_system_core/init/init.cppのmain関数内の処理をコメントアウトします。


    // Set up SELinux, including loading the SELinux policy if we're in the kernel domain.

    // selinux_initialize(is_first_stage);

こうすることで、SELinuxをそもそも有効にしない、Disabledの状態にして、ブートさせることが出来ました。

GX (TX)の画面反転問題について

GX (TX)の画面反転問題について

21:00 7

Xperiaは扱いやすい

一般的にXperiaは公式にリカバリ手段が提供されており、flashtoolなども扱いやすいので、開発には使いやすいと思われています。というのも、他の国産メーカーなどは、Miyabi LSMやTOMOYO Linuxなどで/systemがガッチリ固められていたり、NANDロックによって簡単に復旧不可の文鎮になってしまいますし、ROMの初期イメージが容易に手に入るのも大きな利点です。

しかし、いかにXperiaが扱いやすいとは言っても、絶対に気をつけるべき点が2カ所有ります。

必ず気をつける点

まず、TAパーティション。TrimAreaの略で、ここにブートローダーのロック状態や、バンド情報、DRMキーなど端末ごとに固有のデータが保存されています。ここが壊れるとハードブリックします。
flashtoolはチェックサムを合わせれば任意のTAイメージを焼くことも出来ますが、失敗すると裏蓋をはがしてテストポイントを使って、s1toolから正常なTAイメージを書き戻すことになります。

もう一点は、ハードウェアの物理的な破損です。単にコネクタの接触不良や水没ということではなく、違う機種のカーネルを焼いた場合に、ハードウェア内のレジスタが不正な復旧処理によっておかしくなる場合などです。

GXの画面反転問題

Xperia GX (TX)にも後者の問題が存在します。同じblueプラットフォームのVやTのカーネルでは、ディスプレイパネルの型番を認識できない場合に、パネル内のレジスタの型番を書き換えるコンフィグが有効になっています。

誤って(または故意に)VやTのカーネルをTXに焼くと、このリカバリプロセスが走って、画面が180度反転したままになる悲惨なことになります。
カスタムカーネルで起動できれば、このレジスタをもう一度書き換えることも出来ますが、国内モデルでは絶望的ですね。

同じプラットフォームで下手に互換性があるためにフラッシュしてしまうと、こういう事態に陥ります。なので、本当はGX用のROMをAXに焼くという無茶はやめて欲しいのです。たまたまTXのカーネルにはAXのパネルドライバが含まれていて、リカバリ処理も無効になっているので問題になっていませんが。

画面反転問題への対処

ストックROMではこの状態のままどうしようもないので、端末を上下反対に見ることになりますが、CM12.1ならば、救済策があります。

画面描画を担当しているSurfaceflinger内で、画面描画を反転するフラグがあります。

android_frameworks_native/services/surfaceflinger/DisplayDevice.cpp内でpersist.panel.inversemountedというプロパティを見て、値に応じて描画するので、

persist.panel.inversemounted=1というようにbuild.propにでも書いておけばまともに使えるようになります。
Xperia GX (TX)でカスタムROMとストックROMを行き来する際の処理

Xperia GX (TX)でカスタムROMとストックROMを行き来する際の処理

19:00 0
CM12からストレージのマウントを担当するvoldの処理が変わって、SonyのストックROMとカスタムROMで内部ストレージのオーナー情報が変わりました。
そのため、アプリがアクセス許可を得られないファイルは表示されないなど、ストックROMに戻った際に不便が生じます。

* カスタムROMを焼くときは、インストール処理中に自動で内部ストレージのオーナー情報をすべて書き換える処理が行われます。

Xperia GXのカスタムROMからストックROMに戻る際は、adbやターミナルアプリから以下のコマンドを打ち込んで、内部ストレージのオーナー情報をストックROM向けに書き換えて下さい。

4.1-4.3に戻る時
su
busybox chown -R 2800:2800 /mnt/int_storage
busybox chmod 0770 /mnt/int_storage

4.4-5.0.1に戻る時
su
busybox chown -R 2800:2800 /mnt/media_rw/sdcard0
busybox chmod 0770 /mnt/media_rw/sdcard0

CM13.0 for Xperia GX (TX) with Locked Bootloader

23:30 33
 

  

 


Xperia GX用のCM13.0のサポートページです。

最新ビルド


2016/05/22(日)

cm-13.0-20160522-UNOFFICIAL-hayabusa
cm-13.0-20160522-UNOFFICIAL-hayabusa (ミラー)

hijack-ramdisk for CM13.0

前回ビルドからの主な変更点
・05/22付(6.0.1_r43)のソースに更新
・カメラ有効化
・初回起動時にSIMを正しく読み込まないバグ修正
・Gello(CMのブラウザ)内蔵

既知の不具合
・PlayストアからWi-Fi経由で特定のアプリをインストールする際にソフトリブートする
・Wi-Fiテザリング
・FMラジオ
・Googleマップ上でコンパスが二方向しか向かない
・felicaアプリ

過去の更新履歴

2015/12/31(木)


・12/26付(6.0.1_r3)のソースに更新
・日本語訳適用
・LTEのシグナルを水増しして、電波の悪い場所でもLTEのまま粘るように?
・fstabを修正

2015/12/25(金)

cm-13.0-20151224-UNOFFICIAL-hayabusa
cm-13.0-20151224-UNOFFICIAL-hayabusa (ミラー)

・12/24付(6.0.1_r3)のソースに更新
・Wi-Fiの通信を有効化
・内蔵ストレージ・SDカードを有効化
・MVNOのSIM挿入時、キャリア名を正しく表示

2015/11/23(月)

cm-13.0-20151119-UNOFFICIAL-hayabusa

・11/19付(6.0.0_r26)のソースに更新
・データ通信を有効化
・自動回転を有効化
・WiFiとストレージは後一歩

2015/11/08(日)

cm-13.0-20151107-UNOFFICIAL-hayabusa
cm-13.0-20151107-UNOFFICIAL-hayabusa (ミラー)

・11/06付(6.0.0_r26)のソースに更新
・stagefright-plugins有効化
・SELinuxを無効化
・通常起動するように

2015/10/29(水)

cm-13-20151028-UNOFFICIAL-hayabusa (未リリース)

・10/28付(6.0.0_r1)のソースに更新
・stagefright-plugins無効化
・FM無効化
・CM12.1のinitバイナリで起動
・ramdiskのmainクラスを手動にして、最小構成で起動

Euphoria-OS for Xperia GX (TX) with Locked Bootloader

23:15 2
  


Xperia GX用のEuphoria-OSのサポートページです。

最新ビルド

2015/11/23(月)

Euphoria-OS-1.1-hayabusa-UNOFFICIAL-20151122
Euphoria-OS-1.1-hayabusa-UNOFFICIAL-20151122 (ミラー)

hijack-ramdisk for EOS

前回ビルドからの主な変更点
・11/22付(5.1.1_r28)のソースに更新
・libcのパッチマージ
・ソニーストックカメラサポートマージ

既知の不具合
・felicaアプリ
・USB接続時、USBデバッグをONにしないとPCからストレージが見えない

過去の更新履歴

2015/10/22(木)

Euphoria-OS-1.1-hayabusa-UNOFFICIAL-20151019

・10/19付(5.1.1_r24)のソースに更新
・Rom追加に際してデバイスツリーを整理
・サウンドデバイスのクラッシュを(今度こそ)修正

BlissPop for Xperia GX (TX) with Locked Bootloader

23:10 10
  
  

Xperia GX用のBlissPopのサポートページです。

最新ビルド

2015/11/23(月)

BlissPop-v4.0.3-hayabusa-UNOFFICIAL-20151122-2140
BlissPop-v4.0.3-hayabusa-UNOFFICIAL-20151122-2140 (ミラー)

hijack-ramdisk for BlissPop

前回ビルドからの主な変更点
・11/22付(5.1.1_r26)のソースに更新
・O3最適化、Graphite最適化、Krait最適化、4.9 SaberMod Toolchain使用
・libcのパッチマージ
・ソニーストックカメラサポートマージ

既知の不具合
・felicaアプリ

過去の更新履歴

2015/10/22(木)

BlissPop-v4.0.3-hayabusa-UNOFFICIAL-20151018-0955

・10/18付(5.1.1_r24)のソースに更新
・Rom追加に際してデバイスツリーを整理
・サウンドデバイスのクラッシュを(今度こそ)修正

Resurrection-Remix for Xperia GX (TX) with Locked Bootloader

23:05 8
  

 


Xperia GX用のResurrection-Remixのサポートページです。

最新ビルド

2015/11/23(月)

Resurrection-Remix-LP-v5.5.9-20151122-hayabusa
Resurrection-Remix-LP-v5.5.9-20151122-hayabusa (ミラー)

hijack-ramdisk for RR

前回ビルドからの主な変更点
・11/22付(5.1.1_r26)のソースに更新
・SELinuxをPermissiveに変更
・日本語訳の未マージPRを拝借
・libcのパッチマージ
・ソニーストックカメラサポートマージ

既知の不具合
・felicaアプリ

過去の更新履歴

2015/10/22(木)

Resurrection-Remix-LP-v5.5.7-20151018-hayabusa

・10/18付(5.1.1_r24)のソースに更新
・Rom追加に際してデバイスツリーを整理
・サウンドデバイスのクラッシュを(今度こそ)修正

CM12.1 for Xperia GX (TX) with Locked Bootloader

23:00 6
 

 


Xperia GX用のCM12.1のサポートページです。

最新ビルド

2015/12/31(木)


cm-12.1-20151229-UNOFFICIAL-hayabusa
cm-12.1-20151229-UNOFFICIAL-hayabusa (ミラー)

hijack-ramdisk for CM12.1

前回ビルドからの主な変更点
・12/29付(5.1.1_r26)のソースに更新
・通話録音を有効化(未検証)
・LTEのシグナルを水増しして、電波の悪い場所でもLTEのまま粘るように?
・デバイスツリー整理に伴う変更

既知の不具合
・felicaアプリ

過去の更新履歴

2015/11/23(月)

cm-12.1-20151122-UNOFFICIAL-hayabusa
cm-12.1-20151122-UNOFFICIAL-hayabusa (ミラー)

・11/22付(5.1.1_r26)のソースに更新
・libcのパッチ再マージ
・ソニーストックカメラサポート再マージ

2015/10/22(木)


・10/20付(5.1.1_r24)のソースに更新
・Rom追加に際してデバイスツリーを整理
・サウンドデバイスのクラッシュを(今度こそ)修正

2015/09/13(日)

cm-12.1-20150912-UNOFFICIAL-hayabusa

・09/12付(5.1.1_r18)のCMソースに更新
・シャッターキーのサポート
・f2fsサポート
・ネイティブUSB-DACサポート
・ナビバー電源ボタンマージ
・libcのパッチマージ
・ソニーストックカメラサポートマージ

2015/07/05(日)

cm-12.1-20150705-UNOFFICIAL-hayabusa

・07/04付(5.1.1_r6)のCMソースに更新
・rmt_storageまわりのSELinuxコンテキストを修正
・SELinuxをEnforcingに設定

7/5のROM向けパッチ
ナビバーに電源ボタンを追加するパッチ

hostファイルを使った広告除去を高速化するパッチ

Sonyのストックカメラ用に対応するパッチ

Sonyストックカメラのzipは以下のページを参照
http://forum.xda-developers.com/showthread.php?t=3154772

2015/05/22(金)


cm-12.1-20150521-UNOFFICIAL-hayabusa

・05/21付(5.1.1_r3)のCMソースに更新
・音楽再生中の操作でハングするバグ修正
・Chromecast対応
・SonyのMusicアプリ9.0.x以降の通常インストールに対応

2015/04/23(木)

cm-12.1-20150422-UNOFFICIAL-hayabusa

・04/22付(5.1.1_r1)のCMソースに更新
・Sonyロゴ点灯の廃止

2015/03/28(土)

cm-12.1-20150327-UNOFFICIAL-hayabusa

・03/27付(5.1_r3)のCMソースに更新
・Google開発者サービスのバッテリードレインを修正
・CMセットアップウィザードがクラッシュする問題を修正

2015/03/26(木)

cm-12.1-20150325-UNOFFICIAL-hayabusa (削除済み)

・03/25付(5.1)のCMソースに更新
・Sonyロゴの通知点滅を廃止?

CM12 for Xperia GX (TX) with Locked Bootloader

21:00 0
  

Xperia GX用のCM12のサポートページです。

最終ビルド


2015/02/16(月)


cm-12-20150215-UNOFFICIAL-hayabusa

hijack-ramdisk for CM12

前回ビルドからの主な変更点
・02/15付(5.0.2)のCMソースに更新
・UI日本語化
・テーマエンジン対応
・XZDualRecovery導入時のオフライン充電修正
・sepolicy調整
・CAF製FMラジオアプリ内蔵
・GPSアイコンが消えないバグ修正?
・ライトトグルとカメラの干渉解消?
・全体的に動作が軽くなったような?
・実験的に4.3へのアップグレードを不要に(4.1.2からの導入時にエラーが出るようなら、4.3にしてください)

既知の不具合
・felicaアプリ
・SELinuxをEnforcingにすると、rmt_storageが駄目になる(ベースバンドが不明)


過去の更新履歴


2015/01/11(日)

cm-12-20150111-UNOFFICIAL-hayabusa

・01/11付(5.0.2)のCMソースに更新
・メモリリークfix(要検証)
・MSC-USB接続モード対応
・カメラキー修正
・RIL追加修正

2014/12/06(土)

cm-12-20141205-UNOFFICIAL-hayabusa

・12/05付(5.0.1)のCMソースに更新
・ライトHALをオープンソースの物に差替え
・exfat対応(SDXC対応)
・カメラ回りを安定化
・RIL見直し
・APNの挙動不審は修正された?
・メモリ管理が修正されたかは確認していません

2014/11/22(土)

cm-12-20141117-UNOFFICIAL-hayabusa

・11/17付のCMソースに更新
・モバイルデータ・通話発着信を修正
・ロック画面とソフトキーが消えるバグ修正
・カメラを修正
・音出力を修正
・動画再生(SW/HW)を修正
・リカバリ起動プロセス(hijack-ramdisk)を簡略化
・リカバリ微調整

11/22向けのパッチ
Wi-FiテザリングAPの修正とマルチユーザー有効化

2014/11/16(日)

cm-12-20141113-UNOFFICIAL-hayabusa

・初版公開

CM11 for Xperia GX (TX) with Locked Bootloader

20:30 0
   


Xperia GX用のCM11のサポートページです。

最終ビルド


2015/06/27(土)


cm-11-20150627-UNOFFICIAL-hayabusa

hijack-ramdisk for CM11

前回ビルドからの主な変更点
・06/26付(CM11.0_Final)のCMソースに更新
・hijack-ramdiskの処理をCM12.1と共通化
・SuperSUのバッティング問題解決
・ネイティブFMアプリ対応
・SIM電話番号読み出し対応
・Chromecast対応
・SonyのMusicアプリ9.0.x以降の通常インストールに対応

既知の不具合
・felicaアプリ


過去の更新履歴


2014/10/15(水)

cm-11-20141009-UNOFFICIAL-hayabusa

・10/08付け(M11)のCMソースに更新


10/15のROM向けストックUI風Mod
Xperia_UI-cm-11-20141009-hayabusa

 
 

2014/09/17(水)

cm-11-20140916-UNOFFICIAL-hayabusa

・9/16付け(M10)のCMソースに更新
・TWRPを2.8.0.1に更新
・iptables関係のエラーを修正

2014/07/24(木)

cm-11-20140723-UNOFFICIAL-hayabusa

・headsethook(イヤホンコントロール)を修正
・hijack先を変更してリカバリに入りやすく
・USB-OTGストレージ接続時に自動でマウントするように
・標準ブラウザでgoogleドメインを開けるように?
・開発者サービス5.0.84ではドレインはなくなったようです

2014/06/26(木)

FXP325-cm-11-20140622-UNOFFICIAL-hayabusa

・FXP325(6/22)に更新(4.4.4)
・Adrenoドライバ更新
・WiFiロケーションバグ修正
・ナビバーに電源キーを追加
・TWRPで日時が正しくなった
・TWRPを2.7.1.0に更新
・気休めにOpenWnn同梱

2014/06/06(金)

cm-11-20140605-UNOFFICIAL-hayabusa

・6/5付けのCMソースに更新(機能追加・変更・バグフィックス)
・CMテーマが使えるように
・ARTが使えるように

2014/05/12(月)

cm-11-20140505-UNOFFICIAL-hayabusa

・初版公開

CM10.2 for Xperia GX (TX) with Locked Bootloader

20:00 0
 
 


Xperia GX用のCM10.2のサポートページです。

最終ビルド


2014/04/16(水)


LB-FXP313-cm-10.2-20140414-UNOFFICIAL-hayabusa

hijack-ramdisk for CM10.2

前回ビルドからの主な変更点
・カメラが機能するように
・近接センサーと照度センサーが動くように
・Wi-FiのMACアドレスを正しく読み込めていなかった問題を解消
・イヤホンジャック挿入を検出するように
・PowerHALを更新
・ramdiskを調整
・build.propを整理
・9.2.A.1.205のカーネルも一緒に焼くように
・Trebuchet LauncherのGravityBoxによるナビバー透過対応

既知の不具合
・通知LEDが光らない
・Sonyロゴが光らない
->lightsHALのCM用wrapperが問題。wrapperを外すとロゴは光るが、LEDが常時点灯になる。
・CWMに入るのに一手間かかる

4/16向けのパッチ
Sony公式のホワイトバランスアプリ

過去の更新履歴


2014/04/07(月)

LB-FXP313-cm-10.2-20140331-UNOFFICIAL-hayabusa

・Wi-Fi有効化
・モバイルデータ有効化
・通話有効化
・タッチ操作
・FMラジオ



カスタムROM導入手順

カスタムROM導入手順

19:00 6
この導入手順は、ブートローダーがロックされた端末用のROMに限ったものでもないですが、カスタムROMに手を出し始めたばかりでも分かりやすいように書いておきます。

今のところGXしかサポートしていないので、GX用だけ説明しますが、将来的に他のXperiaモデルをサポートする際は、適宜追記します。

ZとZ Ultraのサポートも追加しました。

Android 6.0 for Xperia Z Ultra

1. (推奨)リカバリなりTitanium Backupなりで現環境バックアップ 

2. (必須)14.6.A.1.236でAndroid5.1.1の環境へ

3. (必須)現環境に、ROM導入用のXZDualRecoveryを導入

4. 所定の手順でTWRPを起動して、以下の順でzipを導入

5. (必須)CM13.0

6. (推奨)XZDualRecovery(他に代替のリカバリが有る場合はそちらでも可能。これを抜かすと再起動後リカバリを使えません。)

7. (必須)hijack-ramdisk for CM

8. (推奨)GApps(PlayストアをはじめとしたGoogleのパッケージ)

9. (好みで)SuperSU
(大抵のROMはあらかじめルート権限が用意されていますが、SuperSUを使いたい場合は好みで)

10. (必須)Wipe Data(StockROMへインストールする場合は必ず)

11. 再起動(データワイプ後、初回ブート時は5分程度かかります。慌てずお待ち下さい)

12. 完了

リカバリ起動手順
GXやZとはhijackの順序が異なるので、XZDualRecoveryを使用する場合は、通常と同じ操作でリカバリを起動できます。(OSの電源メニューからリカバリへ再起動も可能)

Android 4.4 - 6.0 for Xperia GX and Z


1. (推奨)リカバリなりTitanium Backupなりで現環境バックアップ 

2. (必須)9.2.A.1.215かCM10.2でAndroid4.3以上の環境へ
(Android 4.1.2の/systemで使われているext4のバージョンが4.3以降に追加されたパラメータに対応していないので)

Zの場合は、10.7.A.0.228でAndroid5.1.1の環境へ

3. (必須)現環境に、ROM導入用のCWM6-cDM_v2.5_vfix2_MultiRecovery か XZDualRecoveryを導入
(CM11以降のupdater-scriptで新しいリカバリしか対応していないコマンドが追加されたため)

4. 所定の手順でTWRPを起動して、以下の順でzipを導入

5. (必須)CM11 CM12 CM12.1 CM13.0 / Resurrection-Remix / BlissPop / Euphoria-OS

6. (推奨)XZDualRecovery(他に代替のリカバリが有る場合はそちらでも可能。これを抜かすと再起動後リカバリを使えません。)

Xperia Zの場合は、必ずXZ-lockeddualrecovery2.8.23-RELEASE.combinedを選択
(2.8.21以前は、/systemをマウントできないバグあり)

7. (必須)hijack-ramdisk for CM

8. (推奨)GApps(PlayストアをはじめとしたGoogleのパッケージ)
有名どころのPAGAppsが提供終了した後、色々と派生版がリリースされています。好みでバージョンにあったものを使って下さい。


9. (好みで)SuperSU
(大抵のROMはあらかじめルート権限が用意されていますが、SuperSUを使いたい場合は好みで)

10. (必須)Wipe Data(CMによるとCM11からはデータを引き継げるそうです)

11. 再起動(データワイプ後、初回ブート時は5分程度かかります。慌てずお待ち下さい)

12. 完了

リカバリ起動手順
(hijack-ramdisk環境下では)Sonyロゴでボリューム下を連続で押下すると、赤LEDが一度点灯します。 その後、リカバリの選択動作に移ります。(TWRPがボリューム下)


Android 4.3 for Xperia GX


1. (推奨)リカバリなりTitanium Backupで現環境バックアップ

2. リカバリを起動して、以下の順でzipを導入

3. (必須)CM10.2

4. (推奨)CWM6-cDM_v2.5_vfix2_MultiRecovery

5. (必須)hijack-ramdisk for CM10.2

6. (好みで)GApps

7. (必須)Wipe Data

8. 再起動

9. 初期設定を済ませたら、一度再起動(NFCサービスが初回起動時は暴走するため)

10. 完了

自作アプリ

21:00 0

自作アプリ

以前作ったXposedモジュールなど。
Z1 f用に作ったので、若干使い勝手が変わるものもありますが、Xperiaの最新機種でも使えます。

SemcCamera Patcher(for Smart Social Camera) [Xposed]
日本SIM挿入時、カメラ、スイングパノラマ、タイムシフト連写、ピクチャーエフェクトでシャッター音オプションを表示する

Tethering Option Patcher for Xperia [Xposed]
ドコモROMでMVNOのSIMでテザリングを可能にしたり、テザリング周りの設定をする
(最近の機種ではAPNをリセットせずとも使えるようです)

Xperia Small Tweaks [Xposed]
Xperiaの隠された機能を有効化する(ROMに実装されているものだけ)
(最新モデルでは使えません)

カーネルモジュール

カーネルモジュール

19:30 0

カーネルモジュールとは

コンパイル時にカーネルに含まれなかった機能を後から追加できるようにモジュール化したものです。
CPUの動作を制御するCPUガバナや、ストレージの読み書きを制御するIOスケジューラ、より高速なエントロピージェネレーター、低容量RAMデバイス向けのZRAM追加、NTFSなどのファイルシステムへの対応、UTF-8をはじめとした多言語文字コードへの対応など、一般の開発者等によって開発された機能を追加できます。

より高度な技術があれば、単なる機能の追加に限らず、カーネル内の既存の関数や構造体を書き換えることで、CPUのオーバークロック、権限の取得などカーネルハッキングの自由度が高まります。

Xperiaの国内モデルをはじめ、ブートローダーがアンロック出来ない(=メーカーによって署名されたカーネルしか起動しない=自分でコンパイルしたカーネルを使用できない)場合、メーカーは使用しないような機能の恩恵を受けることが出来るので、とても重宝します。

カーネルモジュールはROMバージョンごと

カーネルモジュールは基本的に、対応したカーネル内の各関数、構造体を示したアドレス(≒カーネルシンボル)が決め打ちされているので、それぞれのカーネルバージョンごとにコンパイルする必要があります。(カーネルバージョンチェックのためのマジック番号を無理矢理書き換えて読み込ませることも出来ますが、カーネルの関数に依存した機能をモジュールが持っている場合、動作しません。)

Xperia TX 9.2.A.0.295用のカーネルモジュール


9.2.A.0.295用のモジュールですが、TX用の最終ビルドの9.2.A.1.215や同じblueプラットフォームのXperia T、Xperia Vでも動作するはずです。

機能一覧
・CPUガバナ9種
・IOスケジューラ6種
・ZRAM(Snappy/LZ4)
・NTFS読み書き
・UTF-8サポート
・frandom

CPUガバナについては、カーネル内のアドレスを決め打ちせずにシンボル名から関数の所在を見つけるためのsymsearch.koというヘルパーを使っています。この部分が私のモジュールの特別な点です。

ソースについて

GPLに準拠するため、zip内にソースコードを含めてあります。
違うデバイスのカーネル用にコンパイルしやすいように、makefileを書いているので、カーネルソースとarm用のクロスコンパイラのディレクトリを指定するだけですぐに使えます。

割と各所で私のソースを利用されているのを見かけるので、喜ばしい限りです。

連絡先

19:00 0


連絡先

基本的に掲示板で活動していますが、メールアドレスも一応公開しています。

redstar00886*gmail.com

*を@に変更して下さい。

私が提供できる知識・技術はそれほど多くないので、一般的な質問には答えませんが、Xperiaの国内モデル用のカスタムROMやModについてはお手伝いします。

寄付について

私の活動を応援頂ける方が割といるようなので、Amazonギフト券のバナーを以下においておきます。
宛先に上記のメールアドレスを指定頂けたら幸いです。


このブログについて

0:00 0


作成物のリリース


Androidスマートフォン Sony Xperia向けのカスタムROMやModを公開しています。

私がビルドしているROMは、ブートローダーがアンロック出来ない(=カスタムカーネルが焼けない)国内モデルでも動作するように手を尽くして調整してあります。
XDAをはじめとした各フォーラムで公開されているグローバルモデル用のROMに比べると、カーネル調整による恩恵はありませんが、サポートの終了したストックROMに比べて、Androidのメジャーバージョンアップによるパフォーマンス向上やセキュリティ強化などが期待できます。

*1 カスタムROMの導入には前提としてroot権限の取得が求められます。root権限の取得は、違法ではありませんが、一般的にメーカー、販売店の保証を無効にする改造行為と見なされますので、何事も自己責任、自助努力を基本にして下さい。

*2 初心者は対象にしていないので、基礎的な質問には答えられません。

Android開発のTips


Androidカスタムの世界に足を踏み入れたけど、初級から中級にステップアップするのに何をすれば良いかわからない。マスをターゲットにした大衆ブログや、既に開発に詳しい人向けの技術的なブログはあるけどその中間が少ない。

そんな要望を満たすために、私が素人ながら独学で調べた内容を体系的に日本語で解説するようなブログを目指します。

* なお、私自身がただのファンなので、情報の質や正確さについては担保されません。
Android開発に詳しい方で誤りに気付かれましたら、コメント欄からあたたかくご指摘、訂正頂ければとても喜びます。