|
中兴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这个硬件水平,普通小规模使用可以,没必要花费心思折腾了。所以编译的固件上传不上传,意义不大。但是练手方面,本帖可以让你避坑。
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
×
|