Android上的通用系统安装

时间:2011-06-30 23:36:00

标签: android linux

我编写了一个修改文件系统内容的应用程序。其中一个要求是将系统安装为读写。从这里和其他来源,我发现广泛接受的命令是这样的:

 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问题,但我确信有人知道这一切。最重要的是,这个命令有多普遍?我打算将它发布到各种各样的设备上,我是否需要容纳其他文件系统?或者这会“正常工作”吗?

3 个答案:

答案 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来方便shell命令,并假设用户已经授予了对您的应用程序的root访问权限。

答案 1 :(得分:0)

/system分区对应的设备的位置是特定于设备的,正在使用的文件系统也是如此;没有单一的标准命令。而且,不能保证文件系统根本就是可变的;根fs完全可能在cramfs上,或者某些类型的闪存不容易被随机覆盖。对于某些手机,检查/proc/mounts实际设备和fs-type对应/system可能就足够了;对于其他人,您可能无法将其重新写入读写。

答案 2 :(得分:0)

试试这个:

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

请记住,您的Android设备必须已植根并且必须安装busybox。

再次聊天