首页
社区
课程
招聘
[原创]关于刷机的一些感悟
2014-6-9 01:07 12728

[原创]关于刷机的一些感悟

2014-6-9 01:07
12728
这可能是小弟第一次在看雪发原创帖,之前也不是没想发过东西,但是感觉对于很多东西都没有完全掌握,具体细节地方可能有不对之处,说出来怕被喷,就一直潜水不敢出来

       今天小弟用了一下午时间研究了一下刷机的问题,在网上看了一些帖子,有些感悟,同时也有一些疑惑与猜测无法证实,发此贴的目的一是希望总结一下今天下午的收获,同时也希望各位大牛可以为小弟解答一些疑惑,其中若有不对的地方,还请各位大牛不惜赐教

       最近没事闲的刷了一下青橙n1,前几次刷的还好好地,结果后来就放松警惕了,结果果断把青橙给刷成板砖了,后来一看坏了。。。。好歹也1000多大洋呢。。。。小弟穷啊,网上各种找方法,也没研究出什么门路来,后来听说先把手机断电,然后重刷就好了,但青橙那货电池拔不出来。。好吧,反正也是砖了,果断拆机吧。 拆开了之后先吐槽一下。。。这货的电池是软的。。。卸电池的时候真心怕爆炸了。。。打开机箱后盖之后,能拆的线基本全拆了。。最后发现有个白色的6个线的头就是电源线,重插之后,果然,可以刷机了。于是又再次忐忑的刷机,还好后来成功了,由于被吓得是在是不轻,就寻思研究研究手机刷机吧,成砖神马的究竟是怎么回事。。。由于小弟才疏学浅,过程中很多地方都是猜测,小弟猜测的地方后面会一一标记出来(用括号1,2,3….的形式),如果有不对的地方,还请各位大牛不惜赐教。
        好了,废话不说了,首先说下为什么刚开始没问题,后来刷成砖了。 当时的刷机环境是:小弟开着虚拟机,默认情况下插入青橙手机会连接到虚拟机的,然后我在主机上用sp_flash_tool点击download开始刷机了,(猜测1)由于插入手机后,usb默认应该是先连接到主机的,这时候被主机的sp_flash_tool识别出来了,然后开始刷机,接着usb被虚拟机识别,进入了虚拟机,与主机断开了连接,此时导致刷机被中断,相当于刷机过程中把线给拔了,但这时候手机内部的逻辑应该还在等待usb口的数据输入,此时手机内的程序没有响应开机,+-键的逻辑,程序一直等待输入或者循环读取输入,导致长按开机键也没有反应,最终只能通过拔电池来强行断电了。

       后来查了一下刷机相关的内容,发现有的说手机开机的时候经过的流程是lPL->SPL->Linux kernel->Android系统,有的说是BootLoader->Linux kernel->Android系统。有的说Bootloader=IPL+SPL,有的说BootLoader = SPL的。后来看到一篇文章感觉说的比较靠谱(但不太确定,叫猜测2吧),IPL,SPL是Windows phone中的称呼,HTC从windows mobile中引进来的,后来为了统一称呼,就把SPL成为Bootloader了。在Android中启动的流程应该就是BootLoader->Linux kernel->Android系统。

        关于刷机,目前刷机通常有两种方式:线刷和卡刷。线刷就是通过usb数据线来刷机,卡刷就是把rom包复制到手机或sd卡中,然后通过手机的recovery模式进行刷机。线刷到底是什么原理小弟没找到确定的答案,但大体猜测有两种方式吧(猜测3),一种是通过fastboot来刷机,一种是直接通过com口来刷机。ARM结构的手机启动后从默认地址0x0000000开始执行(),然后一般情况下bootloader的最后阶段进入U-Boot(这货类似于grab,可能还有别的选择,以U-Boot为例),这里可以选择进入什么模式,由于我青橙的刷机包中没有fastboot模式,就以小弟新买的红米s1为例吧,红米s1的bootloader提供三种模式:

        Normal:就是正常开机

        Fastboot:fastboot可以说是一种协议,在pc端和手机端分别有程序实现了这个协议。在手机端进入fastboot模式即相当于运行了手机端的对应程序,在pc端android sdk/platform-tool下面有此协议pc端的工具fastboot.exe。这货应该是基于usb协议实现的。所以手机开启了fastboot模式,pc端用fastboot.exe就可以连接上此手机设备,进行刷机。

        Recovery:这个模式和normal模式一般用的都是同一个linux内核,此模式下也会加载文件系统,传说中的卡刷,就是在此模式下进行的。
