中華Androidタブレット Cube T8 Plus。
前回導入したSP Flash Toolで端末のNVRAM領域を読み出してみる。

おおまかな流れ

  1. ScatterファイルからNVRAM領域のアドレスを確認
  2. SP Flash Toolで読み出す
いきなりROM焼きに挑む前に、まずはリードオンリーで触ってみる。

ScatterファイルからNVRAM領域のアドレスを確認

ROMイメージに同梱の MT6753_Android_scatter.txt に各パーティションの情報が記されている。
(T8PLUS_v1.1_20151224 の場合「软件 / 0502L800_UE78_T8PG4W10F13TTEXMX8C(STD)_FC24_IND_FULL」フォルダ内)

拡張子が示すようにただのテキストファイルなので、普通のテキストエディタでも内容を確認できる。
(改行がLFなのでWindowsのメモ帳ではさすがに読みづらいけど)
- partition_index: SYS3
  partition_name: nvram
  file_name: NONE
  is_download: false
  type: NORMAL_ROM
  linear_start_addr: 0x380000
  physical_start_addr: 0x380000
  partition_size: 0x500000
  region: EMMC_USER
  storage: HW_STORAGE_EMMC
  boundary_check: true
  is_reserved: false
  operation_type: BINREGION
  reserve: 0x00
partition_name: nvram は開始アドレスが 0x380000、サイズが 0x500000 だと分かった。

SP Flash Toolに読み出したいアドレスを入力して読み出す

ReadbackタブのAddボタンを押すと、リストに1行追加される。
SP Flash Tool - Readback(1)
この行をダブルクリックすると編集ダイアログが開く。
  1. 読み出したイメージを保存するファイルパスを指定
  2. Start AddressとLengthを指定
    SP Flash Tool - Readback(2)
これでRead Backボタンを押して端末をUSB接続すれば読み出しが始まる。……実機なら。

今回は仮想環境のため、PCに端末をつないだだけではゲストOSから認識できない。

仮想OS側にUSB機器を認識させる

  1. ツールのRead Backボタンを押す
  2. 電源OFFの端末をPCにUSB接続する
  3. すかさずVirtualBoxの[デバイス]→[USB]を選び、「MediaTek MT65xx Preloader [0100]」を選択
    VirtualBox - USB 1
  4. 成功すればウィンドウ下部のプログレスバーが進んで、さいごにOKマークが表示される
    SP Flash Tool - Readback 3
成功しない場合は、まずはVirtualBox操作タイミングを疑う。
端末がSP Flash Toolを認識できるのは1〜2秒程度。
選択肢に「MediaTek MT65xx Preloader [0100]」がない場合:
早すぎたか、または遅すぎた
選択できたけどツールは作動せず、端末画面が充電中表示になった場合:
操作が気持ち遅かった
失敗した場合は、ツールのStopボタンを押して、USBケーブル抜いたらまた 1. から再挑戦。

一度でもうまく行ったら、次からは自動認識されるように設定してしまってもいい。
  1. 電源OFF端末をUSB接続(SP Flash Toolは起動してなくてもいい)
  2. VirtualBoxメニュー[デバイス]→[USB]→[USBの設定…]
  3. USBデバイスフィルター(F)欄の右隣の追加アイコン(プラス記号)をクリック
  4. 「MediaTek MT65xx Preloader [0100]」を選択
    VirtualBox - USB 2
  5. ここに選択肢が現れない場合は端末をつなぎなおして、すばやく試す

この設定をしてあっても認識が間に合わないこともある。そんなときは深く考えずにStop押してケーブル抜いて再トライ。

トラブルシューティング

何度挑戦してもうまくいかない場合は、タイミング以外の問題があるのかも。
SP Flash Tool の [Options]→[General]→[Tracing]で [Enable tracing] をオンにすると、より詳細な情報が得られる。(トレースログは指定したファイルパスの他、ターミナルにも出力される)
syslog等と照らし合わせつつ試行錯誤する。
/etc/udev/ に何かしらルールファイルを書かないといけなかったり、PCのUSB 3.0ポートに挿すとダメだったり。

読み出したイメージの中身を確認

無事5,242,880バイトのファイルが作成された場合、それっぽい内容が入っているか確認してみる。
$ hexdump -e '/1 "%02X "' nvram.img | grep -o '48 A2 2D .. .. ..'
48 A2 2D xx xx xx
48 A2 2D yy yy yy
確かにMACアドレスが記録されていた。(Wi-FiとBluetoothの2種類)
IMEIは生の値では記録されていない模様。

余談:NVRAMとNVDATAはどういう関係なんだろう

Scatterファイルには次のような記述もある。
- partition_index: SYS19
  partition_name: nvdata
  file_name: NONE
  is_download: false
  type: EXT4_IMG
  linear_start_addr: 0x6b00000
  physical_start_addr: 0x6b00000
  partition_size: 0x2000000
  region: EMMC_USER
  storage: HW_STORAGE_EMMC
  boundary_check: true
  is_reserved: false
  operation_type: INVISIBLE
  reserve: 0x00
こちらは32MBとNVRAM領域(5MB)より大きいのだけど、ext4とあるように読み出したファイルはループバックマウントして中身を確認できる。
どうもNVRAMと同じ内容のような気がするのだけど……NVRAMがマスターでNVDATAがコピーなんだろうか? もしくは逆?
(それぞれの領域をわざと壊してみれば分かることもありそうだけど、興味本位で実験するにはちょっとハイリスク……)

次回

読み出しに成功したので、次はいよいよ書き込み(ROM焼き)にチャレンジ。
カスタムリカバリを焼いてみたい。