LinuxでL-01Dのroot権限を取る
ボクの購入したL-01Dのファームウェアはv10b。なんとv10bまではroot奪取できるようなので、しました(やっと)。
いつもどおり作業はXubuntuで。基本的にL-01D wikiに記載されていることと同じ事をLinuxでやっているだけです。
- Android SDKの準備
ここからダウンロードしてきてhomeディレクトリに展開。
/home/ユーザー名/android-sdk-linux/tools/android を実行し、必要なモノをインストール(多分Toolsの中身だけでいいはず)。 - PATHを通す
このままじゃadbコマンドを実行するたびにフルパス指定しなくちゃならないので、PATHを通しておきます。
$ export PATH=$PATH:/ユーザー名/android-sdk-linux/platform-tools
上記のコマンドでパスを通したら
$ adb start-server
でPATHが通っているか確認。通っていればadbサーバが動き始めます。 - デバイスファイルの生成
/etc/udev/rules.d/51-android.rules を生成。中身は
「SUBSYSTEM=="usb", SYSFS{idVendor}=="1004", MODE="0666"」と記述。
デバイスファイルを作ったら、設定 > アプリケーション > 開発 > USBデバッグにチェックを入れ、「PC同期モード」でL-01DをUSB接続。
$ adb devices
上記コマンドでL-01Dが認識されていれば成功。 - suとbusyboxのダウンロード
ここからSUBBZR.zipをダウンロードし、中のsuとbusyboxを/homeに置く。これで下準備は完了。 - root奪取
$ adb shell
$ mv /data/misc/wifi/config /data/misc/wifi/config_
$ ln -s /data/local.prop /data/misc/wifi/config
ここでL-01Dでwifi on offと切り替える
$ mv /data/misc/wifi/config_ /data/misc/wifi/config
echo ro.kernel.qemu=1 > /data/local.prop
端末を再起動。
どうやらlocal.propのシンボリックリンクをwifiの設定に偽装してアクセス権を書き換えている?みたいです。
再起動したら先ほどダウンロードしてhomeディレクトリに置いておいたsuとbusyboxをL-01Dに送ります。
$ adb shell mkdir /data/local/bin
$ adb push busybox /data/local/bin/busybox
$ adb push su /data/local/bin/su - install-recovery.sh書き込み
$ adb shell
(プロンプトが#になっていることを確認)
# chmod 755 /data/local/bin/busybox
# chmod 755 /data/local/bin/su
# /data/local/bin/busybox mount -o remount,rw -t ext4 /dev/block/mmcblk0p27 /system
続いてinstall-recovery.shの書き込み。wikiではechoコマンドを叩きまくって追記していますが、非常に煩雑なので先にPC側でファイルを作って先ほどのsuとbusyboxと同じようにadb pushで送ってしまいます。
$ nano install-recovery.sh
エディタはviでもemacsでもメモ帳みたいなのでも何でもどうぞ。ファイルの中身は
#!/system/bin/sh
これをコピーして貼りつければOK。ファイルを保存したらもう1つターミナルを起動して
sleep 5
/data/local/bin/busybox mount -o rw,remount /dev/block/mmcblk0p27 /system
/data/local/bin/busybox cp /data/local/bin/busybox /system/xbin/busybox
/data/local/bin/busybox cp /data/local/bin/su /system/xbin/su
chown root.shell /system/xbin/su
chmod 4755 /system/xbin/su
chown root.shell /system/xbin/busybox
chmod 755 /system/xbin/busybox
busybox mount -o ro,remount /dev/block/mmcblk0p27 /system
$ adb push install-recovery.sh /system/etc/install-recovery.sh
これでinstall-recovery.shがL-01Dにコピーされました。adb shellを実行中のターミナルに戻って
# chmod 755 /system/etc/install-recovery.sh
# mv /system/bin/seccmmond /system/bin/seccmmond_
# /data/local/bin/busybox mount -o remount,ro -t ext4 /dev/block/mmcblk0p27 /system
# /system/etc/install-recovery.sh
おそらくここで再起動(多分)。 再起動後
# echo > /data/local.prop
もう一度端末再起動で完了!!SuperuserをPlayストアからインストールしておしまいです。
うまく行かない場合は/system/xbinにsuとbusyboxがちゃんとコピーされているか確認してみてください。
今まではroot奪取と言っても解説サイトのコマンドをコピペして実行しているだけでしたが、Linuxに慣れてくると「そのコマンドが何をしているか」がわかるようになってきました(やっと今更)。Androidも中身はLinux、Windowsで作業していても作業の途中途中でadb shellを実行して
cdコマンドlsコマンド叩いて処理がちゃんと行われているか確認していれば「なぜかうまくいかない」ってことは無いはず。