手机用root工具后就可以把system分区用dd 命令复回来。
adb shell, dd if=/dev/block/platform/msm_sdcc.3/by-name/system of=/sdcard/system.img
如果by-name目录没有就要找到system对应的分区号.
adb shell, cat /proc/partitions 会显示分区的一些信息
adb shell, mount 会显示一些初始mount的命令,参数中有system cache data 的参数信息。但没有boot ,recovery的一些信息。所以不了解的块决对不要去改对。如下命令是读出命令。但相反的就是写回,用时一定要小心。
adb shell, dd if=/dev/block/mmcblk0p17 of=/sdcard/system.img
这样就得到了可用于线刷的system.img 数据。从卡刷数据包中也能提出.但我修改后,写入不成功,可能是用了用fastboot写sparse包的原因,但我成功改写了一个方法后就没再试。因为还有改权限的问题。
system.img 在Unutu下用android 工具包的,make_ext4fs simg2img, img2simg 就可以解包打包了。
dd读出的是raw包,所以可以直接mount
sudo mount system.img androidsystem(这是挂载点)
cd 到目录下就可看到system分区的东西。修改后。再打包就可。
打包的工具有两个,mkuserimg.sh make_ext4fs 两个加-S参数时生成sparse包
sudo ./mkuserimg.sh (-s) androidsystem system-r.img ext4 system 512M
make_ext4fs -l 512M (-s) -a system system_out.img androidsystem
用simg2img, img2simg可在两种包格式中转换。
fastboot flash system system-r.img
如果包接近内存大小,会报错。这时需要改包为sparse格式,并用如下命令。
fastboot -S 512M flash system system-s.img
最后把生成的包,重新mount 到一个挂载点,然后改权限,因为只用这样su命令才能起做用。make_ext4fs的-a system指明是system时,会改把包的su的特别权限改去。所以要mount后重新改回。
sudo chmod 7755 su 就可以了。
还有一种root,切称为内核root,也就是default.prop这个文件中两个属性值:
ro.secure=0
ro.debuggable=1
内核root之后,adb shell直接是root用户登录,而软件层面root,adb shell依然是shell用户登录,必须通过su命令切换到root用户($ 符号变成#)。