找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
广告投放联系QQ68610888
查看: 266|回复: 1

中兴E8822硬改32M ROM+256RAM小记

[复制链接]
    中兴E8822主板上标记为E8820V2,配置为16M rom+64M ram,原字库损坏,曾发帖咨询,反馈太少,于是自己动手硬改并自编译固件成功。由于机器已年代久远,意义不大,不建议折腾,以下简单分享历程给有需要的人。


一:硬件改动
1:关于32M 存储空间,为什么不直接上256M ROM?!原16M字库采用SOP8封装,查询资料以及能买到的便宜IC,64M起为16条腿,焊盘不同,脚位不同,供电不同,所以最大只能采用32M。

2:256M闪存和MEDIATEK7621是大部分主流搭配,如小米CR660X系列,另外频率必须是支持DDR2,不能是DDR3 .

3:原厂主板焊接至少用的是中温焊锡,因此自己动手能力要强,风枪温度320左右,闪存拿掉后,焊盘一定要重新镀低温焊锡之后再焊上新的闪存,否则闪存虚焊引起的问题很多。




二:Breed和eeprom
      改动完硬件,首先做的就是引导空字库,具体资料论坛自行查阅。
1:关于breed测试了几个,最后得出结论,不管是原来的64M内存还是新的256M内存,只有老版的BREED能引导且分配地址。识别大内存需要修改其中的地址,不再赘述。以下链接中的breed测试可用:
   https://www.right.com.cn/forum/f ... p;highlight=e8820v2

   
   建议编程器直刷,简单而粗暴,TTL一样需要焊接针脚,并且操作过程繁琐。

2:eeprom是动路由器的关键所在,因为我的原ROM已损坏eeprom丢失,试了很多论坛里已有的,许多5G信号弱,最终是巧合中找到了同批次的E8822主板,通过编程器提取,完美。Breed最终如图:
      

三:自编译固件:
      自编译固件是属于另一个复杂的分类,非三言两语的事情,前辈们有教程自行查阅并磨练!重点说避坑,既然要编译,肯定是为了自我中意的插件。然而某些特殊的原因,
云编译下来是没有自我满意的插件的,所以推荐本地。本地编译使用ubuntu22.4,需挂代理,请自行查找!当然也有诀窍,github大部分时段是可以连接的,只是会没有规律的中断。
只要你网速够快,比如我的千兆带宽。几百兆的源码在一两分钟内就可以git到本地,所以爱断不断。在下载本地编译环境的环节,需足够耐心,依然是观察github连接情况,瞅准时机
再执行命令,依然能钻空子,注意需要多执行几遍,因为有些文件会下载不完整,所执行几次命令,保证本地文件完整性,后续编译过程出错率极低。
      
      重点说说编译环节:

1:Openwrt固件机型里只支持E8820S,因为E8822的内存和闪存太小了,后续再佐证。所以make menuconfig菜单里是没有E8822或者E8820V2机型的。那么需要修改mt7621.mk添加机型:

define Device/zte_e8822
  $(Device/dsa-migration)
  IMAGE_SIZE := 32448k
  DEVICE_VENDOR := ZTE
  DEVICE_MODEL := E8822
  DEVICE_PACKAGES := \
        kmod-mt7603 kmod-mt76x2 kmod-usb3 kmod-usb-ledtrig-usbport wpad hostapd-utils luci
endef
TARGET_DEVICES += zte_e8822

其中IMAGE_SIZE := 32448k,这一行决定最终编译固件的大小,如果你的flash是16M,则需要改成IMAGE_SIZE := 16064k,我的是32M,所以IMAGE_SIZE := 32448k。

2:DTS文件的作用请自行查阅。我首先尝试了几个DTS文件,编译出错...   最终查阅,比对,采纳,修改以支持我的32M ROM,生成mt7621_zte_e8822.dts,代码如下:



// SPDX-License-Identifier: GPL-2.0-or-later OR MIT

#include "mt7621.dtsi"

#include <dt-bindings/gpio/gpio.h>
#include <dt-bindings/input/input.h>

/ {
        compatible = "zte,e8822", "mediatek,mt7621-soc";
        model = "ZTE E8822";
       
        aliases {
                led-boot = &led_sys;
                led-failsafe = &led_sys;
                led-running = &led_sys;
                led-upgrade = &led_sys;
        };

        chosen {
                bootargs = "console=ttyS0,115200";
        };

        leds {
                compatible = "gpio-leds";

                led_sys:sys {
                        label = "e8822:white:sys";
                        gpios = <&gpio 29 GPIO_ACTIVE_LOW>;
                };       

                led_power:power {
                        label = "e8822:white:power";
                        gpios = <&gpio 31 GPIO_ACTIVE_LOW>;                       
                };
        };

        keys {
                compatible = "gpio-keys";
               
                reset {
                        label = "reset";
                        gpios = <&gpio 18 GPIO_ACTIVE_LOW>;
                        linux,code = <KEY_RESTART>;
                };

                wps {
                        label = "wps";
                        gpios = <&gpio 24 GPIO_ACTIVE_LOW>;
                        linux,code = <KEY_WPS_BUTTON>;
                };
        };
};

