编译中兴E8820s必要的准备工作

编译中兴E8820s必要的准备工作

1.备份固件及刷入不死系统

提示:刷机有风险,操作要有心理准备。

两种方法:

1.1 拆机TTL方式(推荐)

准备一个格式为FAT文件系统的U盘,USB转串口连线路由内,路由器不要插电源,打开SSH客户端软件(SecureCRT/XShell)连接串口,在登录界面,输入如下用户名密码:

1
zte_wrt   /    12345!@#$%

成功进入系统后,插入U盘, 转到 目录 “/mnt/usb1_1”, 应该能看到我们的U盘,
使用如下命令备份编程器固件,并刷入breed.
不死breed采用(breed-mt7621-zte-e8820s.bin)或(breed-mt7621-hiwifi-hc5962.bin)。在https://breed.hackpascal.net/ 下载将相应的breed.bin 拷贝到U盘根目录。

1
2
3
4
5
#cd   /mnt/usb1_1
#cat /dev/mtd0 > full.bin
#cat /dev/mtd1 > Bootloader.bin
#cat breed.bin > /dev/mtdblock1
#reboot

1.2 免拆刷入Breed系统。

给电脑的有线网卡设置固定IP:192.168.1.2 掩码:255.255.255.0 其它无所谓可不填。
把*breed.bin 重命名为ZTE_img.bin
打开Tftp64软件,目录填入ZTE_img.bin所在的目录,服务网卡选设置了IP的网卡。
按住复位键通电开机,tftpd64软件界面出现100%的那一行就说明刷机成功。

重启路由器,使用192.168.1.1就可以进入Breed了,第一时间备份固件,重要提示:备份编程器固件full 。它是制作eeprom的必备原料,尽量使用自己路由的。如果不小心丢了,也可以下载一个别人发不出来的凑合一下。

2.制作eeprom.bin文件

1)打开Winhex, 新建一个大小为256KB的空白文件eeprom.bin, 然后用FF填充整个文件。
2)打开full.bin(上述备份的编程器固件), 偏移0x0036F000处(以 “03 76 xx xx”开头),大小为0x130的部分为2.4G-wifi硬件及参数等,复制并写入eeprom.bin的开头0x00000000处。
3)full.bin文件的偏移0x0036F800处(以 “62 76 xx xx”开头),大小为0x1F0的内容,为5G-WIFI硬件及参数等,复制并写入eeprom.bin文件的偏移0X00008000处。
4)转到eeprom.bin文件的偏移0xE000处,分别写入MAC地址,其中后一个MAC地址的最后一位为前一个MAC地址的最后一位加一。
5)在0x81E0处,写入16进制数值:“C0 81 82 C3 04 45 46 07 08 09”

在eeprom.bin文件的偏移 0x4处,可以写入2.4GWifi的MAC地址; 在偏移 0x8004处,可以写入5GWIFI的MAC地址。

备注:在编程器固件full.bin的0x220000处,为MAC地址,以及SN序列号, 原厂的wifi信息等。

3.修改源码文件

3.1 修改mt7621.mk文件

官方的源码中不含中兴E8820S这个设备,LEDE的源码中是有的,但是刷机后所有的Lan口变成了一个LAN交换机,而且无线功能经常无法启用。所以无论你使用官方还是LEDE的库,修改一下源码都是必要的。

假定你已经克隆下了OpenWrt源码,进入到openwrt或lede目录开始。
向 target/linux/ramips/image/makefile中(或image目录下的mt7621.mk)写入新设备(ramips是平台型号),如果是LEDE源码修改对应项即可。如果是官方源码只添加E8820S部分v2部分不能添加。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30

define Device/zte_e8820s
$(Device/dsa-migration)
$(Device/uimage-lzma-loader)
BLOCKSIZE := 128k
PAGESIZE := 2048
KERNEL_SIZE := 4096k
UBINIZE_OPTS := -E 5
IMAGE_SIZE := 130304k
IMAGES += factory.bin
IMAGE/sysupgrade.bin := sysupgrade-tar | append-metadata
IMAGE/factory.bin := append-kernel | pad-to $$(KERNEL_SIZE) | append-ubi | \
check-size
DEVICE_VENDOR := ZTE
DEVICE_MODEL := E8820S
DEVICE_PACKAGES := kmod-mt7603 kmod-mt76x2 kmod-usb3 uboot-envtools
endef
TARGET_DEVICES += zte_e8820s

