本帖最后由 avin4 于 2021-12-15 15:41 编辑
捣鼓好几天,思考了坛子上各位大神的帖子,终于依样画葫芦,成功给水星D21G刷了breed,然后自己编译了适配设备分区的openwrt,成功刷入!! 惯例上图,用的官方21.02 master源码:
首先说明几点: 1. 本帖不是给小白看的,需要有一定动手能力,教程也不会详尽讲解,只着重介绍容易卡住的点; 2. 本帖不涉及烙铁换ROM,直接利用原厂8M SPI ROM,当然受限于空间,op固件只有基本功能,诸位想不硬改ROM就来富强什么的还是不要想了。可能有人会问那还折腾op作甚?很简单: 为了IPV6 三大运营商里,移动天生就没V4公网IP,电信联通近年也在逐步收紧公网IP投放,有些地方就算你打客服电话要公网IP也没用,所以路由器固件必须有IPV6支持,否则P2P下载呀,游戏主机联网,挂什么甜糖网心呀都基本没戏。
坑爹的是水星这个D21G官方固件竟然就没有IPV6支持!另一方面,这机子配置其实还可以:
CPU: MT7621AT 无线:MT7603EN(2.4G)+MT7611EN(5G,可看做MT7615的TP/水星OEM芯片。驱动与7615通用) ROM: Winbond 25Q64JVS10-建邦8M NORFLASH RAM: Nanya NT5CCM16GP-南亚DD3 128M 2.4G天线X2+5G天线X4
明眼人一看就知道其实就是红米RM2100的ROM缩水简配版,除了ROM小了N倍其他硬件一模一样。所以刷成op,再发挥几年余热是很有必要的!
教程开始: 需要工具:D21G路由(废话)、SOP8免拆烧录夹子、CH341A编程器。都是老手,不多说了 一、 路由器断电,用SOP8夹子夹住ROM,上图右上方黄框位置,然后连接编程器,备份原厂8M固件并从中提取制作op需要的64k EEPROM。
1. 好消息是D21G没有某些路由的ROM写保护,电路设计貌似也不会导致接上夹子后CPU和编程器抢权限,反正我试了几次就把原厂ROM读取出来了,如果担心夹子没夹稳,可以读2次,然后用HashMyFiles等程序比较两个读取文件的hash,如果一致就OK! 要点:再强调一遍,不要没备份原厂ROM就往下走,到时候就算没砖,路由器因为没有EEPROM,无线信号弱也成了半个废物,一定一定要备份原厂ROM!!
2. 因为原厂EEPROM格式和op的不同,需要手动制作op的EEPROM文件,原理详见帖子:
简单转述过程: a. 用WinHex之类的16进制编辑器新建一个EEPROM/factory,尺寸为64K(0x10000) b. 打开备份的8M编程器固件,将里面存放2.4GEEPROM信息的 <0x1E000,0x1E3FF>内容保存到新文件里的<0x0000,0x03FF> c. 将备份的8M编程器固件里存放5GEEPROM信息的<0x1F000,0x1F3FF>内容保存到新文件里的<0x8000,0x83FF>
要点:用“定义选块”功能选择位置区,复制时选择“复制十六进制值”,然后到新文件对应地址选择“写入”,不能直接用ctrl+v复制粘贴,因为这样是插入模式,会改变文件大小!!
d. 在5G EEPROM移动完成后,对新文件<0x1000,0x7FFF>位置使用FF填充选块,对新文件<0x8400,0x10000>位置使用FF填充选块 e. 在新文件<0x4,0x8004>位置填充2.4G和5G的mac地址
这样就得到了op专用的64K EEPROM文件,保存好后面用。
要点:原机mac地址直接从路由底部标签上查看即可,然后以此计算LAN、2.4G和5G的mac,计算公式: LAN(就是路由标签上的mac) = 2.4GMAC WAN MAC = LAN MAC + 1 5G MAC = LAN MAC + 2 举例,如果LAN mac是BC-5F-F6-3F-D2-44 则其他mac分别为: 2.4G MAC= BC-5F-F6-3F-D2-44 WAN MAC= BC-5F-F6-3F-D2-45 5G MAC= BC-5F-F6-3F-D2-46 如果路由器标签损坏了,去备份的原厂固件1D80D也可以看到,另外只要不是完美党,网上有生成器,自己拿BC-5F-F6(水星的mac前缀)计算一下也行。其实mac相对于无线参数而言不是很重要,只是为了防止小几率情况下通讯双方地址相同撞车而已。
二、 用SOP夹子刷入breed,与D26GPro相同,选用迅雷下载宝的版本: breed-mt7621-xunlei-timeplug 用编程器刷入,因为D21G的GPIO中断和breed适配值不同,没法通过reset进入,没事我们还有breedenter:
浏览器输192.168.1.1进入breed(注意和主路由地址冲突),正确识别硬件:
三、 添加openwrt的device tree(dts)文件,编译适用的固件,op编译和源码下载就不详述了,默认你要都会,再说一遍,小白不要尝试
原理同样详见参考帖子
1. 制作D21G的dts,放到openwrt/target/linux/ramips/dts:
- #include "mt7621.dtsi"
- #include <dt-bindings/gpio/gpio.h>
- #include <dt-bindings/input/input.h>
- / {
- compatible = "mercury,d21g", "mediatek,mt7621-soc";
- model = "Mercury D21G";
- aliases {
- led-boot = &led_status;
- led-failsafe = &led_status;
- led-running = &led_status;
- led-upgrade = &led_status;
- };
- chosen {
- bootargs = "console=ttyS0,57600";
- };
- leds {
- compatible = "gpio-leds";
- led_status: status {
- label = "d21g:white:status";
- gpios = <&gpio 3 GPIO_ACTIVE_LOW>;
- };
- };
- keys {
- compatible = "gpio-keys";
- reset {
- label = "reset";
- gpios = <&gpio 8 GPIO_ACTIVE_LOW>;
- linux,code = <KEY_RESTART>;
- };
- };
- };
- &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 0x20000>;
- read-only;
- };
- partition@20000 {
- label = "u-boot-env";
- reg = <0x20000 0x10000>;
- read-only;
- };
- factory: partition@30000 {
- label = "factory";
- reg = <0x30000 0x10000>;
- read-only;
- };
- partition@40000 {
- compatible = "denx,uimage";
- label = "firmware";
- reg = <0x40000 0x7b0000>;
- };
- };
- };
- };
- &gmac0 {
- mtd-mac-address = <&factory 0xe000>;
- };
- &switch0 {
- ports {
- port@0 {
- status = "okay";
- label = "wan";
- mtd-mac-address = <&factory 0xe000>;
- mtd-mac-address-increment = <1>;
- };
- port@2 {
- status = "okay";
- label = "lan1";
- };
- port@3 {
- status = "okay";
- label = "lan2";
- };
- port@4 {
- status = "okay";
- label = "lan3";
- };
- };
- };
- &state_default {
- gpio {
- groups = "jtag", "uart2", "uart3", "wdt";
- function = "gpio";
- };
- };
- &pcie {
- status = "okay";
- };
- &pcie0 {
- mt76@0,0 {
- reg = <0x0000 0 0 0 0>;
- mediatek,mtd-eeprom = <&factory 0x0000>;
- mtd-mac-address = <&factory 0xe000>;
- ieee80211-freq-limit = <2400000 2500000>;
- };
- };
- &pcie1 {
- mt76@0,0 {
- reg = <0x0000 0 0 0 0>;
- mediatek,mtd-eeprom = <&factory 0x8000>;
- mtd-mac-address = <&factory 0xe000>;
- mtd-mac-address-increment = <2>;
- ieee80211-freq-limit = <5000000 6000000>;
- };
- };
复制代码2. 修改 /openwrt/target/linux/ramips/mt7621/base-files/etc/board.d/02_network,在ramips_setup_interfaces()段加入下述内容,让固件启动时修改接口名称 - mercury,d21g)
- ucidef_set_interfaces_lan_wan "lan1 lan2 lan3" "wan"
- ;;
复制代码3. 接着在同文件ramips_setup_macs()段加入下述内容,让固件从EEPROM对应地址处读取mac - mercury,d21g)
- lan_mac=$(mtd_get_mac_binary factory 0xe000)
- wan_mac=$(mtd_get_mac_binary factory 0xe006)
- ;;
复制代码4. 修改 /openwrt/target/linux/ramips/image/mt7621.mk,加入下述内容 - define Device/mercury_d21g
- $(Device/dsa-migration)
- $(Device/uimage-lzma-loader)
- IMAGE_SIZE := 7808k
- DEVICE_MODEL := D21G
- DEVICE_VENDOR := Mercury
- DEVICE_PACKAGES := kmod-mt7603 kmod-mt7615e kmod-mt7615-firmware
- endef
- TARGET_DEVICES += mercury_d21g
复制代码要点:IMAGE_SIZE是按8M原厂ROM大小来的,如果你决定硬改,记得把这里也改了,32M的NOR兼容性不好说,但买Winbond同品牌16M的是没问题的
都做好了,执行make menuconfig就会出现D21G选项:
这里的坑太多了,按照几位高手的帖子做了dts,然后发现编译失败。没道理呀,我有个红米2100,之前自己编译过好多次固件了,D21G硬件完全一样,只改ROM大小就编译不过?! 再细看一下帖子,发现里面包含的dts格式还有url和userid,什么鬼?!删掉编译,成功了,兴冲冲用breed刷入,路由器不分配地址无法登录!? 又回去看D26 PRO的教程帖子,发现里面dts分区的地址又写错了,唉……也不知这几位高人是有意还是无意,不过没有这几个教学帖子我也学不到分区知识,权当门槛吧。 改好dts,再编译刷入,这次终于顺利启动了……
四、 将编译完成的openwrt-sysupgrade固件和EEPROM通过breed一起刷入,但注意闪存布局要选择“0x4000精简”!原理详见参考的D26 PRO帖子。
编译出来的sysupgrade固件7.25M,ssh进路由看下,虽然只是“基本款”固件,但剩余空间已经很少了,只有532k,考虑到日常运行配置文件和op overlay分区的特性,基本上已经不能再大了,否则无法保证长时间稳定运行:
但不管怎样,这也是最新的21.02 openwrt!这下D21G完整支持IPV6啦,我还加了个Wire-guard微批恩协议,方便在获取到IPV6后用DDNS远程连接管理
无线部分和红米2100一模一样!!5G支持160MHz,设备支持的话速率可以上到1733Mbps!支持802.11s无线回程、支持802.11r FT漫游快速切换,还支持WPA3-SAE加密,至少是wifi5的天花板,路由器本身也是全千兆,正好可以满足未来几年基本需求!
因为正确制作了EEPROM,有线无线接口的mac都是原厂的,完美!
当然受限于8M空间,其他服务就只有个基本的UPnP了……还是那句话,要有其他用途,必须硬改ROM。不过我有旁路由,就不折腾这个了。
结论:这次折腾完全达到了目的,给被厂商放弃的D21G适配了openwrt,完全发挥了设备潜力!!
随附编译的D21G固件,注意,仅适用于D21G,其他机型别乱刷。你必须按本帖步骤,备份EEPROM,刷入breed后才能用,变砖了别怪我。 简单测试2.4G/5G正常,802.11r快速漫游正常(和家里的红米2100联动,芯片一样效果就是好)。
链接:D21G固件
提取码见下
提取码:patc
|