首页 > 代码库 > 刷机中遇到的问题解决方法及一些感悟

刷机中遇到的问题解决方法及一些感悟

由于项目原因,需要刷手机,手机是Nexus 4,上头给我发了项目的文档和刷机系统的镜像文件。

之前我基本上没用过安卓手机,更没刷过机,又加上我比较粗心的性格,刷了N天才刷好,耽误了几天的工作。就在刚才终于刷成功了,兴奋之情难以言表。期间遇到了各种问题,走了很多弯路,现在想想,有时候的做法和想法真是可笑,不过期间也感悟到一些道理。这里总结一下,也许你能用到。


Linux系统下刷机:

安装adb和fastboot

第一步:在linux终端输入lsusb命令查询USB总线上的设备,比如我这里查询结果如下:
Bus 005 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 004 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 001 Device 002: ID 15a2:0c02 Freescale Semiconductor, Inc.
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
15a2即设备的设备ID号。

如果不明显,可以通过插拔数据线,找出手机的设备号。

第二步:下载最新的android SDK并解压到某目录,下载地址。

在这里下载的文件貌似不全,下载后检查一下有没有tools和platform-tools这两个文件夹,如果没有,那再搜索一下百度网盘,

我当时在百度网盘下载的。另外,32位和64位的版本貌似也会影响刷机,最好下载符合的。

截至目前最新的SDK为android-sdk_r12-linux_x86.tgz
解压出来的名称为android-sdk-linux_x86
进入下面目录:
cd android-sdk-linux_x86/tools/
然后在终端执行:./android update adb

第三步:修改~/.android/adb_usb.ini文件,注意,这时为root模式下的路径,在普通权限下,
是不存在该目录的。
# ANDROID 3RD PARTY USB VENDOR ID LIST -- DO NOT EDIT.
# USE ‘android update adb‘ TO GENERATE.
# 1 USB VENDOR ID PER LINE.
0x15a2

第四步:创建一个新的udev规则的文件,在/etc/udev/rules.d路径下,新建名为imx-android.rules的文件,编辑内容如下:
SUBSYSTEM=="usb", SYSFS{idVendor}=="15a2", MODE="0666"

第五步:在/etc/bash.bashrc中声明adb的路径:
export PATH=........
然后
source /etc/bash.bashrc

如果不是常用的话,可以直接在终端中输入export PATH=$PATH:/...........

但是下次打开终端的时候还需要引入目录。


第六步:重启ADB
adb kill-server
adb start-server
第七步:使用adb devices命令查找设备:
root@lqm:/opt/program/mx53_smd/out/host/linux-x86/bin# adb devices
List of devices attached
0123456789ABCDEF        device
至此,adb安装成功。

在终端中输入 fastboot devices可以查看fastboot安装是否成功。


进入fastboot模式下

在终端中输入adb fastboot bootloader

或者通过手机上按键的组合进入fastboot模式,比如Nexus 5可以通过按音量减键+锁屏键进入。

有的帖子写的需要在root权限下进入fastboot模式,否则刷机时会出现waiting for device.


刷镜像.img文件

进入保存镜像文件的目录下,

设置ANDROID_PRODUCT_OUT环境变量,该变量指定编译产生的镜像文件在PC机上的存放路径。

env ANDROID_PRODUCT_OUT=`pwd` fastboot flashall -w

pwd表示当前目录




windows下刷机:

安装adb

下载相应sdk,把platform-tools路径加到环境变量中。

也可以下载刷机精灵,提供了刷机需要的环境。


进入fastboot模式

同上


刷镜像.img文件

之前的env ANDROID_PRODUCT_OUT=`pwd`要改为 set ANDROID_PRODUCT_OUT=。。。。。

假设镜像文件的存储路径为D:/product/,设置ANDROID_PRODUCT_OUT环境变量的命令为:set ANDROID_PRODUCT_OUT= D:/product/


常见问题及参考博客

waiting for device解决方案:

1.fastboot驱动版本不匹配或没安装fastboot驱动

2.刷机需要在root权限下,在fastboot命令前加sudo或者切换到root权限

adb版本不同,64计算机上下载的是32位,在ubuntu系统下安装 ia32-libs 方法

sudo找不到命令:修改sudo的PATH路径

fastboot模式升级

error: could not load android-info.txt

linux环境变量设置错误后的恢复方法


感悟

1、下错了文件十分耽误时间

之前下载的sdk,第一次下载的缺少platform-tools文件夹,我以为tool目录就是platform-tools目录,耽误了我一天的时间。后来下载的是32位的,也会在刷机时出错。


2、动手前查清楚相关知识

比如之前的env ANDROID_PRODUCT_OUT=`pwd`,我在windows下set ANDROID_PRODUCT_OUT=`pwd`,出现error: could not load android-info.txt,我上网查了很多方法,后来才发现pwd的意义,改正后就刷机成功了。因为这个问题,我走了很多弯路,如果事先查明白这行命令的目的,就不会耽误这么久的时间。


3、不要迷信权威

有时候问一些大牛,也许他们专研的方向不是这方面,即使专研这方面,可能也会出错。之前就是太迷信大牛的话,走了牛角尖。