Tag: Android

sdboot とは

本体の NAND に代えて、SD をシステムとアプリのデータ領域として使う手段。

  • メリット
    • SD に空きさえあれば、割と自由にメモりを増やすことが出来る。
    • root 取得出来る。その上、システムも SD に複製した領域を使うので、本体のシステム領域を直接弄って文鎮化するリスクが低い。(運用上のはなしであり、sdboot 化する過程では、相応のリスクはある)
  • デメリット
    • 保証が効かなくなる。
    • SD のクラスにもよるが、基本、読み書きが遅い。が、通常使用では支障無し。
    • SD カードの耐久性は?

SH-03C の sdboot、root取得方法

LYNX 3D SH-03C (Android 2.2 ビルド番号 02.01.01) を sdboot化し、rootを取得する方法の覚え書きです。

※ 以下の作業を行うと、DoCoMoおよびメーカーの保証対象外となります。また、これにより発生するいかなる事態に対しても、筆者はその責任を負いません。ご利用は自己責任にてお願いします。

準備

  1. PC に Android SDK をインストール。
  2. 必要なファイルを用意。
    • こちら から how2NANDUNLOCK_sh03c.zip をダウンロードし、解凍。
    • sdboot をダウンロード。(上記アーカイブに含まれる sdboot_r2 でも可。ただし、このページに記載の手順とは若干違うので readme に従うこと。)
  3. ダウンロード・解凍したファイルの中から、SHBreakV2、ISTweak、ae2break、busybox、flash_image、ubi-sh03c-bootkit.img、sdboot.zip(zipのまま)を1つのフォルダに集めておく。
    • ae2break は フォルダ BB_02_01_00 のもの。(ビルド番号 02.01.01の場合)
    • ubi-sh03c-bootkit.img は、フォルダ bootkit-sh03c_rev2 または bootkit-sh03c_overclock_rev2 のどちらでも可。
    • この作業は必須ではないが、ファイルを PC から SH-03C に転送するときに楽。
    • 各ファイルの簡単な説明はこちら
  4. SH-03C を USBデバッグモードにする。
    設定 > アプリケーション > 開発 > "USBでバッグ" を ON。

一時 root の取得

  1. SH-03C の WiFi接続を切る*1
    設定 > 無線とネットワーク > "Wi-Fi" を OFF。
  2. SH-03C と PC を USB で接続。
  3. PC のターミナル(コマンドプロンプト)を起動。
  4. PC から SH-03C に SHBreakV2 と ISTweak をインストール。
    > cd ファイルを保存したディレクトリ
    > adb install SHBreak.apk
    > adb install ISTweak.apk
  5. SH-03C で 一時root を有効化。
    1. SHBreakV2 を起動し"Break!"をタップ。英語のアラートを"OK"で抜け、"閉じる"。
    2. ISTweak を起動し"suコマンドを有効にします"をタップ。

以上で、一時的に root 権限を取得出来ます。

bootkit からの起動準備(リカバリイメージ書き換え)

(ae2brek_for_sh03c 付属の readme.txt を参照)

  1. 必要なファイルを SH-03C に転送。
    > adb push ae2break /data/local/
    > adb push busybox /data/local/
    > adb push flash_image /data/local/
    > adb push ubi-sh03c-bootkit.img /sdcard/
  2. ADBで接続し、シェルを準備、root権限を取得。
    > adb shell
    $ au
  3. 転送したファイルに実行権限を与える。
    # chmod 555 /data/local/ae2break
    # chmod 555 /data/local/busybox
    # chmod 555 /data/local/flash_image
  4. NANDロックを解除する。
    # stop mediayamaha
    # kill -9 `/data/local/busybox pidof mediayamahaserver`
    # /data/local/ae2break
  5. オリジナルのブートイメージをバックアップ。
    # mkdir /sdcard/NANDUNLOCK
    # cat /dev/mtd/mtd2ro > /sdcard/NANDUNLOCK/recovery_org.img

    必要に応じて、"/sdcard/NANDUNLOCK/recovery_org.img"を PC に転送*2して保存しておく。

  6. リカバリイメージを bootkit に書き換える。
    # /data/local/flash_image recovery /sdcard/ubi-sh03c-bootkit.img

    (エラーが出たら、再度同じコマンドを実行してみる。)

bootkit で起動

  1. su権限でリカバリイメージから起動する。
    # reboot recovery
  2. SH-03Cが再起動し、カウントダウンが始まったら bootkit での起動に成功。

フォーカスキー(カメラアプリのシャッターボタン)を軽く*3押し、自動起動を停止させる。

