让970的ADB运行在root权限下的方法

来源:互联网 发布:p2p网络理财排名 编辑:程序博客网 时间:2024/05/18 00:23
 :使ADB(其实是/sbin/adbd,即ADB的Server端)运行于root权限,debug方式链接电脑后,adb shell直接可以修改system文件夹下的文件(启动后提示符既是"#"而不是"$")不需要先su获得root权限。
举例来说,如果修改了/system/framework下的某文件,重启后发现无法进入系统。如果手机开着调试模式,还是可以进入adb shell的。
没有root权限的ADB下无法恢复备份的/system/framework下的该文件,而此时,su命令也失去了作用,不能获得root权限。只能进入recovery模式下恢复全部system分区。
如果ADB启动后就是root权限,就可以直接恢复备份文件,不需要整个分区全部恢复了。

原理:ADB运行在一般权限下还是root权限下是取决于根目录下default.prop文件中定义的 ro.secure 的属性值。将值改为0就可以让adb运行在root权限下。
而这个文件一般情况下是只读的。只有通过修改刷机镜像文件boot.img才可行。

获得boot.img:首先通过修改全包的方式,在官方全包中加入第三方Recovery方法见于——bbs.gfan.com/android-3620422-1-1.html
刷机完成后进入Recovery模式并备份rom。备份完成后,在/sdcard/clockworkmod/backup/#备份日期#文件夹下就会得到需要修改的boot.img文件

修改所需工具:原始教程中说到的PatchRom项目的tools文件夹下提供的unpackbootimg(用于解压boot.img文件,同时也可以解压recovery.img文件)、mkbootimg(重新打包boot.img镜像文件)、mkbootfs(把修改后的根目录打包成镜像)

环境:Linux(原教程在UBUNTU下操作,本人在Fedora14下操作同样没有遇到任何问题)

过程:
复制刚才通过备份得到的boot.img文件。执行命令
  1. tools/unpackbootimg -i boot.img -o out
复制代码
得到
  1. boot.img-base
  2. boot.img-cmdline
  3. boot.img-pagesize
复制代码
三个记录文件
  1. boot.img-ramdisk.gz
复制代码
一个根目录镜像以及一个内核镜像文件
  1. boot.img-zImage
复制代码
通过命令把根目录镜像文件挂载为一个分区,并复制其中的内容到某目录
  1. cd out
  2. mkdir ramdisk
  3. cd ramdisk
  4. gzip -dc ../boo.img-ramdisk.gz | cpio -i
复制代码
这时候,就可一在out/ramdisk目录下找到default.prop文件,打开修改default.prop=0保存。

将根目录重新打包,输入命令
  1. cd ..
  2. rm -f boo.img-ramdisk.gz
  3. ../tools/mkbootfs ./ramdisk | gzip > boo.img-ramdisk.gz
复制代码
用mkbootimg把内核镜像和根目录镜像打包成boot.img
  1. rm -f ../boot.img
  2. ../tools/mkbootimg --cmdline '#boot.img-cmdline文件中的值,为空的话可以省略--cmdline参数#‘ --kernel boot.img-zImage --ramdisk  boo.img-ramdisk.gz --base 0x#boot.img-base文件中的值,我这里是80000000,0x开头表示16进制# --pagesize #文件boot.img-pagesize中的值,我这里是2048# -o ../boot.img
复制代码
到这里,能让adb运行在root权限下的boot.img就做成了(原本的boot.img文件6M,新生成的只有4.4M——3.1M的内核镜像+1.3M的根目录镜像,新镜像并没有额外的空间)。

接下来生成MD5,输入
  1. cd ..
  2. md5sum boot.img
复制代码
然后把boot.img考回sd卡上,修改同目录下的nandroid.md5的第一行(boot.img结尾的那行)为刚才哈希镜像文件得到的结果。

最后,进Recovery模式刷机……把新镜像刷进手机里
PS:修改boot.img有风险,可能变真砖。一定要慎重。即使严格按照步骤操作也并不能保证绝对的安全。更详细的原理以及完整的,正确的操作方式详见原教程……

待手机重启成功后,连电脑,开debug模式,电脑端输入adb shell。正常情况下,应该会看见#提示符,而不是之前的$。

PS:修改过Recovery的全包,有些时候会发现System分区可用空间只有30+M(新加坡版V20B,Recovery为非触屏版)……也可以通过把刷好后的系统备份,再回复备份的方法,获得更大的System分区的可用空间.
测试发现,备份后再恢复,System分区的可用空间变为200M+