|
本帖最后由 afeng114 于 2023-4-21 23:44 编辑
曾经博通系列BCM4716,BCM4718,BCM5357/5358和BCM4706处理器的路由红极一时,也出现过很多脍炙人口的经典产品,如EA6500v1,R6300V1和RT-AC66U等。在wifi6已经逐渐普及的今天,这些mips架构的路由已经功成身退,曾经的荣耀也在一夜之间黯然失色。如何让这些功勋老将发挥余热,是一个沉重的话题,今天,笔者将带领大家,利用业余时间,体验一把玩路由玩到心跳的感觉。
*****第一篇*****
cfe
1、概念
CFE,全称为Common Firmware Environment,引导内核启动的程序。它是BroadCom公司专用的bootloader。其开发者为Mitch Lichtenberg,就如同u-boot是启动内核的引导程序一样。CFE支持基本的设备访问,其设计理念是满足引导程序所具有的基本功能,如:Flash设备等存储设备的访问、基本的UI接口。
相比U-Boot,CFE开放性小资料少,很多GPL中都把这部分源代码删除了,笔者主要玩博通系列路由,经常自己编译固件和刷机测试,因此非常想适配一个类似于不死uboot,界面简单直观、打开浏览器上传固件就可以完成刷机的cfe。寻遍github,功夫不负有心人,终于在华硕提供的源代码中,找到了完整的cfe源码,mips的源码在asuswrt/release/src-rt-6.x/cfe文件夹下。
2、从源码编译
安装虚拟机,然后安装32位版本的ubuntu 16.04,然后安装软件包:
sudo apt install libncurses5 libncurses5-dev m4 bison gawk flex libstdc++6-4.6-dev g++-4.6 gengetopt \
git git-core gitk zlib1g-dev autoconf autopoint gettext libtool shtool autogen mtd-utils \
intltool sharutils docbook-xsl-* libstdc++5 texinfo dos2unix tofrodos xsltproc u-boot-tools \
device-tree-compiler python qemu gperf liblzo2-dev uuid-dev build-essential lzma-dev liblzma-dev \
lzma binutils-dev patch cmake intltool libglib2.0-dev gtk-doc-tools
然后clone华硕提供的源代码到本地,配置环境:
将tools/brcm拷贝到/opt下面:
cd /opt
cp -r asuswrt/tools/brcm .
导出路径:
export PATH=$PATH:/opt/brcm/K26/hndtools-mipsel-linux-uclibc-4.2.3/bin
export PATH=$PATH:~/asuswrt/release/src/ctools && cd ~/asuswrt/release/src-rt-6.x/cfe/build/broadcom/bcm947xx
适配自己路由的cfe,首先需要获取自己路由的gpio值,以EA6500V1为例,首先修改gpio定义:
#define PWR_LED_GPIO (1 << 1) | (1 << 2) // GPIO 1,2
#define RST_BTN_GPIO (1 << 3) // GPIO 3
#define WPS_BTN_GPIO (1 << 4) // GPIO 4
在asuswrt/release/src-rt-6.x/cfe/cfe/arch/common/board/bcm947xx/src/ui_bcm947xx.c中,适配gpio以后,就可以通过修改makefile,设定RESCUE_MODE := 1,这样就开启救援模式,按住reset通电路由,就可以进入救援模式,文件路径位于asuswrt/release/src-rt-6.x/cfe/build/broadcom/bcm947xx/Makefile。
如果需要同时支持spi flash和nand flash闪存,则需要分别设置:
CFG_SFLASH := 1
CFG_NFLASH := 1
当然,源码本来就是为RT-AC66U适配的,因此,默认同时支持spi flash和nand flash。
假如你的路由只支持spi flash,那需要修改三处代码:
(1)在makefile中修改设置CFG_NFLASH := 0
(2)在ui_bcm947xx.c文件中修改函数ui_cmd_go,将以下两个函数分别修改strcpy(trx_name, "nflash1.trx");改为strcpy(trx_name, "flash1.trx");
strcpy(os_name, "nflash0.os");改为strcpy(os_name, "flash0.os");
(3)在asuswrt/release/src-rt-6.x/cfe/cfe/ui/ui_flash.c文件中修改函数ui_cmd_flash,将语句strcpy(flashdev, "nflash1.boot");改为strcpy(flashdev, "flash1.boot");
(4)将asuswrt/release/src-rt-6.x/cfe/build/broadcom/bcm947xx/compressed/rt-ac66u_nvram.txt里面的内容替换成ea6500v1的nvram参数
然后就可以make,即可生成具有华硕风格的自适配ea6500v1 cfe。
cfe编译界面
ttl输出界面
cfe miniweb界面
*****第二篇*****
固件
1、华硕
2、tomato
3、dd
未完,待续......
补充内容 (2023-4-23 09:06):
一些细节:
如果要在启动时显示spi flash信息和容量,在asuswrt//release/src-rt-6.x/cfe/cfe/arch/common/board/bcm947xx/src/bcm947xx_devs.c文件的flash_init函数中,增加以下 |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
x
打赏
-
查看全部打赏
|