kitexy

导航

i897刷机原理分析

http://bbs.gfan.com/android-351007-1-1.html

 

三周前入手i897,我是第一次用android手机,匆匆上手刷机,结果第二天就变砖{:122_358:}

漫长的修复过程,查阅了大量的帖子,加上群里众多高手的指点,终于有点心得,花了点时间整理了一下,大家随便看看,有什么错误,望大家及时指出,以免造成误导
这篇文章本身不是一个刷机教程,但是看过之后,相信你能看懂别人写的刷机教程了,这叫知其所以然{:122_330:}

第一节:I897rom的分区结构
这个是在xda上查到的,感觉如果不说这个,后面的很难讲清楚,我简单翻译了一下,大家耐心看完。



第二节:系统启动的步骤

1、 整个系统的引导是从boot.bin开始的

2、 boot完成必要的初始化以后,通过pit信息找到sbl分区

3、 sbl在引导过程中,检测是否存在满足要求的按键组合,如果满足进入download模式(俗称挖煤)的条件,就进入download,如果是进入recovery模式的按键组合,就传递参数给kernel,也就是zImage分区,进入recovery模式,如果都没有,就传递参数给kernel,正常启动系统。

关于变砖的说明:

1、boot、pit、sbl直接决定了机器有没有变砖,如果这三个分区有一个出了问题,机器将直接无法进入download模式,也就是彻底变砖了。

2、有的sbl版本不检测按键组合,这就是我们常说的锁三键,破解方法就是刷入检测按键组合的版本即可。

3、boot和sbl具有对应关系,不是随便两个组合就能引导成功,前期很多人刷cog没有按要求先刷jf6,就是因为cog刷机包内单独升级sbl,而机器原来的boot和它不匹配,就变砖了。

4、有人说只要能挖煤就不会变砖,这个只有一半对。如果刷机包内不带pit、boot和sbl,的确不会变砖,但是如果带了,还是有可能变砖。
第三节:Odin刷机详解
odin的界面大家都知道

1、 pit和re-partion。这两个需要组合在一起使用,功能就是把pit文件写入到bml2分区,目前看到的pit文件一共有4个20100512.pit 、20100513.pit、20100803.pit、20100826.pit,经过分析,这四个pit文件内容基本一致,区别在于factoryfs和dbdatafs两个分区大小不同,也就是说不同的版本调整了factoty和dbdata分区的大小,以满足不同的要求。
三个pit文件的分区大小列出来,0826那个是在联通的JJ3里面发现的,和0512的前面都一样,最后多了一个分区movinand.bin,作用不明:
512.pit

PBL: 256KB (Primitive Bootloader)
PIT: 256KB
EFS: 10240KB (Non Volatile Memory)
SBL(1): 1280KB (Primary)
SBL(2): 1280KB (Backup)
PARAM: 5120KB
KERNEL(1): 7680KB (Primary)
KERNEL(2): 7680KB (Backup)
FACTORYFS: 293376KB
DBDATAFS: 137216KB
CACHE: 35840KB
MODEM: 12800KB

Total: 513024KB

513.pit

PBL: 256KB
PIT: 256KB
EFS: 10240KB
SBL(1): 1280KB
SBL(2): 1280KB
PARAM: 5120KB
KERNEL(1): 7680KB
KERNEL(2): 7680KB
FACTORYFS: 313856KB
DBDATAFS: 116736KB
CACHE: 35840KB
MODEM: 12800KB

Total: 513024KB

803.pit

PBL: 256KB
PIT: 256KB
EFS: 10240KB
SBL(1): 1280KB
SBL(2): 1280KB
PARAM: 5120KB
KERNEL(1): 7680KB
KERNEL(2): 7680KB
FACTORYFS: 303616KB
DBDATAFS: 126976KB
CACHE: 35840KB
MODEM: 12800KB

Total: 513024KB

2、 pda。Pda文件是整个rom的核心内容,一般是个tar包,完整的内容包括下面几个文件
boot.bin、sbl.bin、param.lfs、zImage、factoryfs.rfs、cache.rfs
看过上面的分区机构以后,就很容易理解了,odin刷机做的事情,就是解包后把各个文件克隆到各个对应的分区。具体哪个文件名对应哪个分区,则是根据pit文件里的信息来确定的,如果这次不刷pit文件,odin会去读机器内部的pit信息。
某些pda文件的后缀是md5,本质上还是一个tar包。 tar包内各文件刷入的顺序取决于打包的顺序,而不是按pit里的分区顺序,制作rom的打包时建议将boot.bin和sbl.bin放在一起,减少变砖的机会。

3、 Phone,也叫modem,原来wm的机器叫radio,都是一个概念,管理无线通讯的,对应分区表中的bml12

4、 Csc,一般也是一个tar包,里面包含dbdata.rfs和cache.rfs(这个在pda文件中也有,应该是会被csc覆盖的)。

5、 这里提到的文件每次刷机都不是必须的,比如我们往往单刷kernel,实际上就是只刷pda文件中的zImage。

6、 风险分析。通过前面讲的分区机构和系统引导过程,我们可以知道odin刷机主要的风险集中在pit分区和pda文件中的boot和sbl,如果这几个刷到一半出了问题,将直接导致机器变砖。

第四节:Recovery模式刷机分析

我们的机器还支持在recovery模式下刷机,由于官方的recovery程序功能有限,现在流行使用ClockworkMod Recovery,新版的Cognition 就是用这个刷的。
至于和官方的版本有什么功能增强,我没有查到相关资料,望高人补充。
这个方式下刷机使用的rom格式是一个zip包,在META-INF\com\google\android目录下有一个脚本update-script,recovery程序如何处理zip,是由这个脚本决定的。
现将Cog包里的脚本摘几句看看
format SYSTEM:
format CACHE:
format DATA:
//格式化三个分区
delete SDCARD:update.zip
copy_dir PACKAGE:sdcard SDCARD://sdcard目录下文件复制到sdcard

删除了sdcard上两个目录
delete_recursive SDCARD:Voodoo
delete_recursive SDCARD:Android

copy_dir PACKAGE:system SYSTEM://system目录下所有内容拷贝到system分区
copy_dir PACKAGE:updates TMP:/updates
format SYSTEM:
…….
…….
//设置文件权限
set_perm_recursive 0 0 0755 0555 SYSTEM:etc/ppp
set_perm_recursive 0 0 0755 0755 SYSTEM:etc/init.d
set_perm_recursive 1002 1002 0755 0440 SYSTEM:etc/bluetooth
set_perm 0 0 0755 SYSTEM:etc/bluetooth
set_perm 3002 3002 0444 SYSTEM:etc/bluetooth/blacklist.conf
set_perm 0 0 755 TMP:/updates/bmlwrite

run_program /system/bin/busybox --install -s /system/xbin
//用bmlwrite直接克隆分区,其实和odin刷机一个道理。
run_program /tmp/updates/bmlwrite /tmp/updates/modem.bin /dev/block/bml12
run_program /tmp/updates/bmlwrite /tmp/updates/Sbl.bin /dev/block/bml4
run_program /tmp/updates/bmlwrite /tmp/updates/zImage /dev/block/bml7
复制代码
注意上面的那个Sbl.bin,前面很多人变砖就是因为这个!原因前面已经说了。 

posted on 2011-12-21 21:15  kitexy  阅读(786)  评论(0编辑  收藏  举报