N9 固件 DIY教程 (思路流程)
QUOTE:作者:蓝_N9
原贴标题:N9 固件 DIY教程
原贴地址:http://bbs.dospy.com/thread-15555735-1-464-1.html
N9 固件 DIY教程 (思路流程)
首先对固件结构有个大致了解,固件里面分为cert-sw,kernel,rootfs,cmt,2nd,xloader,secondary,ape-algo等这些部分组成,其中cert-sw,2nd,xloader,secondary每个都有22个部分,一一对应,kernel,rootfs,ape-algo都只有一个,cmt即信号模块由几部分构成。我们一般意义上的DIY即对rootfs部分的修改
这一共近百个block都是以54042E19这样类似的开头,每一个都有严格的校验,再把红叶的帖子贴一下:
54042E19010100开头,04为后面数据一共分的段数,19为步长,代表在19后的那字节开始向后计数0x19字节,
后边用红色标出的为奇偶位的XOR校验,校验段落为分区表后的文件部分,奇位对应偶位的校验值,偶位对应奇位的校验值,
向后0xC字节为信息记录,后边绿色标出的仍为步长,代表从整个分区表结束后的第一个字节开始,向后计数0x48884580字节,
这部分为正式的系统文件,也是前边奇偶字节所校验的信息段。向后标出的2A仍为步长,0x2A字节过后为33,向后的FF仍为步长,
0xFF字节过后,红色标出的那位为8位校验和的反补,从开头第二位的04开始,一直到这个校验位前边的那字节为止,共0x1D5位
而且22个cert-sw部分几乎对固件里所有位置都校验到了
Nokia这次比较放的开,毕竟是Linux了,即使校验不通过也让你开机
校验不对的只要你文件都对了设备能运行就让你运行了,只不过在开机时显示个警告而已
好了,上面这些是基础,接下来是Ubuntu和Windows合作的过程了,在动手前最好先用winhex打开固件把上面提到的东西先自己看看,不然出错了很危险的
Ubuntu我也是刚开始用,之前真的是几乎一点都不会,通过百度谷歌终于学会了点最基本的东西,首先你得安装个Ubuntu,虚拟机或者实体机随意,前者估计性能上会受限制,毕竟N9的固件这么大,处理起来对磁盘要求很高的,我用SSD在处理的时候都会感到卡
第一步,在Ubuntu上安装python环境,这个……详情百度吧,方法貌似很多,我的笨方法就不说了,然后安装附件里的lzo-2.06,这个是一种压缩解压的算法吧,N9的rootfs部分就是基于这种算法的。安装办法:把这个gz包解压,我是直接双击解压的
然后cd进这个目录,执行下面:
./configure
make
make check
make test
make install
就安装成功了,然后针对N9的压缩方式还得加个补丁,再把附件里的python-lzo-1.08解压后终端cd进目录
运行
make
如果成功的话你就会在该目录新生成的文件夹里面得到一个lzo.so,等会用到,如果中间有错误的话自己谷歌一下吧,我也不会解决,当初我就卡在这个找了好多资料才稀里糊涂的解决了 (2013.10.21日:@(雨后星辰) 说:cannot find -llzo这个错误时的解决办法是因为python-lzo-1.08这个文件中的setup.py这个文件错了,把他第27行的libraries = ["lzo"]改成libraries = ["lzo2"]就好了。已经快一年了,我也不记得什么情况了,如果大家在这里遇到问题的可以试试。)
第二步:安装Ubuntu下的flasher,(附件在本帖末尾)
第三部,进入固件目录,假设固件名为123.bin 那么就
flasher-3.5 -F 123.bin -u
这样就自动把固件切割开来了,硬盘慢的得等会,完了你就能看到里面各个部分的文件了,其中有个最大的rootfs.jffs2
第四步,把刚才得到的lzo.so以及附件里的unlzo.py和sparsify.py放到和rootfs.jffs2一个目录里面去
第五步,执行
python unlzo.py rootfs.jffs2
如果你前面都对了的话这时候就开始解压缩rootfs文件了,等终端运行完了同一个目录里就对了一个4G大小的rootfs文件,在Ubuntu下看是4.3G。
第六步,获取root权限,终端里
sudo -s
输入密码
这样就是root权限运行了
然后建立一个挂载点
mkdir -p /mnt/n9
再挂载上解压后的文件
mount -o loop rootfs /mnt/n9
这时你去/mnt/n9目录下就看到N9系统目录下的文件了,有点小成就感了吧
接下来就尽你所能修改系统吧
修改完以后 umount /mnt/n9
就行了,你做的修改已经保存下来了
第七步:压缩:在rootfs目录下对rootfs进行压缩回去
python sparsify.py rootfs rootfs.jffs2
等下就压缩好了,新的rootfs.jffs2就是你的成果了,到了这里大概你已经做完一半了,把它放到一个Windows下能读取到的目录
对Linux下的术语什么的我说的不专业,大神们见谅。
另外这个压缩的代码sparsify.py不是很完美,压缩出来偏大,而且基本上压缩完都是1.3G,这个有点受不了啊。希望大神们能够改进一下,原理在unlzo.py里有。不贴出来了
开始写最难写的部分了,最后这部分如果你不熟悉的话是最难搞的了,我写起来也很费劲
我们的基本思路就是把原来固件里的rootfs部分替换掉,再修改几个必要的校验,所以我把rootfs之前的部分截取出来了,名为head,rootfs之后的部分截取出来了,名为tail,大体上先把head粘贴到新文件里,再粘贴rootfs,最后把tail补在后面,就组成了个新文件了
第一步:用winhex打开你的rootfs.jffs2,看一下它有多少个字节,需要把大小填补到512的整数倍
我的是1254321072个字节,需要在最后添加80个FF才能凑够,之所以添加FF是因为官方固件就是填FF的。于是我选中最后一个字节右键编辑,
粘贴0字节,粘80个,然后把这80个都改成FF,你看你的需要粘多少就粘多少
粘完了保存下
第二步:打开附件里“奇偶校验”,我们需要算一下整个rootfs的奇偶校验,这个如果有工具就好了,可是我不会写,现在只能借助塞班的 让它来算了,在刚才保存好的rootfs.jffs2文件里CTRL+A全选,然后Ctrl+C复制,在“奇偶校验”文件里面,选中最后一个字节,然后Ctrl+V粘贴到最后,这个需要等等,然后回到rootfs.jffs2里面,看右下角一共有多少个字节大小,这个一定要十六进制的哦
把这个填到“奇偶校验”文件的0xF0B到F0E位置,然后保存文件
第三步:把奇偶校验这个文件用NokiaCooker打开,等它打开了就直接点保存,Save Firmware
等好大会才能计算完,N9的固件就是太大了。保存好了以后重新用winhex打开奇偶校验这个文件,看0xF08和0xF09两位,记住这两个数字,这就是从第二步开始为了得到的东西,我得到的是7066,注意等会填的时候要写6670,后面文件只要变了这个肯定也会变的,所以每次都要算的
第四步:开始组合固件了,打开head文件,到文件结尾处,看到分区表了么……下面圈出来的就是你刚才得到的校验位和数据大小,填上去,注意校验位要反着写的,大小就是整个rootfs.jffs2的大小,刚才已经看过了,正序填上就行了。
然后从分区表最开始那里54042E19那里,从04开始,往后选中,一直选择到这个head文件倒数第二位,7D0A7D0A那里,只剩下最后一位,
然后Ctrl+F2计算8位哈希值
然后用FF减去得到的结果得到反补值填到最后一位上
第五步:校验修改就这样好了,打开rootfs.jffs2后Ctrl+A 再Ctrl+C再粘贴到head的末端去,一定要选在head的末端!不然光标在哪儿就贴到哪儿了!最后再把tail粘贴到最后的最后,保存就行了。
教程结束
占楼更新 失败了{:4_106:}{:4_106:}{:4_106:}。哪里有解包好的固件
页:
[1]