LG Optimus F3Q D520 その2
USBドライバ
USBドライバは、端末をPCに接続した時点で内蔵ストレージ領域から自動でインストールされる。
実際には、端末内の
/system/usbautorun.iso
がマウントされ、仮想的なCDドライブとしてドライバCDが認識される仕組み。
isoファイルに含まれているドライバは
- LGUnitedMobileDriver_S4981MAN38AP22_ML_WHQL_Ver_3.8.1.msi
MTP、ADBドライバ等も含まれている。
root取得
上記から入手出来るsaferoot.zipでroot取得可能。
元々はsamsungのGalaxy S4用に作られたルート化キットの模様。
root化手順
事前に
- ADB接続
- 端末の「Settings」−「Developer options」−「USB debugging」にチェック
以上を確認。
改めてPCにて
- saferoot.zipを解凍
- install.batを実行
- デバイスの接続を求められるので、USBで端末を接続
- PC側でLG_PC_Programs.exeの自動実行を求められるがキャンセル
- 端末側のUSB接続モード選択画面は表示したままにしておく
- 以後、install.batの指示通りに
以上でroot化完了。
注意点としては、端末側のUSB接続モード選択画面を表示したままにしておくこと。
何度か試したところ、表示をキャンセルすると、bat作業が前に進まなかった。
Nandバックアップ
root化出来た所で、念の為現在のNandイメージをバックアップしておく。
#/dev/block/platform/msm_sdcc.1/by-name/ lrwxrwxrwx root root 1970-01-02 00:00 aboot -> /dev/block/mmcblk0p5 lrwxrwxrwx root root 1970-01-02 00:00 boot -> /dev/block/mmcblk0p7 lrwxrwxrwx root root 1970-01-02 00:00 cache -> /dev/block/mmcblk0p14 lrwxrwxrwx root root 1970-01-02 00:00 drm -> /dev/block/mmcblk0p20 lrwxrwxrwx root root 1970-01-02 00:00 eksst -> /dev/block/mmcblk0p26 lrwxrwxrwx root root 1970-01-02 00:00 encrypt -> /dev/block/mmcblk0p27 lrwxrwxrwx root root 1970-01-02 00:00 fota -> /dev/block/mmcblk0p21 lrwxrwxrwx root root 1970-01-02 00:00 fsg -> /dev/block/mmcblk0p18 lrwxrwxrwx root root 1970-01-02 00:00 grow -> /dev/block/mmcblk0p29 lrwxrwxrwx root root 1970-01-02 00:00 misc -> /dev/block/mmcblk0p22 lrwxrwxrwx root root 1970-01-02 00:00 modem -> /dev/block/mmcblk0p1 lrwxrwxrwx root root 1970-01-02 00:00 modemst1 -> /dev/block/mmcblk0p10 lrwxrwxrwx root root 1970-01-02 00:00 modemst2 -> /dev/block/mmcblk0p11 lrwxrwxrwx root root 1970-01-02 00:00 mpt -> /dev/block/mmcblk0p23 lrwxrwxrwx root root 1970-01-02 00:00 pad -> /dev/block/mmcblk0p9 lrwxrwxrwx root root 1970-01-02 00:00 persist -> /dev/block/mmcblk0p16 lrwxrwxrwx root root 1970-01-02 00:00 rct -> /dev/block/mmcblk0p28 lrwxrwxrwx root root 1970-01-02 00:00 recovery -> /dev/block/mmcblk0p17 lrwxrwxrwx root root 1970-01-02 00:00 rpm -> /dev/block/mmcblk0p6 lrwxrwxrwx root root 1970-01-02 00:00 rpmbak -> /dev/block/mmcblk0p25 lrwxrwxrwx root root 1970-01-02 00:00 sbl1 -> /dev/block/mmcblk0p2 lrwxrwxrwx root root 1970-01-02 00:00 sbl2 -> /dev/block/mmcblk0p3 lrwxrwxrwx root root 1970-01-02 00:00 sbl3 -> /dev/block/mmcblk0p4 lrwxrwxrwx root root 1970-01-02 00:00 sns -> /dev/block/mmcblk0p12 lrwxrwxrwx root root 1970-01-02 00:00 ssd -> /dev/block/mmcblk0p19 lrwxrwxrwx root root 1970-01-02 00:00 system -> /dev/block/mmcblk0p13 lrwxrwxrwx root root 1970-01-02 00:00 tz -> /dev/block/mmcblk0p8 lrwxrwxrwx root root 1970-01-02 00:00 tzbak -> /dev/block/mmcblk0p24 lrwxrwxrwx root root 1970-01-02 00:00 userdata -> /dev/block/mmcblk0p15
dd if=/dev/block/mmcblk0p5 of=/storage/external_SD/partbackup/mmcblk0p5_aboot bs=4096 dd if=/dev/block/mmcblk0p7 of=/storage/external_SD/partbackup/mmcblk0p7_boot bs=4096 dd if=/dev/block/mmcblk0p10 of=/storage/external_SD/partbackup/mmcblk0p10_modemst1 bs=4096 dd if=/dev/block/mmcblk0p11 of=/storage/external_SD/partbackup/mmcblk0p11_modemst2 bs=4096 dd if=/dev/block/mmcblk0p12 of=/storage/external_SD/partbackup/mmcblk0p12_sns bs=4096 dd if=/dev/block/mmcblk0p13 of=/storage/external_SD/partbackup/mmcblk0p13_system bs=4096 dd if=/dev/block/mmcblk0p16 of=/storage/external_SD/partbackup/mmcblk0p16_persist bs=4096 dd if=/dev/block/mmcblk0p17 of=/storage/external_SD/partbackup/mmcblk0p17_recovery bs=4096 dd if=/dev/block/mmcblk0p18 of=/storage/external_SD/partbackup/mmcblk0p18_fsg bs=4096 dd if=/dev/block/mmcblk0p19 of=/storage/external_SD/partbackup/mmcblk0p19_ssd bs=4096 dd if=/dev/block/mmcblk0p1 of=/storage/external_SD/partbackup/mmcblk0p1_modem bs=4096 dd if=/dev/block/mmcblk0p20 of=/storage/external_SD/partbackup/mmcblk0p20_drm bs=4096 dd if=/dev/block/mmcblk0p21 of=/storage/external_SD/partbackup/mmcblk0p21_fota bs=4096 dd if=/dev/block/mmcblk0p22 of=/storage/external_SD/partbackup/mmcblk0p22_misc bs=4096 dd if=/dev/block/mmcblk0p23 of=/storage/external_SD/partbackup/mmcblk0p23_mpt bs=4096 dd if=/dev/block/mmcblk0p24 of=/storage/external_SD/partbackup/mmcblk0p24_tzbak bs=4096 dd if=/dev/block/mmcblk0p25 of=/storage/external_SD/partbackup/mmcblk0p25_rpmbak bs=4096 dd if=/dev/block/mmcblk0p26 of=/storage/external_SD/partbackup/mmcblk0p26_eksst bs=4096 dd if=/dev/block/mmcblk0p27 of=/storage/external_SD/partbackup/mmcblk0p27_encrypt bs=4096 dd if=/dev/block/mmcblk0p28 of=/storage/external_SD/partbackup/mmcblk0p28_rct bs=4096 dd if=/dev/block/mmcblk0p29 of=/storage/external_SD/partbackup/mmcblk0p29_grow bs=4096 dd if=/dev/block/mmcblk0p2 of=/storage/external_SD/partbackup/mmcblk0p2_sbl1 bs=4096 dd if=/dev/block/mmcblk0p3 of=/storage/external_SD/partbackup/mmcblk0p3_sbl2 bs=4096 dd if=/dev/block/mmcblk0p4 of=/storage/external_SD/partbackup/mmcblk0p4_sbl3 bs=4096 dd if=/dev/block/mmcblk0p6 of=/storage/external_SD/partbackup/mmcblk0p6_rpm bs=4096 dd if=/dev/block/mmcblk0p8 of=/storage/external_SD/partbackup/mmcblk0p8_tz bs=4096 dd if=/dev/block/mmcblk0p9 of=/storage/external_SD/partbackup/mmcblk0p9_pad bs=4096 dd if=/dev/block/mmcblk0p15 of=/storage/external_SD/partbackup/mmcblk0p15_userdata bs=4096 dd if=/dev/block/mmcblk0p14 of=/storage/external_SD/partbackup/mmcblk0p14_cache bs=4096
- /dev/block/platform/msm_sdcc.1/by-num/
- /dev/block/platform/msm_sdcc.3/by-num/
も確認したが、リンク先は上記ファイル群と同じパーティションとなっていたので、上記29ファイルだけ取っておけばOKかと思われる。
TWRPカスタムリカバリのインストール
よりバイナリを入手。2015/04/07時点での最新版は v2.8.1.0 build 5。
パッケージ解凍後、バイナリを端末の適当な場所に配置。
adb push twrp_v2.8.1.0_build5_fx3q_FR-OFF.img /storage/external_SD/
adb shell dd if=/storage/external_SD/twrp_v2.8.1.0_build5_fx3q_FR-OFF.img of=/dev/block/platform/msm_sdcc.1/by-name/recovery
再起動後、TWRP起動を確認。
adb reboot recovery
なお、端末の電源投入時に音量(下)と電源ボタンの同時押しでリカバリモードに入ることが出来る。
TWRP導入後も端末標準のリカバリ画面が表示されるが、そこでリカバリを実行(電源ボタンを二回押す)とTWRPが起動する。
ただし、上記操作によって端末単体でリカバリモードを起動した場合、起動時点で/dataがwipeされてしまう模様。
/dataをwipeせずにTWRPリカ(リカバリモード)を起動したい場合は、ADB或いは端末エミュレータからCUIでリブートを実施する必要がある。
カスタムカーネルのインストール
カスタムROMをインストールするために対応したカーネルに入れ替える。
なお、このカーネルは標準ROMでもそのまま使える。
よりバイナリを入手。2015/04/09時点での最新版は v1.5_build6(v2.0も開発中とあるが、2015/04/13現在はまだ公開されていない模様)
ダウンロードしたバイナリを端末の適当な場所に配置。
adb push sediKERNEL_JB-v1.5_build6.img /storage/external_SD/
TWRPを起動。ただし、TWRPはADB対応版である必要がある。(v2.8.1.0 build 5以降はADB対応)
ADBドライバはLG純正ではなく、Google USB Driverが適用される。自動で当たらない場合があるので、その際は手動でGoogle USB Driverを指定。
TWRP起動後、カーネルを書き込み。なお、標準ROMとTWRP環境下では外部SDのマウントポイントが違うことに注意。
adb dd if=/external_sd/sediKERNEL_JB-v1.5_build6.img of=/dev/block/platform/msm_sdcc.1/by-name/boot
再起動後、Kernel Ver.を確認する。
標準システムの「Settings」−「About phone」−「Software information」−「Kernel version」では”Unavaliable”となっていてVer.を確認出来ない。
そのため、ターミナルまたはadb接続のCUIで確認する。
uname -r
3.4.0-sediKERNEL-v1.5 presented by xdajog
カスタムROM(hLe Storm ROM)のインストール
よりzipパッケージを入手。2015/04/09時点での最新版は Fx3q_20150228。
なお、パッケージはbootパーティション用とrecoveryパーティション用の二種がある。
基本的にはインストール先のパーティションに合わせて設定に差異があるだけな模様。実際にzipに同梱されているboot.imgをバイナリ比較してみたが差異は見られなかった。
さらに言うとこのboot.imgは上述の sediKERNEL_JB-v1.5_build6.img とも同一である。
今回はrecoveryパーティションのTWRPをそのまま残し、bootパーティションにインストールするため、
- hLe_Storm_Fx3q_20150228-Boot.zip
を使用する。
ダウンロードしたzipを端末の適当な場所に配置。
adb push hLe_Storm_Fx3q_20150228-Boot.zip /storage/external_SD/
TWRPを起動。
Installから、先程転送したzipパッケージを指定。
Install後、Dalvik cacheのwipeを促されるので、wipe実行。
念の為、dataもwipeして再起動。
ちなみに端末単体でリカバリを起動した場合は、その時点でwipeが実行されているため、改めてTWRPからwipeを実行してもFailedとなる。
基本的には純正ROMベースとなる。Android Ver.は 4.1.2。
ただし、純正ROMとは異なりT-MOBILE関係のアプリ等は入らない。
ホーム画面はAPEXランチャーを使用。
全体的に純正準拠のスケルトンと言ったカンジ。
軽く動作確認してみた範囲では、
APEXランチャーはハードキーでスクリーン移動する際、フォーカスを見失いエラーで落ちることが多々あった。
ホーム画面に関しては別アプリに入れ替えた方が良いかもしれない。
カスタムROMインストール後のパーティション差異
root化直後に取ったddイメージと比較してみたところ、以下のパーティション内容に差異が見られた。
boot -> /dev/block/mmcblk0p7 modemst1 -> /dev/block/mmcblk0p10 modemst2 -> /dev/block/mmcblk0p11 sns -> /dev/block/mmcblk0p12 system -> /dev/block/mmcblk0p13 cache -> /dev/block/mmcblk0p14 userdata -> /dev/block/mmcblk0p15 persist -> /dev/block/mmcblk0p16 recovery -> /dev/block/mmcblk0p17 drm -> /dev/block/mmcblk0p20 mpt -> /dev/block/mmcblk0p23 rct -> /dev/block/mmcblk0p28
boot、system、cache、userdata、recovery辺りに差異があるのは当然ながら、modemst1辺りも変わってるのは意外だった。
このへんが変わってると言うことは、efs領域も触られてる?
逆に純正環境へリストアする際には、このへんもきちんと戻す必要があると言うことになる。
改めて、再度リストアを行ってみたところ、以下の領域については書き戻しを行う度にハッシュ値が変化することが分かった。
modemst1 -> /dev/block/mmcblk0p10 modemst2 -> /dev/block/mmcblk0p11 sns -> /dev/block/mmcblk0p12 persist -> /dev/block/mmcblk0p16 drm -> /dev/block/mmcblk0p20 mpt -> /dev/block/mmcblk0p23 system -> /dev/block/mmcblk0p13 cache -> /dev/block/mmcblk0p14 userdata -> /dev/block/mmcblk0p15
同一のイメージで書き戻しても変化が見られるため、これらの領域については可変、或いは一部が可変な領域と思われる。