[備忘録]SGP611 23.5.A.0.570のカーネルアドレス

[備忘録]SGP611 23.5.A.0.570のカーネルアドレス

2:56 3
キューブさんのMarshmallow向けrootkitをSGP611用にビルドしたので、そのメモです。

PTMX_FOPS_ADDRESS 0xc1234d74
SELINUX_ENFORCING_ADDRESS 0xc1227d30

なぜか同じビルド番号でもWi-Fi版はアドレスが違ったので。

getrootをWindows環境下で、android-ndk-r11cを用いてビルドする際は、最初に
#define _GNU_SOURCEが必要

Toolchainのディレクトリのリネームも必要
android-ndk-r11c\toolchains\arm-linux-androideabi-4.9\prebuilt\windows
android-ndk-r11c\toolchains\arm-linux-androideabi-4.9\prebuilt\windows-x86_64


Marshmallow向けTWRP

SGP611はchargemon.sh内のキーチェックはinput3で音量キー

INPUTDEVNAME=$(/system/etc/lockedtwrp/busybox grep DEVNAME= /sys/devices/gpio_keys.82/input/input3/event3/uevent | /system/etc/lockedtwrp/busybox sed s/DEVNAME=//)


Xperia Z Ultra(C6833/SOL24)向けのCM13.0リリース

2:23 3

ブートローダーがロックされたXperia Z Ultra用にCM13.0をビルドしました。
現時点では主要な機能が使えないのであくまでテストリリースですが、少しずつバグ取りをしようと思います。
これだけ色々とビルドするようになると、hijackの要領もかなり掴めてきましたね。

さて、サポートする端末が増えてきたのでデバイスツリーを公開すると話していた件ですが、若干厳しくなりました。
というのも、先日、ビルド用のHDDがクラッシュして相当量のデータが飛んでしまったので、そちらの復旧のために時間がかかりそうです。慢心が過ぎると痛い目を見ますね。SeagateのHDDは安価ですが、壊れやすいのには本当に困りました。

バグ報告や質問でメールやコメントを色々と頂いている件も、返信できずにいて申し訳ないです。どこかでまとめてと思っているのですが、気力が底を突いているので、もう少し元気になったらコメントをお返しします。

今回の詳しいリリース内容はZ UltraのCM13.0用サポートページで確認ください。

CM13.0 for Xperia Z Ultra with Locked Bootloader

2:22 2
 

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

最新ビルド

2016/06/12(日)

cm-13.0-20160605-UNOFFICIAL-togari
cm-13.0-20160605-UNOFFICIAL-togari (ミラー)

togari hijack-ramdisk for CM13.0

前回ビルドからの主な変更点
・イニシャルリリース
・06/05付(6.0.1_r43)のCMソース使用
・NFC(グローバル版の場合)有効化
・内部・外部ストレージ有効化
・自動回転有効化
・Bluetooth有効化
・Doze有効化

既知の不具合
・Wi-Fi
・モバイル通信
・ベースバンド読み込み
・音出力
・カメラ
・FMラジオ

GXの/data領域を拡張するAromaインストーラー型ツール

17:55 7


以前のエントリで、GXはeMMC上に2GBの/dataパーティションが決め打ちされており、残りのスペースが内蔵ストレージとして扱われていることを説明しました。このため、サイズの大きなARTのキャッシュが/dataに溜まることでAndroid5.0以降ではすぐに空き容量低下となってしまうわけですが、XDAでeMMC上のパーティション構成をTWRP上から弄るというページを見つけたので、そのコマンドを自動化して簡単に実行できるようなAromaインストーラー型のツールを作りました。

鈴の音情報局blogさんに協力頂いて、今年の頭には完成していたのですが、忙しさにかまけて公開をすっかり忘れていました。今更GX用のツールを公開したところで旬は逃しているのですが、コマンドの使い方やAromaインストーラーの書き方など全体の手順は将来的にも活用できる内容なので、興味のある方は中身を見て参考にして頂ければ。

使い方と注意点

注意事項はツール実行時に表示されますが、このツールはROMのデータ領域と内蔵ストレージを全て消去して新しいパーティションを作るので、実行前に/dataと/sdcardを完全にバックアップして下さい。2GB, 4GB, 6GB, 8GB, 10GBのオプションから任意のサイズの/dataパーティションを作成してext4でフォーマットします。

ツール実行後の初回起動時に、システムによって内蔵ストレージ内にPicturesなどの空フォルダが自動で作成されますが、このまま使用するとパーミッションの関係でフォルダ内にファイルを作れないという問題が起こるので、ファイラーなどから手動で空フォルダを削除してバックアップを書き戻して下さい

免責

本ツールはGX用にパーティションの開始位置、終了位置を決め打ちしてコマンドを書いているので、他の端末上で実行してハードブリックしても責任は負えません。(パーティション構成を弄るということは、つまりブートローダーやTrimAreaのパーティションを破壊することも可能ということです)
また、必ず事前にバックアップしてから実行して下さい。ファイルを失っても責任は負えません。

もっとも、万が一、GX上で何かしら問題が起こったとしても、flashtoolからpartition-image.sinを焼けば元のパーティション構成に復帰するので、(ブートローダーやTAを破壊しない限り)どうにかはなります。

画像

  


ダウンロード

GX_PartitionResizer


<参考>
[HOW-TO][ROOT][4NOOBS] Resize sdcard0 and internal storage to maximize space for apps | Sony Xperia T, TL, TX, V


2016年5月のGX向けCM13.0リリース

2016年5月のGX向けCM13.0リリース

17:55 0
半年ぶりにGX向けのCM13.0をビルドしました。

昨年末の段階ではCMもまだまだ不安定でしたが、Nのリリースも目前に控えている中で随分と安定してきた印象です。今回は、半年分の更新を取り込んだのと、カメラを有効化しました。相変わらずWi-Fiの通信周りが不安定ですが、これはもう少し時間を掛けて迂回策を考えます。とりあえずは使えるというレベルのリリースです。
色々と細かいバグが多いので、GXもそろそろ寿命かなと感じていますが、限られた時間を使うならもっと新しい端末へ労力を割きたい気もしてきましたね。

今月か来月頭にはソースも公開しようと思っていますので、どなたかやる気のある方にメンテしてもらえればと考えています。

詳しいリリース内容はGXのCM13.0用サポートページで確認ください。

To International Readers (Apologies and Announcement)

20:57 3

To international readers,

First of all, thank you for your interests in visiting this blog, and also to encouraging me (and enquerying in a polite manner). I understand some of your eager towards android development especially for hayabusa/TX. I feel sorry to you since you've been patiently waiting for my new builds and I haven't been able to reply you back for a long time.
It's a balance between my interests in android and my regular work; it's been a busy time for me the last few months but I will try to update timely for the coming months.

Since I haven't been to xda forums so long, I'm not sure about the current progress on TX development there. Are they still working on CM13.0 builds for UNLOCKED blue devices? My interests are solely in building CM13.0 for LOCKED hayabusa which requires extra effort so situation is slightly different in here and xda. (It's easy for me to build working CM13.0 for UNLOCKED blue but I don't own the unlockable international devices)

I'm releasing CM13.0 for locked Z/ZR now and I'm hoping to get my hands on building CM13.0 for hayabusa next(since it's been quite long since I last built a rom for it). Please note I'm neither professional in C nor Java so progress may be slow  especially for fixing wi-fi permission issues (because it fundamentally needs kernel-side fix but I am not allowed to on LOCKED devices). I will try to update at least once a month from now on.

My current schedules in priority
・Building CM13.0 for locked hayabusa(fix for camera and wi-fi sudden freeze)
・Building CM13.0 for locked Z Ultra and Z1
・Releasing CM13.0 device tree source for locked fusion3 devices
・(on request)Building CM12.1 for fusion3(yuga,dogo) that fixes the mobile data

again, thanks you for your interests in my blog but please remember I'm doing this for my own purpose and although I'm able to help you in English I don't do so much as my policy is that everyone makes self-help efforts since all the information is given in my blog(in Japanese).

2016年5月のZ・A向けCM13.0リリース

20:56 1

さて、こちらのブログも数ヶ月放置してしまって、その間に頂いた問い合わせや応援などにもお答えできず本当に申し訳ないと思っているのですが、久々にGWで余裕が出来たのでROMを更新しようと思います。

気付いたらGX用のROMを年末から更新していないのでこちらもすぐに取りかかりたいのですが、Zを手に入れてからそちらに掛かりきりになってしまってなかなか触れないでいます。家人に使わせていたC6833を回収したので、Rhineプラットフォームも開発用の実機が揃ってきたのですが、一人で色々と触ろうとして手が回らなくなるパターンですね。

今回は、LBのZとA(ZR)用にCM13.0をビルドしました。以前まとめた古いカメラ用バイナリがAndroid 6.0以降で使えない問題は、CMのメンテナが互換用のライブラリを作ってくれたので修正されています。FMラジオが再び使えないようになっている以外はほぼ常用できるレベルに達していると思います。Aの実機は手元に無いので、おそらく動くだろうという推測でビルドしていますが、もし試される方がいれば結果を教えて下さい。

今後の予定としては、まずは数ヶ月分の更新を取り込んで古い端末用にビルドしたいと思います。更新も月一程度のペースには戻していきたいところです。

今後の予定
・GX向けのLB用CM13.0のビルド(カメラとWi-Fiの修正)
・Z Ultra、Z1向けのLB用CM13.0のビルド
・fusion3用のCM13.0用デバイスツリーの公開
・(要望があれば)fusion3(yuga,dogo)用のCM12.1の通信を修正したものをビルド
・色々と書きたいノウハウはあるものの、IaaS系に関心分野が移りつつあって時間がない
・POBox Plus等の移植もしたいが、わざわざ移植するほど魅力的に感じないので難しいかも


詳しいリリース内容はZとAのCM13.0用サポートページで確認ください。
CM13.0 for Xperia A (ZR) with Locked Bootloader

CM13.0 for Xperia A (ZR) with Locked Bootloader

20:56 14
Xperia A用のCM13.0のサポートページです。

最新ビルド

2016/05/08(日)

cm-13.0-20160508-UNOFFICIAL-dogo
cm-13.0-20160508-UNOFFICIAL-dogo (ミラー)

dogo hijack-ramdisk for CM13.0

前回ビルドからの主な変更点
・イニシャルリリース
・05/06付(6.0.1_r43)のCMソース使用
・実機が手元にないので、動作報告をお願いします

既知の不具合
・FMラジオ
・ガラ機能

過去の更新履歴

2016/02/06(土)

cm-13.0-20160206-UNOFFICIAL-dogo(未リリース)

Xperiaのオープンソース開発におけるカメラ問題

19:05 6

Xperia向けのCM13で一番難航しているのがカメラ機能であることは前の記事で触れましたが、Cyanogenmodのnightly公式配信が中々始まらないのもこのためです。

そのうち改善されていくのでしょうが、実はXperiaのカスタムROMにおけるカメラ問題は根が深く、これをまとめている記事も見かけないので一度整理しておこうと思います。


自社技術保護に熱心なSoMC

SonyがXperiaのカメラ性能に自信を持っていることはプロモーションを見てもよく分かりますが、Sonyは技術保護のためにカメラ機能に端末固有のDRMキーを要求するようにしています。スマートフォンメーカーの中では一眼レフやミラーレス機も真面目に作っているだけあって、(実際に現像された写真の見栄えが良いかは別として、)暗所性能や色のりは評価できると思いますが、そういう画像処理(BIONZ for mobile)を担当するバイナリやライブラリを他端末に移植して外部から呼び出されないようにするための処置ですね。




この動きはZ1世代のRhineプラットフォームから起こっていて、当時はカスタムROMを焼くためにブートローダーをアンロックしたらカメラが使えなくなったと散々ユーザーからSoMCの公式フォーラムに文句が出ました。
具体的な症状は、プレビューまではできるがフォーカスしようとするとカメラが落ちるというもので、Z1のグローバルモデルの4.2.2でこの問題が起こっていました。さすがに不評だったためかZ1が4.3にアップグレードされたときに、カメラにDRMキーを要求しないようにSoMCが仕様を変更したのですが、4.4以降ではこの仕様が元に戻されています。

この部分の処理はエラーログを追うとよく分かります。

DRMキーをTAパーティションから取得するCredentialManagerが(ここではソケットの作成で)エラーを起こす
E/CredMgrDinLib(1676): SendAndReceive socket failed
E/CredMgrDinLib(1676): SendAndReceive() ended. result 1 - CREDMGR_RESULT_GENERIC_ERROR

CredentialManagerとカメラをつなぐcacaoプロセスが、DRMキーを受け取れないためにchokoballの作成に失敗する
E/cacao(1676): 1137370710 cacao_chokoball.cpp               (3704) 12370 E [CKB] ckb preCompile fail. keymgr credmgr generic error.
W/cacao(1676): 1137370745 cacao_chokoball.cpp               (3713) 12370 W [CKB] Post process preLoad(0xffffff91)
E/cacao(1676): 1134871177 cacao_chokoball.cpp                (852) 12373 E [CKB] ckb create fail.
E/cacao(1676): 1134871243 cacao_chokoball.cpp                (893) 12373 E [CKB] ckb is not ready.

cacaoプロセスが開始できないので、カメラ機能を司るcaladbolgがフォーカス時にエラーを吐く
E/caladbolg(1676): 1134871299 excal_focus_detector.cpp           (177) 12372 E [EXC] [FocusDetector  ] Cacao start Fail <ffffff90>
E/caladbolg(1676): 1134953273 excal_idt_ctrl.cpp                 (688) 12371 E [EXC] [IdtCtrl        ] Received error event from FocusDetector
E/caladbolg(1676): 1134953307 excal_idt_ctrl.cpp                 (692) 12371 E [EXC] [IdtCtrl        ] Call returnBuffer for HwFocusStats 0xb7b54c98
カカオやらチョコボールやらカラドボルグやらSoMCの開発者はプロセスのネーミングがかわいいですね。


オープンソース開発における問題

SoMCが技術保護に熱心なのは分かりましたが、こうなると困るのはカスタムROMを作成する一般開発者です。
カスタムROMを焼くためにブートローダーをアンロックする以上、DRMキーは失われて使い物にならないカメラが残ります。この仕様はZ2、Z3のShinanoプラットフォームにも引き継がれたので、長らくCMのメンテナの間で問題になっていました。

CM12.1までは、その場しのぎの処置として、DRMキーが要求されないZ1のプロプライエタリバイナリとそれに合うようにカーネルを変更してカメラが使えるように工夫されていましたが、CM13でカメラ起動に求められる関数が大きく変更されると、4.3のバイナリでは対応できなくなり、問題が表面化したというわけです。

今のところ、CMのメンテナとしては、どのみちカーネルバージョンを3.10に上げれば、3.4カーネル向けのバイナリとカーネルの変更は使えなくなるので、いっそのこと小手先のハックはやめて、SoMCが開発中の3.10向けのAOSP用カメラバイナリが提供されるのを待とうという結論に達したようです。

CMのメンテナが3.10カーネルありきの方向で納得してしまうと困るのは、カーネルを変更できないLB用ROMを作っている私やZ以前のROMを作っている開発者です。私が1年半前にZ1f用のCMをビルドしたときはTAパーティションからDRMキーを読み出すDRMサービスの修正で躓いたのですが、今ならこちらは解決できるとして、カメラ起動に足りない関数を自前で用意してエラーを追い切るほどの技量はないのでどうしたものかと考えています。

XperiaはSony Ericsson時代からのオープンソース開発への積極性とSonyによる買収後の自社技術保護のクローズ性が両立しているので、なんとも煮え切らずに歯がゆい思いです。もっとも、FreeXperiaのJerpeleaが入社して以降は、先述のSonyの技術を除いたAOSP向けカメラフレームワークの開発や3.10カーネルの作成などオープンソース開発へのやる気も見せています。惜しむらくはそういった活動の恩恵を受けられるのがブートローダーをアンロックしたモデルだけということです。なかなか思うようにはいかないものです。


白黒付けがたいスマートフォンのオープンソース開発

余談ですが、XDAでは上記の技術保護の仕組みを破るmodが公開されています。しかし、Cyanogenmodの公式配信に真っ黒なクラックを載せるわけにはいかないので、アンオフィシャルビルドで使えれば良い程度の認識です。もっとも、LGの署名脆弱性を突いてカーネルに任意の有効な署名をできるようにしたOpen BumpがCM公式で採用されているところを見ると、線引きなど曖昧なものです。メーカーとしてはこういったユーザーの趣味的な開発を不正な改造行為と切って捨てることは容易いですが、コアなファンのいないビジネスは面白みに欠けるのではないかとも思いますし、白黒付けがたい問題ではあります。

<参考>
Xperia Z1、現時点ではブートローダーをアンロックするカメラが機能しなくなる、Sony Mobileが公式サイトで注意を呼びかけ | juggly.cn

BUG!Camera broken after bootloader unlock! - Support forum

[dev][cam][improvements & auto-focus dev… | Sony Xperia Z1

Change I8a63f407: msm: camera: Use Sony Rhine camera stack from 4.3 | review.cyanogenmod Code Review

Change Ic1b2696d: Use rhine 4.3 camera stack | review.cyanogenmod Code Review

Change Ie15c02cc: Remove stock camera stuff | review.cyanogenmod Code Review

Experimental AOSP camera available for experienced developers – Developer World

GitHub - sonyxperiadev/camera at aosp/LA.BF64.1.2.2_rb4.7

Official CM11/CM12 builds now possible thanks to Open Bump : LGG3

Sony credentials restore after unlocking the… | Sony Xperia Z5

Xperia Z(SO-02E)向けのCM13.0リリース(追記あり)

0:18 11

SO-02E用のCM12.1が思いの外順調にビルドできたので、その勢いでCM13.0をビルドしました。

やはりhijack-ramdiskでSELinuxを抜けるのに一苦労でしたが、GXでノウハウを積んでいたので今回はずっと気持ちが楽でしたね。また、Zのビルド過程で新しく理解した点もGXの次回ビルドに反映できるかと思います。

データ通信と通話は相変わらず未確認です。CM12.1の方で報告いただきましたが、自分で状況を再現できないと修正しようがないので、SIMを挿した状態の起動直後のlogを取れる方がいたら提供いただけると幸いです。

音出力(+それに伴うプチフリ)とカメラが使えないので常用には向きませんが、まずは初期ビルドを公開します。もっとも、ZのCM13.0はUBL用のアンオフィシャルビルドが最近出たばかりなので、ブートローダーがロックされた端末向けのロムをこの段階で出せるのはかなり良い方かと思います。

ZがAndroid6.0の壁を越えることが出来たので、まずは一安心ですね。

<2016/01/17追記>
初期ビルドで取り切れなかったバグを修正して更新しました。
すぐに修正できるなら一日くらいリリースを待てば良かったですが、何事も結果論、出来ることは早めにしておくに限りますね。

一緒にFMラジオも有効化しました。CM12.1では高機能なCAF版を使っていましたが、CM13からサポートされなくなったのでGoogle製に変更されています。(こちらはUBL用のROMにも載っていないので、私のROMの利点です。)



<2016/01/20追記>
SIMを読み込まないバグを修正しました。
通話は試していませんが、これで主なバグはカメラだけになりました!

<2016/01/21追記>
通話についても動作報告頂けました。
カメラは私だけではどうにもならないので、CMのメンテナが修正案を出すまでお預けです。
(実際、CM13のアンオフィシャルビルドが出ているyuga, huashan, taoshan, 開発中のrhine, shinanoと私が知る限りでは、Xperia系のカメラは今のところ全滅です。 )

詳しいリリース内容はZのCM13.0用サポートページで確認ください。

CM13.0 for Xperia Z with Locked Bootloader

0:17 15
  

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

最新ビルド

2016/05/08(日)

cm-13.0-20160507-UNOFFICIAL-yuga
cm-13.0-20160507-UNOFFICIAL-yuga (ミラー)

yuga hijack-ramdisk for CM13.0

前回ビルドからの主な変更点
・05/06付(6.0.1_r43)のCMソース使用
・カメラを修正
・FMラジオをcaf製に戻したが再度使用できず

既知の不具合
・FMラジオ
・ガラ機能

過去の更新履歴

2016/02/06(土)

cm-13.0-20160206-UNOFFICIAL-yuga (未リリース)

2016/01/17(日)


・01/13付(6.0.1_r10)のCMソース使用
・音出力を修正
・GPSを修正
・DRMサービスを修正
・FMラジオ有効化
・SIMを読み込まないバグ修正

2016/01/15(金)

cm-13.0-20160115-UNOFFICIAL-yuga
cm-13.0-20160115-UNOFFICIAL-yuga (ミラー)

・イニシャルリリース
・01/13付(6.0.1_r10)のCMソース使用
・sepolicyのバージョンをLollipopレベルまでダウングレード
・内蔵ストレージ・SDカード対応
・Sony製メディアアプリのインストール対応

Xperia Z(SO-02E)向けのCM12.1リリース

1:55 5

今後の目標として挙げたからにはまずは有言実行ということで、ブートローダーがロックされたXperia Z(SO-02E)向けのCM12.1をビルドしました。

既にSomcのストックROMがAndroid 5.1.1のところにCM12.1をビルドしてもやや面白みに欠けますが、何事も下準備が大切なので、CM13.0へ向けてストックカーネルの可用性を把握するのと自分のウォームアップを兼ねて小手調べと言ったところです。

さすがに新しいカーネルは対応が楽で良いですね。ディスプレイHALやメディアHALは無加工で通りましたし、GXで最大の問題であるUID-basedルーティングのコミットも取り込まれているので、開発へのポテンシャルを感じさせます。

もっとも、CMのデバイスツリーはなまじハードウェアが良いためか、mako(Nexus 4)から色々と取り込まれているので、これをストックカーネル向けに変更してバグを取るのは逆に手間がかかりました。

私が確認した範囲では全ての機能が使えるはずですが、作業中にSIMスロットのピンを折ってしまったのでデータ通信は確認できていません。修理代もバカになりませんしどうしたものかと考えていますが、試される方がいれば動作報告いただければ。

詳しい更新内容はZのCM12.1用サポートページで確認ください。

CM12.1 for Xperia Z with Locked Bootloader

1:50 2
 

 


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

最新ビルド


2016/01/12(火)

cm-12.1-20160111-UNOFFICIAL-yuga
cm-12.1-20160111-UNOFFICIAL-yuga (ミラー)

yuga hijack-ramdisk for CM12.1

前回ビルドからの主な変更点
・01/09付(5.1.1_r33)のCMソースに更新
・hijack-ramdisk作成
・ベースバンドを掴むように
・音出力を修正
・GPSを修正
・各種センサーを修正
・FMを有効化
・CMHardware無効化

既知の不具合
・ガラ機能
・データ通信と通話は確認できていません

hijack-ramdisk考案の経緯

10:57 6

前回の投稿でXperiaはユーザーコミュニティが小さいということを書きましたが、GXの延命で重宝しているhijack-ramdiskにしても突然考案されたわけではなく、その手法自体は他の端末で使われていたものが元になっています。

Bootstrapの手法

オリジナルを辿れば、アイデアの元はClockworkMod Recoveryの開発で有名なKoushが2010年にMotorola Droid X用に作成した"Bootstrap"でしょう。hijack-ramdiskはシェルスクリプトですが、Bootstrapはカーネルモジュール(訂正:ただのバイナリでした)として作られています。処理の内容はほとんど同じで、/systemをカスタムROMで書き換えてしまう点も同じです。

KoushのBootstrapを更に洗練させた手法が、Hashcodeの"Safestrap"です。Safestrapは単体のmodというよりはTWRPのフォークとなっていて、XZDualRecoveryのような形でシステム起動中にプロセスをフックしてリカバリを起動します。そこから内蔵ストレージ内にパーティションを作成することで擬似的なマルチブートを可能にしています。ROMの初期イメージが提供されないような復旧の難しい端末上で、/systemを書き換えることなく安全にカスタムROMを使える点が"Safe"ということなんですね。

Hashcodeは開発者として私が目指したい姿でもあります。彼はブートローダーがロックされた多くのMotorolaデバイス向けにSafestrapと専用のカスタムROMを作成していますし、近年はAmazonのKindle Fire HD/HDXにもSafestrapが使われていました。(もっともKindleはLittle Kernelブートローダーの脆弱性が見つかって以降はアンロック出来るようになりましたが)

不遇なXperia?

常々疑問に思っているのは、三星、LG、Motoなどの端末は割と堅めのセキュリティがある割に、(例えばGalaxyはカーネルモジュールも署名されていると聞きます)それを回避する手法が生み出される一方、Xperiaはブートローダーの欠陥など致命的な脆弱性が見つかってもなかなか革新的な進展がありません。これは、S1BootをはじめSomcの実装が堅牢なのか、単に解析できるだけの人材がコミュニティにいないのか、よく分からないところです。(現に私のような弱小しかhijack-ramdiskを活用していませんし、Xperiaにはもっと開発の余地があると思います。)

私もhijack-ramdiskを洗練させたいと思っているのですが、何も無いところから進展させるのは難しいですね。それこそやる気を出せばせめてHashcodeのSafestrapを移植できそうなものですが、それをする人がいないのが辛いところです。

<参考>



新年の抱負と今後の展望

10:33 2


皆様、明けましておめでとうございます。

私がXperiaを弄るようになって既に3年以上が過ぎましたが、昨年はブログも立ち上げたことですし、これからも細く長く開発を続けて行ければ良いなと思う新年の朝です。
今後の方向性を明確にする意味でも、これからの展望を書き残しておきたいと思います。

なぜ活動するのか

私がAndroid界隈の片隅で活動を続ける最大の理由は、自分の開発知識・技量を高めたいという知的欲求から来ているのですが、このブログの副次的な目標として、自分の勉強の過程でビルドされたROMをたくさん取りそろえたいというのがあります。
それも、BLアンロックできる国際版ではなく、(今のところ)自分しか提供できないであろうBLロックされた国内モデル向けのROMやModを扱った、国内Xperia向けのワンストップサービス的な老舗を目指したいと思っています。
(というのも、私よりよほど経験のある方達が三星やHTCの国内モデルを色々と扱っているのを見ると、Xperia(開発)のファンベースとコミュニティの小ささをどうにかしたいという思いも沸くからです)

不安要素

もっとも、そういう思いと同時に、ファンベースのAndroid開発もそう長くはないという感覚もあります。AOSPが洗練されてセキュリティが固められると共に、サードのメーカーも締め付けを厳しくするので、一般人が口を出す余地がどんどん無くなって自作PC熱が冷めるのと似たような気分になりますね。
そもそも、Somc自体がいつまでもつかも分からないし、最近はコアなファンをどんどん切り離して大衆化しているので、アーリーアドプターにも愛想を尽かされた味気ないコモディティになっていくのでしょう。

私自身も本業の方が忙しくなってきているので、昔のような知識不足を時間と労力で補うやり方は効かなくなってきました。私のリソースの限界やAndroid開発界隈の熱の冷め方を見るに、それほど長くはもたないような気もします。

Android(とXperia)黎明期に精力的に活動されていた方々の今を見ていると、一番輝いていた時期はさぞ楽しかっただろうと羨ましくもありますね。

今後の展望

まあ、あまり不透明な先の話をしても仕方が無いので、今は深く考えず目下の開発を楽しみたいと思います。
GXでMarshmallowに追随するのも辛くなってきましたが、次はZとZ1を順番に攻略していきます。
Z3シリーズへの要望もあることは承知していますが、やはりメインで使っている端末は開発には使いにくいのです。もう一台開発用に揃えるか、来たるS820搭載Xperiaの購入後に引退させてから、となりそうですね。もちろん、それまで私のモチベーションとXperiaのファンベースが維持されていればの話ですが。

ともかく、今しばらくは細かいことは考えずに楽しめるだけ楽しんで知識欲を満たしたいと思います。


happy new year, happy development!
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の更新履歴は、各サポートページを確認ください。