Fastboot,recovery和normal(正常开机)是平级的,至于有没有fastboot得看手机支持了,在开机状态下(normal模式)通过adb reboot bootloader命令可以重启手机进入fastboot模式(前提是支持)。

         如果进入了normal模式,则开始加载各种img,很多厂商的bootloader有个加锁功能,如htc,网上有帖子说刷机需要给bootloader解锁才可以,这种刷法指的应该是不刷bootloader,只是刷各种img,此时厂商的bootloader会对img进行校验,如果不过,则不能进入normal模式进行加载。
        看网上很多人说把手机刷成砖头了,后来小弟就很好奇怎么才能把手机刷成砖头,于是对我的宝贝青橙n1进行了各种实验,后来发现,在不破坏手机的情况下。。青橙应该是无法被刷成砖头的。
         这其中的原因就得从青橙使用的芯片说起了,青橙使用的是mtk的芯片(内部cpu是arm的,mtk芯片可以理解成主板)。Mtk官方提供的刷机工具叫sp_flash_tool,此工具是通过com口进行刷机的,这个工具在使用前需要安装一个驱动程序(我的理解是此驱动程序将usb转换为串口,之后通过串口就可以连接到手机了(猜测4)),sp_flash_tool里面有个选项,叫format whole flash,这个功能连bootloader都给format掉了。之前怀着忐忑的心情点击了这个选项,后来发现青橙还是没有成转。(猜测5)由于小弟对com口不太了解,这里猜测可能是mtk主板芯片支持com协议。所以只要是使用mtk芯片的手机,就可以放心大胆的刷机,刷机过程中各种拔usb线,各种中断都不会导致手机成砖(前面写了猜测5.。。要是真刷成砖了。。。不要来找我。。。。。)

        总结之,刷机有三种方式,其中两种线刷(com,fastboot),一种卡刷(recovery模式下),只要不刷掉bootloader(fastboot,recovery模式进的去)就不会有刷机成砖的问题,对于支持com方式刷机的,无论怎么刷,手机都不会成砖。

        ps:本来是想写一篇详细的文章从bootloader开始一直到手机启动的,后来发现工程量比较大,同样小弟对其中的一些地方也是模棱两可的,加上半夜1点是在有点困了,结果就写成这个样子了。 等进一步学习后再发总结贴吧

[CTF入门培训]顶尖高校博士及硕士团队亲授《30小时教你玩转CTF》,视频+靶场+题目!助力进入CTF世界

收藏
点赞2
打赏
分享
最新回复 (9)
雪    币: 18
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
wltext 2014-6-9 08:10
2
0
整体流程:
powerON--〉BootROM--->x-loader---->Eboot----->IPL--->OS
BootROM中固化了一段引导代码,用于系统初始化,初始化必要的寄存器,决定启动流程是正常启动或者启动flashing,进入到x-loader。
在系统上电时候,BootROM代码会检测是否需要擦写flash内容,可以是部分擦写也可以是全部擦写。
擦写工作一般在上电时刻进行,BootROM代码初始化可编程接口(例如USB或者UART串口),然后等待从上位机发过来的boot command命令,如果在没有收到或者等待超时,系统正常启动。
(注;上位机是指:人可以直接发出操控命令的计算机,一般是PC。从概念上说控制者和提供服务者是上位机,被控制者和被服务者是下位机。可以理解为主机和从机的关系)
如果等到上位机的boot command命令,上位机会download Flash loader程序到omap的interal ram 空间中。Flash loader是由自身的header,flash loader应用程序和一些附加程序构成。
接着Boot ROM程序在安全模式下,检查flash loader的signatures来校验其完整性,如果检查失败,系统重启。如果检查通过,flash loader程序开始运行,它将较大size的OS image downloader到Flash介质中。
Boot ROM决定启动方式:
1)从NOR或者NAND Flash 正常启动
2)通过USB或者UART编程后,然后重新正常启动。
Boot ROM加载 x-loader
OS Image 下载到flash后,boot ROM代码会从NOR或者NAND flash中查找TOC。
TOC是在flash上的一个数据结构,包含了Image信息,起始位置,大小等等。TOC可以有多个,每个TOC都对应着一个Image。NAND flash上TOC最多为16个,最大size为512B。NOR flash情况不一样。
Boot ROM 检测项目名为“x-loader”的TOC,让后将对应的Image加载到内存。x-loader是一个通用的loader程序,被Boot ROM从FLASH中启动(NOR),x-loader承担OS的启动,x-loader会被校验然后才会授予权限继续运行。
NOR flash上的 sub-image 具有XIP特性,因此NOR flash上的x-loader大小不受限制。对于NAND flash由于其不支持XIP,所以Boot ROM在其开始处预留了64K空间,这个预留空间用于启动扇区,至少包含一个TOC,TOC和其对应的image 被copy到RAM空间,然后才能被执行。