&spi0 {
        status = "okay";

        flash@0 {
                compatible = "jedec,spi-nor";
                reg = <0>;
                spi-max-frequency = <10000000>;

                partitions {
                        compatible = "fixed-partitions";
                        #address-cells = <1>;
                        #size-cells = <1>;

                        partition@0 {
                                label = "u-boot";
                                reg = <0x0 0x30000>;
                                read-only;
                        };

                        partition@30000 {
                                label = "u-boot-env";
                                reg = <0x30000 0x10000>;
                                read-only;
                        };

                        factory: partition@40000 {
                                label = "factory";
                                reg = <0x40000 0x10000>;
                                read-only;
                        };

                        partition@50000 {
                                compatible = "denx,uimage";
                                label = "firmware";
                                reg = <0x50000 0x1fb0000>;
                        };
                };
        };
};


&pcie {
        status = "okay";
};

&pcie0 {
        mt76@0,0 {
                reg = <0x0000 0 0 0 0>;
                mediatek,mtd-eeprom = <&factory 0x0000>;

                led {
                        led-active-low;
                };

        };
};

&pcie1 {
        mt76@0,0 {
                reg = <0x0000 0 0 0 0>;
                mediatek,mtd-eeprom = <&factory 0x8000>;
                ieee80211-freq-limit = <5000000 6000000>;

                led {
                        led-sources = <2>;
                        led-active-low;
                };

        };
};


&gmac0 {
        mtd-mac-address = <&factory 0xe000>;
};

&switch0 {
        ports {
                port@0 {
                        status = "okay";
                        label = "lan1";                       
                };
                port@1 {
                        status = "okay";
                        label = "lan2";       
                };
                port@2 {
                        status = "okay";
                        label = "lan3";
                };
                port@3 {
                        status = "okay";
                        label = "lan4";
                };
                port@4 {
                        status = "okay";
                        label = "wan";
                        mtd-mac-address = <&factory 0xe006>;
                };
        };
};

&state_default {
        gpio {
                groups = "i2c", "uart2", "uart3", "wdt";
                function = "gpio";
        };
};


其中重点说一下偏移地址50000之后的分区:
                    partition@50000 {
                                compatible = "denx,uimage";
                                label = "firmware";
                                reg = <0x50000 0x1fb0000>;

这个分区简单说可理解为储存空间,16M rom的地址是这样reg = <0x50000 0xfb0000>,要识别32M的,需要修改成reg = <0x50000 0x1fb0000>,CSDN大神讲的很详细。

以上两个重点,本论坛地址https://www.right.com.cn/forum/f ... 022%2F01%2F01%2BDSA ,讲的很到位,请参阅。

3:以上准备工作做好,可以开始编译。我采用的是Immortalwrt最新稳定源码23.05.2,第一是编译出错率低,第二是完美自定义美丽插件。最终如下:




四:编译后的体验

       经过反复纠错编译,最终将路由器恢复原貌。因为找到了原固件提取的eeprom,最后WIFI信号实测没什么太大意外,稳定,高效。唯一遗憾的仍然是32M rom还是太小了,依然有很多插件装不了。
回头又编译了16M+64M 的固件,在同批次的那台E8822测试,很遗憾内存和闪存太小了,导致CPU发热要高,系统不流畅,如图:








可以看到64M 内存太小了,插件不多的情况下,内存几乎拉满。所以改向padavan固件,竟然有意想不到的完美收获,如图:





总结:E8822这个硬件水平,普通小规模使用可以,没必要花费心思折腾了。所以编译的固件上传不上传,意义不大。但是练手方面,本帖可以让你避坑。



本帖子中包含更多资源

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

×
 楼主| | 显示全部楼层
有几处需要编辑,却不能编辑?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

欢迎大家光临恩山无线论坛上一条 /1 下一条

有疑问请添加管理员QQ86788181|手机版|小黑屋|Archiver|恩山无线论坛(常州市恩山计算机开发有限公司版权所有) ( 苏ICP备05084872号 )

GMT+8, 2024-5-16 06:45

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

| 江苏省互联网有害信息举报中心 举报信箱:js12377 | @jischina.com.cn 举报电话:025-88802724 本站不良内容举报信箱:68610888@qq.com 举报电话:0519-86695797

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