2011-06-30 47 views
2

我寫過一個修改文件系統內容的應用程序。要做到這一點的一個要求是將系統安裝爲讀寫。從這裏和其他來源,我已經找到了被廣泛接受的命令是這樣的:Android上的通用系統安裝

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

我希望有人能更好地解釋它是如何工作。我理解它意味着我們正在使用yaffs2文件系統並將/ dev/block/mtdblock3目錄掛載爲/ system。當我在我的手機上發出mount命令時,/ system被列爲ext3,而不是yaffs2(如果我用ext3替換yaffs2,該命令同樣適用)。另外,/ dev/block/mtdblock3不是一個現有的目錄。

這可能是比Android更多的Linux問題,但我確定有人知道這一切。最重要的是,這個命令有多普遍?我正計劃將其發佈到各種各樣的設備上,我是否需要容納其他文件系統?或者這會「只是工作」?

+0

我認爲一旦你想讓'/ system'讀寫(或者就此而言,文件系統混亂),所有的投注都關閉。 – geekosaur

+0

geekosaur是對的。在諸如到達S-OFF的HTC Desire之類的設備上,除非您處於恢復模式,否則無法寫入系統分區。 –

+0

我瞭解S-OFF以允許書寫和S-ON限制它。但是我也認爲S-ON不允許root訪問,所以在它達到那個之前就會死掉。 – jarvisteve

回答

0

對應於/system分區的設備的位置是設備特定的,正如使用的文件系統一樣;沒有單一的標準命令。而且,不能保證文件系統完全可以被修改;根fs完全可能位於cramfs上,或者某種類型的閃存不容易隨機覆蓋。對於某些電話來說,檢查實際設備的/proc/mounts或對應於/system的fs類型可能已足夠;對於其他人,您可能無法將其重新讀寫。

+0

謝謝。如果這是一個垃圾拍攝,ADB如何在調試模式下安裝任何設備? 「ADB重新裝入」將所有連接的設備讀寫。 – jarvisteve

+0

如果可以重新掛載r/w,那麼'mount -o remount,rw/path/to/mount/point'會執行此操作。但不能保證它可能擺在首位。 – bdonlan

0

試試這個:

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

記住你的Android設備必須植根並且必須安裝busybox的。

再次聊天

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; 
} 

它爲了方便shell命令使用RootTools,並假定您的應用程序用戶已經授予root權限。