也就是说BootROM中固化了一段引导代码正常就不会刷成砖。

相关资料:http://wenku.baidu.com/link?url=jVJahhVkiyt4zerRm8AUk_YkuM3lX1k-m9aomId4Y81WtvZokE7OrILAWVD7Vc8t6wfajfjfBENhjktmpJaTEDY8-w_NavFepJ7fvUwhYTG
雪    币: 341
活跃值: (85)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
JoySauce 1 2014-6-9 08:36
3
0
一键刷机 = =
雪    币: 4759
活跃值: (3334)
能力值: ( LV13,RANK:240 )
在线值:
发帖
回帖
粉丝
ashimida 5 2014-6-9 09:41
4
0
多谢wltext大哥啊,之前忽视了bootRom,一直在瞎猜

刚才百度了一下bootrom,其主要功能有:
(1)通过串口下载操作系统映像;
(2)通过串口升级自身映像;
(3)通过串口下载系统配置文件、系统信息文件;
(4)加载操作系统映像,使其正常启动;
(5)其他的辅助功能,如地址内容查看功能、地址内容修改功能和bootrom菜单显示信息控制功能。

看来只要BootRom不挂,手机就不会成砖了,我之前的理解bootloader指的是bootRom到os启动前的这一段,看来厂商所谓的bootloader加锁应该是指在bootRom里面加锁了(bty:bootRom这货怎么刷啊,莫非bootRom代码里面就有一步逻辑是自己可以刷自己??)

还有就是Eboot->IPL这一块,Eboot,IPL,SPL的概念一般是在Wince下面的吧,如果是linux一般用的不是u-boot么,还有看网上说IPL挂了手机基本就成砖了,IPL阶段这么靠后么,那传说中的SPL到哪里去了呢。。。。。
雪    币: 1900
活跃值: (1755)
能力值: (RANK:400 )
在线值:
发帖
回帖
粉丝
莫灰灰 9 2014-6-9 10:03
5
0
前排围观学习。
雪    币: 257
活跃值: (67)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
AioliaSky 1 2014-6-9 10:19
6
0
用刷机大师一键救砖
雪    币: 53
活跃值: (255)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
netsniffer 2014-6-12 21:17
7
0
x-loader是TI OMAP里边常用的,几年前Android2.1平台时常烧写
现在很多硬件方案商都是N级bootloader,高通比较重要的是支持 fastboot的bootloader, emmc_appsboot.mbn,一般定制都是直接修改这块的代码
Marvell很多方案用的uboot
雪    币: 1413
活跃值: (401)
能力值: (RANK:270 )
在线值:
发帖
回帖
粉丝
Claud 6 2014-6-15 14:48
8
0
别怕被喷,记得要再发个总结帖~
雪    币: 228
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
korall 2014-6-16 09:40
9
0
支持,等你的总结
雪    币: 20
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
aeven 2014-6-23 15:44
10
0
嗯 长久以来刷机都成了固定模式了,对于深层次的原理倒是模棱两可,感谢在这里警示了下,
游客
登录 | 注册 方可回帖
返回