Chinaunix首页 | 论坛 | 博客
  • 博客访问: 543174
  • 博文数量: 75
  • 博客积分: 2374
  • 博客等级: 大尉
  • 技术积分: 933
  • 用 户 组: 普通用户
  • 注册时间: 2009-11-18 14:27
文章分类

全部博文(75)

文章存档

2014年(1)

2013年(17)

2012年(10)

2011年(15)

2010年(23)

2009年(9)

我的朋友

分类: 嵌入式

2012-05-25 17:26:28

通过adb shell访问Android。

有时候会在已经root的系统文件下面进行读写,例如/system,但是会提示类似read only file system的信息。
目前发现两种方法,该方法只在自己的测试机上成功,不保证其他机子一样。我的是Huawei U8818
下面的例子都是围绕/system目录。

方法一:
使用df命令查看

  1. # df
  2. df
  3. Filesystem Size Used Free Blksize
  4. /dev       197M 64K   197M 4096
  5. /mnt/asec  197M 0K    197M 4096
  6. /mnt/obb   197M 0K    197M 4096
  7. /system    295M 245M  50M  4096
  8. /data      755M 26M   728M 4096
  9. /cache     188M 4M    184M 4096
  10. /HWUserData 2G 1024K  2G   32768
  11. /cust      59M 14M    44M  4096
  12. /mnt/sdcard 7G 753M   6G   32768
  13. /mnt/secure/asec 7G 753M 6G 32768
看到/system分区有295MB的大小。
接着查看/proc下的partitions

  1. # cat /proc/partitions
  2. cat /proc/partitions
  3. major minor #blocks name

  4. 179    0    3817472 mmcblk0
  5. 179    1    20      mmcblk0p1
  6. 179    2    300     mmcblk0p2
  7. 179    3    133120  mmcblk0p3
  8. 179    4    1       mmcblk0p4
  9. 179    5    12288   mmcblk0p5
  10. 179    6    196608  mmcblk0p6
  11. 179    7    4096    mmcblk0p7
  12. 179    8    3072    mmcblk0p8
  13. 179    9    4096    mmcblk0p9
  14. 179    10   3072    mmcblk0p10
  15. 179    11   3072    mmcblk0p11
  16. 179    12   393216  mmcblk0p12
  17. 179    13   786432  mmcblk0p13
  18. 179    14   4096    mmcblk0p14
  19. 179    15   8192    mmcblk0p15
  20. 179    16   20480   mmcblk0p16
  21. 179    17   4096    mmcblk0p17
  22. 179    18   81920   mmcblk0p18
  23. 179    19   2154496 mmcblk0p19
  24. 179    32   7761920 mmcblk1
  25. 179    33   7757824 mmcblk1p1
  26. 31     0    4096    mtdblock0
看出,分区mmcblk012的大小最接近295MB,判断挂载点/system就对应该它了。
(其实,可以在/proc/mounts下面看的更直接。。。)
于是,输入以下mount命令

  1. # mount -o remount,rw /dev/block/mmcblk0p12 /system
就可以在/system下面进行写操作。
当然,如果不打算重启机子的话,最好还是将它恢复到read only状态。输入:

  1. # mount -o remount,ro /dev/block/mmcblk0p12 /system
该方法比较麻烦的是还要判断某挂载点跟分区,理论上说必须要将它们对应上来,否则会出错。
而实际上试过将不同的分区跟挂载点remount一下,居然还是可以的。原因暂时不明。

方法二:
考虑到上面用斜黑体字写的现象,尝试用其他信息代替”/dev/block/mmcblk0p12“,试了一下居然也是可行的!
直接输入下列命令即可:

    1. # mount -o remount,rw mtd@system /system
  1. 第二种方法虽然也是可以的。之所以这么写是参考init.rc里面的mount写法。

不清楚这个是怎么回事,要是原生的linux mount命令应该不会这样的。

update: 2013.11
其实,没必要像上面方法一和方法二那么复杂.还可以更简单.只需要输入:

  1. # mount -o remount,rw /system
即可.
linux系统自己会去维护一个已经mount的表.所以只需要输入现有的挂载点就行啦

阅读(59800) | 评论(2) | 转发(1) |
给主人留下些什么吧!~~

njslsl712013-01-20 06:41:17

高人啊,救了我一命。我按照这个方式终于搞定了。(我替换了原机的Settings.apk后,机器一直在启动画面,进不了系统,可急死我了,按此方式,把原来的Settings.apk拷贝回去后,OK了),太感谢了

njslsl712013-01-20 06:37:25

高人啊,救了我一命。我按照这个方式终于搞定了。(我替换了原机的Settings.apk后,机器一直在启动画面,进不了系统,可急死我了),太感谢了。