找回密码
 注册

QQ登录

只需一步,快速开始

楼主: hugebird

发布一个Broadcom芯片ADSL固件的修改方法和工具

  [复制链接]
 楼主| 发表于 2008-2-18 17:21:42 | 显示全部楼层
上面的是1.1更新版,修正了打包不含CFE的镜像时,计算rootfs加载地址的bug。
加入两个开关: /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 [X] 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 * [flash block size]
            /r ................. Linux only:decomp/comp root filesystem image
            -----------------------------------------------------------------
 楼主| 发表于 2008-2-19 23:30:50 | 显示全部楼层

请大家用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 编辑 ]

本帖子中包含更多资源

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

×
 楼主| 发表于 2008-2-20 00:15:02 | 显示全部楼层
接下来实验从贝尔固件再回到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的缓慢和不便,至此目的已经达到。
发表于 2008-2-20 11:27:35 | 显示全部楼层

up

:handshake :)
 楼主| 发表于 2008-2-21 00:31:01 | 显示全部楼层

最后一次更新

本帖子中包含更多资源

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

×
 楼主| 发表于 2008-2-21 00:52:23 | 显示全部楼层
原帖由 hugebird 于 2008-2-20 16:31 发表


最后一次更新,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的固件上载也可以。都测试通过了。

这应该是最后一次更新,因为提供了源码,有需要的可以自己改一下就行了。
 楼主| 发表于 2008-2-21 01:03:01 | 显示全部楼层
举个例子
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
 楼主| 发表于 2008-2-21 22:28:25 | 显示全部楼层

1.5版,修正了一个crc校验的错误

修正了TAG中rfs+kernel 辅助CRC校验的计算bug, 现在RTA到贝尔刷新提示镜像错误的问题解决了。
不过随之而来又出现了不同固件配置文件格式不同的问题,固件刷新时,原来的配置文件并未被清除,
新固件有可能不兼容,如果系统复位开关不起作用,无法恢复默认设置,系统就无法正常工作。
解决办法只有用jtag线做erase nvram操作

[ 本帖最后由 hugebird 于 2008-2-21 14:36 编辑 ]

本帖子中包含更多资源

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

×
 楼主| 发表于 2008-2-22 12:40:08 | 显示全部楼层
擦除系统配置NVRAM不用JTAG线也可以,但需要串口TTL线。需要在加电时,监控串行控制台的输出,在CFE提示按空格键进入CFE时,按空格键使CFE中断正常启动流程进入CFE命令行,这是输入"E"执行擦除命令,当提示时,选“p”擦除永久保存内容,就行了。
复位按钮有的CFE不能支持
 楼主| 发表于 2008-2-23 15:11:07 | 显示全部楼层
该工具到此更新完毕,最后说明几点关于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 编辑 ]

点评

MARK 很好  发表于 2013-11-3 22:38
*滑块验证:
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|Archiver|小黑屋|宽带技术网 |网站地图

粤公网安备 44152102000001号

GMT+8, 2024-3-29 12:43 , Processed in 0.032286 second(s), 7 queries , Redis On.

Powered by Discuz! X3.5 Licensed

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表