[关闭]
@romangol 2015-03-14T14:06:54.000000Z 字数 2355 阅读 5281

记一次Android手机维修过程

practice


先讲一个段子:

“小李啊,你是学计算机的吧?”
“是啊是啊”(难道要我帮忙修电脑)
“来帮我把这两台电脑搬到楼上去吧”
“……”

解决问题不分贵贱……某日去超市购物,遇到一年纪目测70岁以上老奶奶,手持一大屏HCL Android手机(没错你没看错,不是HTC,不是TCL,没错是一个老奶奶在用而且还在用微信),问营业员为什么输入法无法使用。出手相助发现百度输入法安装了但是无法切换,点击百度输入法试图进入设置会卡死。当时怀疑是安装的360卫士导致?但是又不好帮别人乱卸载360卫士,于是检查了一下APP属性发现百度输入法是系统预装程序但是被更新过,试着把更新的版本卸载、恢复成出厂版本,bingo!

好了,言归正传,修电脑修手机难道不该是新时代计算机系好青年的必备技能吗?下面记录一下自己一次手机维修过程

0x0 问题描述

2014年底购入Moto G XT1068 双卡双待手机,8G Flash,1G RAM,Android 4.4.4操作系统,已经Root并刷入TWRP recovery;购入后内一直使用正常,只是会提示存储空间不足,经常需要手工清理一下下载的apk包和一些临时文件。直到某一日早上关机充电后,突然无限重启,进入到:开机时提示Bootloader已解锁的画面-黑屏 这一重复过程。比较恼火的是,无法关机,可以长按 电源+音量减小 进入到fastboot模式

0x1 试探解决问题

由于机器已经刷入TWRP recovery,第一个想法是进入到recovery子系统中去进行Factory reset,还能抢救出来数据。本机的fastboot系统有如下菜单

Normal Powerup
Recovery
Factory
Barcodes
BP Tools

但是从fastboot菜单上进入recovery就黑屏然后又重启。

经过网上一番查询发现,自己犯的第一个错误是对于Moto G,从Fastboot菜单进入recovery是用音量减小键移动到recovery选项然后按音量增大进入(而不是传统的电源键进入!)。解决这个问题后,发现机器能够进入的TWRP的启动画面,但是无法进入主界面,ADB连接上去能发现devices,但是数十秒后又重启了。

想了一下实在不行不要数据了,选择Factory选项来清空数据重启一试,谁知该功能完全不起作用。

0x2 深入分析

对该手机进行了一番研究,由于是XT1068双卡双待型号,网上很少有针对此款机器的刷机包,只有官方底包(Firmware)和recovery,在国内的黑武论坛有firmware的搬运(百度网盘,下载快)。

下载了底包和recovery,准备试试刷机,但是考虑到原有机器内的数据,还是想多尝试一下,先把recovery分区用

fastboot flash recovery twrp_recovery.img

命令重新刷入,可以刷入但是显示

"mismatched partition size" 

在XDA上看了一下,说这个只是一个Warning,尝试再进入recovery发现此时虽然仍然卡在TWRP的启动画面,但是ADB已经可以稳定的连接上,可以把/sdcard里面的数据和/data里面的数据拿出来了,于是把照片和/data/data/com.android.providers.telephony/databases,/data/data/com.android.providers.contacts/databases两个目录备份好,接下来就方便折腾了。

在adb shell里面看了一下sdcard里面的内容,想要rm删除一些无用的文件,但是rm命令执行下去就卡住不动了,之后ctrl+c结束adb再进入,发现可以ls其它目录但是无法ls /sdcard目录,只能重启之后再查看才能读到目录列表和文件列表了。

这时候初步判断是内部存储文件系统的管理问题(对/sdcard目录写文件或修改文件都无法执行,考虑若能修复一下文件系统也许就能解决这个问题,但是recovery子系统无法使用,于是就只能备份了数据后,参照firmware刷机命令

fastboot.exe flash logo logo.bin
fastboot.exe flash boot boot.img
fastboot.exe flash recovery recovery.img
fastboot.exe flash system system.img_sparsechunk.0
fastboot.exe flash system system.img_sparsechunk.1
fastboot.exe flash system system.img_sparsechunk.2
fastboot.exe flash system system.img_sparsechunk.3
fastboot.exe flash modem NON-HLOS.bin
fastboot.exe erase modemst1
fastboot.exe erase modemst2
fastboot.exe flash fsg fsg.mbn
fastboot.exe erase cache

但我并没有死板地执行上述命令,而选择执行了一条

fastboot.exe erase userdata

注意到这条命令会把/data/sdcard都清空(这背后的机理比较复杂,一般的内置SDCARD的机器都是用userdata分区里面的一个目录来模拟SDCARD,所以一旦用fastboot的格式化命令清空userdata分区,则SDCARD一定会被清空。

命令执行完毕然后重启,熟悉的开机画面又出现了!最后感叹一下,不了解Android系统的童鞋确实应该去用iPhone~ 什么都限制得死死的当然不会出太多问题。

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注