找回密码
 立即注册
  • 便民服务
  • 关注我们
  • 社区新手

[技术] N9 固件 DIY教程 (思路流程)

[复制链接]

马上注册,享用更多功能,让你轻松玩转DOSPY论坛-诺亚方舟号

您需要 登录 才可以下载或查看,没有账号?立即注册

x
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这样类似的开头,每一个都有严格的校验,再把红叶的帖子贴一下:

20121102_ce335872c3feae04eecdNgwmuGG4yZLz.png

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的整数倍

20121127_671d7367eafebaa4779aLxoOjKE4j71K.jpg



我的是1254321072个字节,需要在最后添加80个FF才能凑够,之所以添加FF是因为官方固件就是填FF的。于是我选中最后一个字节右键编辑,



20121127_df7eae355322dd45960czW3O9UZ3393H.jpg

粘贴0字节,粘80个,然后把这80个都改成FF,你看你的需要粘多少就粘多少

20121127_b318ae9b3bc353c47168UqWw5l5vfzZZ.jpg


20121127_292c5e121d272c931cb1U9qs1O91J3TU.jpg


粘完了保存下


第二步:打开附件里“奇偶校验”,我们需要算一下整个rootfs的奇偶校验,这个如果有工具就好了,可是我不会写,现在只能借助塞班的 Nokia cooker V3.0 .rar (1.22 MB, 下载次数: 7) 让它来算了,在刚才保存好的rootfs.jffs2文件里CTRL+A全选,然后Ctrl+C复制,在“奇偶校验”文件里面,选中最后一个字节,然后Ctrl+V粘贴到最后,这个需要等等,然后回到rootfs.jffs2里面,看右下角一共有多少个字节大小,这个一定要十六进制的哦
20121127_b37f1c40ebbf8b0de12avlB8Dv26qq5z.jpg

把这个填到“奇偶校验”文件的0xF0B到F0E位置,然后保存文件

第三步:把奇偶校验这个文件用NokiaCooker打开,等它打开了就直接点保存,Save Firmware

20121127_8484a8aa6c5c034e2d125Lq0Q9qrJ1lz.jpg


等好大会才能计算完,N9的固件就是太大了。保存好了以后重新用winhex打开奇偶校验这个文件,看0xF08和0xF09两位,记住这两个数字,这就是从第二步开始为了得到的东西,我得到的是7066,注意等会填的时候要写6670,后面文件只要变了这个肯定也会变的,所以每次都要算的



20121127_507afc06e86e401862e94ZZxeCR95T5E.jpg


第四步:开始组合固件了,打开head文件,到文件结尾处,看到分区表了么……下面圈出来的就是你刚才得到的校验位和数据大小,填上去,注意校验位要反着写的,大小就是整个rootfs.jffs2的大小,刚才已经看过了,正序填上就行了。

20121127_91254ca4a2d650067f3avxnR5fm7HHQQ.jpg


然后从分区表最开始那里54042E19那里,从04开始,往后选中,一直选择到这个head文件倒数第二位,7D0A7D0A那里,只剩下最后一位,



20121127_627b318378ff0bcfbcfewjs1ZehA1zE6.jpg


然后Ctrl+F2计算8位哈希值

20121127_998db07c275c587c2c83M7PnnKM3kMY3.jpg


然后用FF减去得到的结果得到反补值填到最后一位上

第五步:校验修改就这样好了,打开rootfs.jffs2后Ctrl+A 再Ctrl+C再粘贴到head的末端去,一定要选在head的末端!不然光标在哪儿就贴到哪儿了!最后再把tail粘贴到最后的最后,保存就行了。

教程结束




部分工具.zip (640.51 KB, 下载次数: 19)







分享至 : QQ空间
收藏

2 个回复

倒序浏览
占楼更新
回复 使用道具 举报
肖叔 营长 2023-11-28 16:13:30
板凳
失败了。哪里有解包好的固件
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册