sdboot

sdboot 付属の readme.txt を参照)
sdboot_r2 を使用する場合は、以下 readme.txt に従うこと。

  1. ADBで接続し、シェルを準備する。
    > adb shell
    $ _su
    # /bin/sh
  2. SDCARDを準備
    # sd
    # rw /mnt/sdcard
  3. SDCARDにsystemとdata領域を共に384MB、battlogとcalllog領域を2MBで用意する。
    (データ領域を標準より拡張したい場合は、下記の "count=384" を "count=サイズ(MB)" に変更する。)
    # mkdir /mnt/sdcard/sdboot
    # dd if=/dev/zero of=/mnt/sdcard/sdboot/system.ext2 bs=1M count=384
    # dd if=/dev/zero of=/mnt/sdcard/sdboot/data.ext2 bs=1M count=384
    # dd if=/dev/zero of=/mnt/sdcard/sdboot/battlog.ext2 bs=1M count=2
    # dd if=/dev/zero of=/mnt/sdcard/sdboot/calllog.ext2 bs=1M count=2
  4. SDCARDに用意した領域をext2でフォーマットする。
    # losetup /dev/block/loop0 /mnt/sdcard/sdboot/system.ext2
    # losetup /dev/block/loop1 /mnt/sdcard/sdboot/data.ext2
    # losetup /dev/block/loop2 /mnt/sdcard/sdboot/battlog.ext2
    # losetup /dev/block/loop3 /mnt/sdcard/sdboot/calllog.ext2
    # mkfs.ext2 /dev/block/loop0
    # mkfs.ext2 /dev/block/loop1
    # mkfs.ext2 /dev/block/loop2
    # mkfs.ext2 /dev/block/loop3
  5. SDCARDの領域をマウントする。
    # mkdir /system /data /battlog /calllog
    # mount -t ext2 /dev/block/loop0 /system
    # mount -t ext2 /dev/block/loop1 /data
    # mount -t ext2 /dev/block/loop2 /battlog
    # mount -t ext2 /dev/block/loop3 /calllog
  6. MTDのsystem、dataをSDCARDにコピーする。(sharp_moviesは除外)
    # mkdir /system0 /data0 /battlog0 /calllog0
    # mount -t yaffs2 -o ro /dev/block/mtdblock4 /system0
    # mount -t yaffs2 -o ro /dev/block/mtdblock8 /data0
    # mount -t yaffs2 -o ro /dev/block/mtdblock7 /calllog0
    # mount -t yaffs2 -o ro /dev/block/mtdblock6 /battlog0
    # (cd /system0 && tar cf - --exclude sharp_movies .) | (cd /system && tar xvf -)
    # (cd /data0 && tar cf - .) | (cd /data && tar xvf -)
    # (cd /battlog0 && tar cf - .) | (cd /battlog && tar xvf -)
    # (cd /calllog0 && tar cf - .) | (cd /calllog && tar xvf -)
  7. ADBで起動スクリプト等を転送する。(ココは、別のターミナルを起動して下記コマンドを実行。または、bootkit 起動前に転送しておく。)
    > adb push sdboot.zip /mnt/sdcard
  8. SDCARDに起動スクリプト等を展開する。
    # cd /mnt/sdcard
    # unzip sdboot.zip
  9. アンマウントし、端末をリセット。
    # cd /
    # umount /mnt/sdcard
    # umount /system0 /data0 /battlog0 /calllog0
    # umount /system /data /battlog /calllog
    # reboot recovery

SH-03Cが bootkit で再起動するので、カウントダウンが0になるまで放っておくか、メニューキーを押すと、sdboot となります。

root 権限の管理

  1. Superuser をインストール。
  2. リカバリイメージとしてオーバークロックカーネル(bootkit-sh03c_overclock_rev2)を導入した場合は、以下のコマンドを実行することで Superuser から suバイナリの更新が出来るようになる。
    1. ADBで接続し、シェルコマンドを実行する。
      > adb shell
      $ /bin/suu
      # rw /system
      # cp /bin/suu /system/bin/su
    2. SH-03C で Superuser を起動し、info > su binary vx.x.x "tap to check for updates" をタップし、"アップデート"をタップして su バイナリを更新する。

運用

  • 通常起動(NANDからの起動): 電源OFFからON。エラーなどで勝手に再起動した時など。
  • sdboot (SDからの起動): > SHBreak で "Break!"、ISTweak で "再起動" → "リブート"。

補足

必要なファイルの個別リンクなど