2011年8月29日月曜日

ODROID-7のTerminal Emulatorでsuしよう

久々のODROID-7ネタ。まだこんなことやってたんですよ。

ODROID-7に限らずAndroidのソースコードがあればこそ出来ることがあります。

さて本題。
ODROID-7には「Dev Tools」というアプリがプリインストールされており、その中でTerminal Emulatorが起動できます。Linuxのシェルでコマンドを入力することができるわけです。
しかし、このターミナルはユーザ権限しか与えられておらず殆ど何にも役に立ちません。

そこで、suコマンドでrootユーザに変わろうと思いきや
$ su
su: uid 10004 not allowed to su
と拒否されてしまいます。

これはなぜかというと、Androidソースツリーに入っているsuコマンドの方でユーザIDをチェックして弾いているためです。
ソースコードで言うと、android/system/extras/su/su.c の62行目あたりにその記述があります。
この部分をコメントアウトしてやればいいわけですね。

てな感じで。

ソースを修正したらAndroidのフルビルドをかけてもいいですが、既に一回ビルド済みであるならばsuのみ再ビルドをかけることもできます。(なおODROID-7のビルド環境構築~フルビルド方法についてはこちらを参照。)
$ cd android
(Androidのソースツリーのトップディレクトリに移動しまして)
$ . build/envsetup.sh
(mmといった部分ビルドのコマンドが利用可能になります)
$ cd system/extras/su/
$ TARGET_PRODUCT=odroid7 mm
これで out/target/product/odroid7/system/xbin/su
が再ビルドされます。

ビルドが完了したら、専用USBにてadb経由でODROID-7に送り込んでやります。(なお、adbでの接続方法についてはこちらを参照。)
$ cd ../../../
(再びAndroidのソースツリーのトップディレクトリに移動しまして)
$ adb push out/target/product/odroid7/system/xbin/su /system/xbin/
(直接置き換えてしまいます。※その前に、元のものを別名でバックアップを取っておいてもよいでしょう。)
$ adb shell
(仕上げはadb shellにてroot実行権限をつけてやります)
# chmod 6755 /system/xbin/su
以上で作業完了。

セキュリティ上問題ありですが、実験用途としてはより便利に使えるようになるかも。
まあ、adb shellは普通にroot権限でフルアクセスできることは知っての通りですが。

ではまた。

0 件のコメント:

コメントを投稿