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.zipcopy_dir PACKAGE:sdcard SDCARD://sdcard目录下文件复制到sdcard删除了sdcard上两个目录delete_recursive SDCARD:Voodoodelete_recursive SDCARD:Androidcopy_dir PACKAGE:system SYSTEM://system目录下所有内容拷贝到system分区copy_dir PACKAGE:updates TMP:/updatesformat SYSTEM:…….……. //设置文件权限set_perm_recursive 0 0 0755 0555 SYSTEM:etc/pppset_perm_recursive 0 0 0755 0755 SYSTEM:etc/init.dset_perm_recursive 1002 1002 0755 0440 SYSTEM:etc/bluetoothset_perm 0 0 0755 SYSTEM:etc/bluetoothset_perm 3002 3002 0444 SYSTEM:etc/bluetooth/blacklist.confset_perm 0 0 755 TMP:/updates/bmlwriterun_program /system/bin/busybox --install -s /system/xbin//用bmlwrite直接克隆分区,其实和odin刷机一个道理。run_program /tmp/updates/bmlwrite /tmp/updates/modem.bin /dev/block/bml12run_program /tmp/updates/bmlwrite /tmp/updates/Sbl.bin /dev/block/bml4run_program /tmp/updates/bmlwrite /tmp/updates/zImage /dev/block/bml7复制代码注意上面的那个Sbl.bin,前面很多人变砖就是因为这个!原因前面已经说了。