define Device/zte_e8820v2
$(Device/dsa-migration)
$(Device/uimage-lzma-loader)
IMAGE_SIZE := 16064k
DEVICE_VENDOR := ZTE
DEVICE_MODEL := E8820V2
DEVICE_PACKAGES := kmod-mt7603 kmod-mt76x2 kmod-usb2 \
kmod-usb-ledtrig-usbport
endef
TARGET_DEVICES += zte_e8820v2

3.2 添加或替换dts文件。

在target/linux/ramips/dts/目录中新建mt7621_zte_e8820s.dts文件。

如果像上面一样加入了其它硬件如zte_e8820v2,还要加入mt7621_zte_e8820v2.dts。如果没有这个对应的dts文件,编译时会报错。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
#include "mt7621.dtsi"

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

/ {
compatible = "zte,e8820s", "mediatek,mt7621-soc";
model = "ZTE E8820S";

aliases {
led-boot = &led_sys;
led-failsafe = &led_sys;
led-running = &led_sys;
led-upgrade = &led_sys;
};

leds {
compatible = "gpio-leds";

led_sys: sys {
label = "white:sys";
gpios = <&gpio 3 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 8 GPIO_ACTIVE_LOW>;
linux,code = <KEY_WPS_BUTTON>;
};

wifi {
label = "wifi";
gpios = <&gpio 10 GPIO_ACTIVE_LOW>;
linux,code = <KEY_RFKILL>;
};
};
};

&nand {
status = "okay";

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

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

partition@80000 {
label = "u-boot-env";
reg = <0x80000 0x80000>;
read-only;
};

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

partition@140000 {
label = "kernel";
reg = <0x140000 0x400000>;
};

partition@540000 {
label = "ubi";
reg = <0x540000 0x7A00000>;
};
};
};

&pcie {
status = "okay";
reset-gpios = <&gpio 19 GPIO_ACTIVE_LOW>,
<&gpio 4 GPIO_ACTIVE_LOW>;
};

&pcie0 {
wifi@0,0 {
compatible = "mediatek,mt76";
reg = <0x0000 0 0 0 0>;
mediatek,mtd-eeprom = <&factory 0x0000>;
nvmem-cells = <&macaddr_factory_e000>;
nvmem-cell-names = "mac-address";

led {
led-active-low;
};
};
};

&pcie1 {
wifi@0,0 {
compatible = "mediatek,mt76";
reg = <0x0000 0 0 0 0>;
mediatek,mtd-eeprom = <&factory 0x8000>;
nvmem-cells = <&macaddr_factory_e006>;
nvmem-cell-names = "mac-address";
ieee80211-freq-limit = <5000000 6000000>;

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

&gmac0 {
nvmem-cells = <&macaddr_factory_e000>;
nvmem-cell-names = "mac-address";
};

&gmac1 {
status = "okay";
label = "wan";
phy-handle = <&ethphy4>;

nvmem-cells = <&macaddr_factory_e000>;
nvmem-cell-names = "mac-address";
mac-address-increment = <1>;
};

&mdio {
ethphy4: ethernet-phy@4 {
reg = <4>;
};
};

&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";
};
};
};

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

&factory {
compatible = "nvmem-cells";
#address-cells = <1>;
#size-cells = <1>;

macaddr_factory_e000: macaddr@e000 {
reg = <0xe000 0x6>;
};

macaddr_factory_e006: macaddr@e006 {
reg = <0xe006 0x6>;
};
};

然后就可以 make menuconifg 了。


编译中兴E8820s必要的准备工作
http://anximin.github.io/2023/07/18/net_OpenWrt_E8820S/
作者
Sylar
发布于
2023年7月18日
许可协议