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にて

  1. saferoot.zipを解凍
  2. install.batを実行
  3. バイスの接続を求められるので、USBで端末を接続
  4. PC側でLG_PC_Programs.exeの自動実行を求められるがキャンセル
  5. 端末側のUSB接続モード選択画面は表示したままにしておく
  6. 以後、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導入後も端末標準のリカバリ画面が表示されるが、そこでリカバリを実行(電源ボタンを二回押す)と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(hLe Storm ROM)

 基本的には純正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

 同一のイメージで書き戻しても変化が見られるため、これらの領域については可変、或いは一部が可変な領域と思われる。