编译中兴E8820s必要的准备工作
1.备份固件及刷入不死系统
提示:刷机有风险,操作要有心理准备。
两种方法:
1.1 拆机TTL方式(推荐)
准备一个格式为FAT文件系统的U盘,USB转串口连线路由内,路由器不要插电源,打开SSH客户端软件(SecureCRT/XShell)连接串口,在登录界面,输入如下用户名密码:
成功进入系统后,插入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 = <ðphy4>;
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
了。