Android 升级的正确方法

设定上……

我的手机是Nexus 5 hammerhead,最近Android 6.0发布,然而由于root过了以至于不能OTA。今天上午找了一个办法能够正常的OTA了。

 

步骤

  1. 查找版本号。Settings > About phone > Build number,得到LMY48B
  2. 下载:adb
  3. 下载:对应的系统镜像,对于我的情况来说是 hammerhead-lmy48b-factory-596bb9c1.tgz
  4. 在这个压缩包里还有一个zip: image-hammerhead-lmy48b.zip,找到system.imgboot.img
  5. 以防万一
    $ adb backup
    $ adb backup
    $ adb backup
    很重要所以说三遍
  6. 开刷之前记得把手机上使用root权限的软件卸载,在data分区上的残留文件清理干净,刷完以后手机就没root也不能清理了。
  7. 手机关机进入fastboot
  8. $ fastboot flash system path/to/system.img
  9. $ fastboot flash boot path/to/boot.img
  10. 开机,OTA

原理

Nexus 5使用的cf-auto-root在root时会修改内核并且在系统内装入SuperSU,而SuperSU在system分区,内核在boot分区。

adb shell进入手机执行mount指令的话……

cth451@cth-linux-desktop:~$ adb shell
shell@hammerhead:/ $ mount
rootfs / rootfs ro,seclabel,relatime 0 0
......
/dev/block/platform/msm_sdcc.1/by-name/system /system ext4 ro,seclabel,relatime,data=ordered 0 0
/dev/block/platform/msm_sdcc.1/by-name/userdata /data ext4 rw,seclabel,nosuid,nodev,noatime,nomblk_io_submit,noauto_da_alloc,errors=panic,data=ordered 0 0
/dev/block/platform/msm_sdcc.1/by-name/cache /cache ext4 rw,seclabel,nosuid,nodev,noatime,nomblk_io_submit,noauto_da_alloc,errors=panic,data=ordered 0 0
/dev/block/platform/msm_sdcc.1/by-name/persist /persist ext4 rw,seclabel,nosuid,nodev,relatime,nomblk_io_submit,nodelalloc,errors=panic,data=ordered 0 0
......

正常开机的话boot分区根本不挂载,根目录和system分区都是只读挂载。这也就意味着如果没有强行手动以rw模式挂载system的话,是不能写入的。由于不root的情况下,任何用户和程序都不能写入system,所有的应用程序数据和用户文件以及虚拟sdcard(如果有)一定不会存储在system分区上。

OTA本身只更新系统也就是system分区,由于OTA的包是增量更新,打过root补丁的内核、system分区里的SuperSu程序无法通过校验,于是机器人倒地。因此想把bootsystem恢复至当前版本的出场状态就能可以正常通过OTA前的校验。

Leave a Reply

Your email address will not be published. Required fields are marked *