2011-06-30 5 views
2

私はファイルシステムの内容を変更するアプリを書いています。これを行うための要件の1つは、システムを読み書き可能にすることです。Androidでユニバーサルシステムマウント

mount -o rw,remount -t yaffs2 /dev/block/mtdblock3 /system 

私は誰かが良く、これはどのように動作するかを説明することができます願っています:ここや他のソースから、私は広く受け入れられているコマンドは、このあることがわかりました。私はそれがyaffs2ファイルシステムを使って作業していて、/ dev/block/mtdblock3ディレクトリを/ systemとしてマウントしようとしていることを理解しました。私の電話でmountコマンドを発行すると、/ systemはyaffs2ではなくext3として表示されます(ext3をyaffs2に置き換えても同様です)。また、/ dev/block/mtdblock3は既存のディレクトリではありません。

これはAndroidよりもLinuxの質問のほうが多いかもしれませんが、誰かがこれについてすべて知っていると確信しています。最も重要なのは、このコマンドがどれほど普遍的であるか?私はこれを膨大な種類のデバイスにリリースする予定です。他のファイルシステムに対応する必要がありますか?それともこれは「うまくいくの?

+0

'/ system'を読み書き可能にしたいと思ったらすぐに(あるいはファイルシステムの混乱を招くように)、すべてのベットはオフになっています。 – geekosaur

+0

geekosaurが正しいです。 HTC DesireのようなS-OFFになっているデバイスでは、復旧モードでない限り、システムパーティションに書き込むことはできません。 –

+0

私は書き込みを許可するためにS-OFFを、それを制限するS-ONを理解しました。しかし、私はS-ONがルートへのアクセスを許可しないと考えていました。 – jarvisteve

答えて

0

/systemパーティションに対応するデバイスの場所は、使用されているファイルシステムと同様に、デバイス固有です。単一の標準コマンドはありません。さらに、ファイルシステムがまったく変更可能であるという保証はありません。ルートfsがcramfs上や、ランダムに上書きされにくいタイプのフラッシュ上にあることは完全に可能です。一部の電話機では、実際のデバイスの場合は/proc/mounts/systemの場合はfsタイプを確認するだけで十分です。他の人には、読み書きを再マウントできないことがあります。あなたのAndroidデバイスが根付いしなければならないとbusyboxのをインストールする必要があります覚えておいてください

grep " /system " /proc/mounts | awk '{system("mount -o rw,remount -t "$3" "$1" "$2)}'

+0

ありがとうございます。 ADBはどのようなデバイスをデバッグモードでマウントすることができますか? 「ADB再マウント」は、接続されたすべてのデバイスを読み書き可能にマウントします。 – jarvisteve

+0

r/wを再マウントすることができる場合は、 'mount -o remount、rw/path/to/mount/point'が実行します。しかし、それが最初に可能であるという保証はありません。 – bdonlan

0

はこれを試してみてください。再び

チャット

1

私はそれをできるだけ普遍的なにするために、私のアプリの一つで、これを使用しています。もちろん、仕事をするには根っこの電話が必要です。

FileInputStream inputStream; 
BufferedReader r; 
String line, device = "", fs = ""; 

try { 
    inputStream = new FileInputStream("/proc/mounts"); 
} catch (FileNotFoundException e) { 
    Log.e("Could not read mounts");  
    return; 
} 

r = new BufferedReader(new InputStreamReader(inputStream)); 

//find device mounted as system and file system type 
try { 
    while ((line = r.readLine()) != null) { 
     if(line.indexOf("/system") >= 0) { 
      String mount[] = line.split(" "); 
      device = mount[0]; 
      fs = mount[2]; 
      break; 
     } 
    } 
    inputStream.close(); 
} catch (IOException e) { 
    Log.e("Could not read mounts");  
    return; 
}  

//mount system as rw 
CommandCapture command = new CommandCapture(0, "mount -o rw,remount -t " + fs + " " + device + " /system"); 
try { 
    RootTools.getShell(true).add(command).waitForFinish(); 
} catch (Exception e) { 
    Log.e("Couldn't mount system as rw!");  
    return; 
} 

これは、シェルコマンドに便宜上RootToolsを使用し、すでにあなたのアプリへのrootアクセスを許可されたユーザを想定しています。