加入两个开关: /128K, /cfeblk:X
/128K 设置Flash的块大小为128KB, 默认情况下为64KB
/cfeblk:X设置在打包不含有CFE的镜像时CFE占用的块数。CFEsize = Flash block size x CFE block count.
如果flash块大小为64KB,CFE占用了1块(Tiny CFE 大小是64KB)那么CFE长度是64K x 1块 =65536字节。
如果CFE长度为256KB,块大小为64K ,可用参数 /cfeblk:4
===============================================================
Broadcom Chip ADSL FW Image De/Compress Utility v1.1-hugebird
===============================================================
ABOUT: This program decomp/comp the firmware image of a Broadcom chip
based DSL MODEM.
---------------
USAGE: BrFwmod -decomp <-i inputfile> </m:X> </notag> </cfe> </rfs> </knl>
BrFwmod -comp <-o outputfile> </m:X> </cfe> </r> </cfeblk:X> </128K>
BrFwmod -showinfo <-i inputfile>
Required Parameter
------------------
-decomp ........... decompress Image file into sub files
-comp ............. compress
-showinfo ......... show a Image file infomation
-i inputfile ...... custom input file(Image.bin by default)
-o outputfile.... custom output file(Image_Time.bin by default)
Optional Switches
-----------------
/cfe ........... ... decomp/recomp including CFE
/notag ............. don't decomp image tag
/128K .............. use 128K to cal root fs loading addr
/rfs ............... decomp including root filesystem
/knl ............... decomp including kernel image
/m:X ............... use method to deal with the Image
:1 ............... tag+rootfs+kernel(default for comp)
:2 ............... tag+cfe+rootfs+kernel(default for decomp)
:3 ............... tag+cfe
:4 ............... tag only
/cfeblk:X .......... if not comp cfe in new image. this use to
cal CFE length X *
/r ................. Linux only:decomp/comp root filesystem image
-----------------------------------------------------------------
请大家用1.2版的,这个已经完全测试
请大家用这个版本的,这个我在自己的上海贝尔500 S6307MPx上测试通过了,1.2版的可以识别Dynalink 3.02版的Tag格式。我一直用的Dynalink 1335 2.20版的固件,去年为此写过一个教程。这次做这个工具实际是在研究源码的时候顺便写的,最初的目的是不使用JTAG线完成不同厂家固件的互刷。我用1.2版做了这样的实验。 实验前 ADSL上跑的是Dynalink 的固件。需要准备TTL转RS232串口线一根,一般即使板子再简化,这个接口还是保留的。贝尔的固件(B.bin), Dynalink的固件(D.bin), JTAG线备用。我前两天发布的brJtag工具备用。
1. 从D.bin中提取TAG.BIN
brfwmod -decomp -i D.bin /m:4
提取后改名字为tag.bin
2. 从B.bin中提取 CFE, RootFS, Kernel
brfwmod -decomp -i B.bin /notag
提取后改名字
3. 将上面4个文件合并成一个有Dynalink TAG, 的贝尔固件。
brfwmod -comp -o myfirm.bin /m:2
4.通过WEB页面升级这个新固件。
5.通过串口观察新固件的启动信息,由于CFE NVRAM中Board_id不对应,CFE进入等待输入Board id状态。
选择96338E后,固件启动正常。于是完成了从dynalink 到贝尔固件的升级。
[ 本帖最后由 hugebird 于 2008-2-19 15:45 编辑 ] 接下来实验从贝尔固件再回到Dynalink固件
1. 从B.bin中提取TAG.BIN
brfwmod -decomp -i B.bin /m:4
提取后改名字为tag.bin
2. 从D.bin中提取 CFE, RootFS, Kernel
brfwmod -decomp -i D.bin /notag
提取后改名字
3. 将上面4个文件合并成一个有贝尔信息的Dynalink固件。
brfwmod -comp -o myfirm2.bin /m:2
4.通过WEB页面升级这个新固件。
5.通过串口观察新固件的启动信息,由于CFE NVRAM中Board_id不对应,CFE进入等待输入Board id状态。
选择RTA1320后,固件再次启动。但固件认为Kernel Image损坏。通过JTAG导出flash的信息,和myfirm2.bin比较,确实在rootfs地址区域中与4个字节不匹配,怀疑贝尔的固件刷新代码存在问题。因为贝尔的固件是从网上找的,不能确认工作情况如何。
以上的实验说明通过修改TAG确实可以实现不同厂家的固件互刷,但也说明,这种操作风险极大,不建议没有条件的朋友操作。这一工具只是希望摆脱使用JTAG的缓慢和不便,至此目的已经达到。
up
:handshake :)最后一次更新
原帖由 hugebird 于 2008-2-20 16:31 发表 https://www.chinadsl.net/images/common/back.gif最后一次更新,CFE中加入了定制的NVRAM块,这样boardID和MAC地址可以在重新打包固件的时候生成,不用再通过TTL转232电缆设置了。 NVRAM中BoardID 采用与目标固件TAG中的BoardID 相同,比如我们做一个从贝尔到Dynalink的转换固件,那么目标固件是Dynalink,所以NVRAM中的BoardID应该与Dynalink原始固件TAG里的BoardID对应即可,使用的时候通过命令行知道ID即可。如果命令行不指定,BoardID与TAG.BIN中的对应。MAC地址在1.3版中可以手动设置,如果不设置那么就采用贝尔的地址,后4个地址随机产生。默认情况下CFE中会自动生成一个默认的NVRAM设置,如果不想要,用/nonvram开关即可直接拷贝CFE.BIN中的内容。
昨天的测试,现在加了默认NVRAM设置以后,从Dynalink 到贝尔直接刷新就可以正常工作。从贝尔到Dynalink 仍然提示核心文件坏了,这个固件是Dynalink的CFE要检测保存的TAG造成的,再这种情况下CFE是正常工作的,而且不需要通过串口设置硬件参数,如果ping通192.168.1.1,那么可以通过CFE的WEB升级页面直接加载Dyanlink的原始固件就可以,或者为了保险,自己用Dyanlink原版固件重新打包一个去掉CFE的固件上载也可以。都测试通过了。
这应该是最后一次更新,因为提供了源码,有需要的可以自己改一下就行了。 举个例子
1. 打包含CFE的文件, 设置MAC地址和boardID
>brfwmod -comp -o newfirm-cfe.bin /m:2 /macaddr:001122334455 /nvboardid:96338E
2.打包不含CFE的文件
>brfwmod -comp -o newfirm-nocfe.bin /m:1
1.5版,修正了一个crc校验的错误
修正了TAG中rfs+kernel 辅助CRC校验的计算bug, 现在RTA到贝尔刷新提示镜像错误的问题解决了。不过随之而来又出现了不同固件配置文件格式不同的问题,固件刷新时,原来的配置文件并未被清除,
新固件有可能不兼容,如果系统复位开关不起作用,无法恢复默认设置,系统就无法正常工作。
解决办法只有用jtag线做erase nvram操作
[ 本帖最后由 hugebird 于 2008-2-21 14:36 编辑 ] 擦除系统配置NVRAM不用JTAG线也可以,但需要串口TTL线。需要在加电时,监控串行控制台的输出,在CFE提示按空格键进入CFE时,按空格键使CFE中断正常启动流程进入CFE命令行,这是输入"E"执行擦除命令,当提示时,选“p”擦除永久保存内容,就行了。
复位按钮有的CFE不能支持 该工具到此更新完毕,最后说明几点关于BCM ADSL firware的信息。
1.ADSL的CFE一般要求小于64KB,而WLAN Router则是256K。
2.固件的刷新和识别主要看256Bytes TAG数据结构中的Board ID信息, 只要BoardID信息一致,不同厂家的固件就可以互刷。另外通过比较CRC32来保证固件的完整性。
3. 即使固件刷新完毕,并不意味固件就能使用,还有2点限制。1是板子Enet配置信息,由2楼所述的外围网络的设计区别是限制固件互刷的主要原因。第2个限制是不同板子的固件,对保存在永久存储空间PSI中的系统配置文件有不同的的处理要求,比如管理员名字和密码的加密方式等等,在新固件首次启动时会出现不可预料的状况,解决的办法是通过TTL串口线,在CFE控制台中清除PSI中保存的信息。
4. 96xxx ADSL 设备的PSI一般为24Kbytes, 位于Flash memory的最后面。
5. 如果boardID相同,为了保险起见,可以重新打包一个不含CFE的固件,保证CFE能够正常驱动网络,这样就可以不用Jtag线对设备进行回复。TTL串口线是必备工具
[ 本帖最后由 hugebird 于 2008-2-23 07:14 编辑 ]