Chinaunix首页 | 论坛 | 博客
  • 博客访问: 4134425
  • 博文数量: 241
  • 博客积分: 15936
  • 博客等级: 上将
  • 技术积分: 25293
  • 用 户 组: 普通用户
  • 注册时间: 2007-03-27 11:22
个人简介

Fedora-ARM

文章分类
文章存档

2016年(3)

2014年(1)

2013年(3)

2012年(50)

2011年(61)

2010年(26)

2009年(27)

2008年(21)

2007年(49)

分类: LINUX

2011-01-02 21:23:17

前几天,稍微看了一下Gphone的recovery模式,对这种恢复模式稍微有了一些了解,但是并不是很深入,没时间看源码。主要参考了muddogxp的博客中的一篇文章,这个文章比较详细的介绍了recovery模式,他一定是看过源码的人。现在将这篇文章介绍给大家:《Android Recovery模式》 。在这里感谢muddogxp,并对他的分享精神表示严重感谢!!

今天,碰到一个因为使用了G1模拟G3主题而Gphone无法使用SD卡、听筒灯变紫的案例。本来我认为应该是system下的某些文件被破坏了,动了system后,尽然无法启动了。变砖?!静下心想想,没事只要没有破坏SPL就好了。按一下电源键,然后按住返回键进入bootloader,通过fastboot也无法flash了。所以现在的情况是:在进入recovery模式无法识别SD卡,无法正常启动系统,fastboot也无法flash。所以想要刷机的话只有通过recovery模式下用USB刷了。

如何在recovery模式下使用USB接口和Gphone通信,并使其刷机是现在要解决的问题。以前有说过了:recovery模式其实就是不同形式的Linux系统,没有进入图形模式,而是进入了一个字符模式的简单刷机状态。只要在recovery模式下加入adb shell支持就可以通过命令行模式将刷机包导入nand中的yaffs2文件系统,在/cache/recovery/command中写入命令,并启动recovery进行刷机。

但是我对Recovery模式还不是很熟,暂时没这么快做一个这样的recovery镜像。庆幸的是,我在http://forum.xda-developers.com/上找到了支持adb shell的recovery镜像。所以通过以下的步骤就可以不用SD卡,在recovery模式下通过USB刷机了。


(1)连接电脑和手机,按一下电源键,然后按住返回键进入bootloader的fastboot模式。



(2)在PC端使用fastboot工具将支持adb shell的recovery镜像(2.6MB以上)导入手机,并启动。



      $ sudo ./fastboot-linux-i386 boot recovery.img 
      [sudo] password for tekkaman: 
      downloading 'boot.img'... OKAY
      booting... OKAY


(3)等到Gphone进入recovery系统后,在PC端使用adb shell命令来登录手机。


$ ./adb shell
/ #


(4)在根目录下建立data目录(如果已有就不用建了),挂载yaffs2文件系统中的data分区到此目录。


/ # ls 
cache             init              res               system
data              init.goldfish.rc  root              tmp
default.prop      init.rc           sbin
dev               init.trout.rc     sdcard
etc               proc              sys
/ # mount -t yaffs2 /dev/block/mtdblock5 /data
/ # mount
rootfs on / type rootfs (rw)
tmpfs on /dev type tmpfs (rw,mode=755)
devpts on /dev/pts type devpts (rw,mode=600)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
/dev/block/mtdblock4 on /cache type yaffs2 (rw,nodev,noatime,nodiratime)
/dev/block/mtdblock5 on /data type yaffs2 (rw)


(5)将刷机包通过adb push 传入根目录下的data目录(因为data分区比较大,所以用此分区作临时存放刷机包的目录)。我使用的是经修改的 。包较大,时间较长。


./adb push DREAM_2.2_PRO.zip  /data/update.zip
1491 KB/s (50592045 bytes in 33.132s)



(6)在/cache/recovery/command中写入命令。(原理在《Android Recovery模式》 中有讲)


/ # mkdir -p /cache/recovery/ 
/ # echo 'boot-recovery' >/cache/recovery/command 
/ # echo '--update_package=DATA:update.zip' >> /cache/recovery/command


(7)执行recovery命令进行刷机。要等上一会。............


/ # recovery

通过这样的操作,救回了那个G1。然后我将这个recovery镜像直接刷到了那个手机中,以备后患。这次使用的recovery镜像会在我分析完,确认其安全性后,再共享出来。

阅读(4652) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~