Android 8.0 user版本adb remount后系统卡死问题分析

来源:互联网 发布:围巾怎么系 知乎 编辑:程序博客网 时间:2024/05/17 08:22

先说结论:

执行adbremount重新将system分区以读写方式挂载的时候,需要将相关的信息保存到devinfo分区中。

这个分区在user版本中是被保护起来的,不允许写!(保护动作在LK中)

所以user版本LK,adb remount时会卡死(触发了分区保护机制),

Userdebug不会。

 

 

 

问题现象

V12BNLite 8.0 user版本替换userdebug版本的boot后,无法向手机push文件。

替换10月份的LK之后,push功能正常。

 

经本地验证,细化现象如下:

V12BNLite 8.0 user版本替换userdebug版本的boot后,可以向手机的/data/目录push文件。

通过以下命令,向system目录push文件失败:

Adb root

Adb remount

Adb push xxx /system/bin/

此时命令窗口卡住,过一段时间手机UI不响应触摸操作。

 

本地其他验证动作

进一步验证,在adbremount之后,手机静置就会出现UI不响应现象。

同时将LK和boot替换为userdebug版本,push文件正常。

 

下载driveronly基线代码,编译LK和boot进行验证:

在user版本只替换userdebug版本的boot,执行adb remount之后,UI卡死。

在user版本同时替换userdebug版本的LK和boot,执行adb remount之后,UI正常。

 

初步分析

应该是android8.0对手机控制更加严格了:LK和boot必须匹配才能正常使用debug功能。

经了解,V12BNLite8.0,11月之前发布的版本为userdebug。

替换10月份的LK之后,LK和boot同为userdebug版本,所以remount功能正常。

 

进一步验证分析

由于使用不同版本的LK有着不同的结果,所以从LK的差异分析入手。

经排查,在文件aboot.c中发现如下代码:

 

Devinfo分区被保护起来了!

 

而机器的行为又像是非法修改了被保护的分区(之前做防刷机机制时用到过)。

 

暂时取消对devinfo分区的保护,重新编译验证,user版本的LK也可以remount了。

再查询devinfo保存的信息为lock、unlock等安全相关的信息,

所以可能是remountsystem(只读改为读写)时需要修改devinfo分区内容,从而触发了保护机制。

--- devinfosystem之间的关系,有时间再研究一下

 

之前7.1版本没有问题,是因为LK中把分区保护动作屏蔽了。

 

原创粉丝点击