找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
广告投放联系QQ68610888
查看: 9728|回复: 32

水星D21G 刷breed+适配21.02 openwrt 教程

[复制链接]
本帖最后由 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:

  1. #include "mt7621.dtsi"

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

  4. / {
  5.      compatible = "mercury,d21g", "mediatek,mt7621-soc";
  6.      model = "Mercury D21G";

  7.      aliases {
  8.          led-boot = &led_status;
  9.          led-failsafe = &led_status;
  10.          led-running = &led_status;
  11.          led-upgrade = &led_status;
  12.      };

  13.      chosen {
  14.          bootargs = "console=ttyS0,57600";
  15.      };

  16.      leds {
  17.          compatible = "gpio-leds";

  18.          led_status: status {
  19.              label = "d21g:white:status";
  20.              gpios = <&gpio 3 GPIO_ACTIVE_LOW>;
  21.          };

  22.      };

  23.      keys {
  24.          compatible = "gpio-keys";

  25.          reset {
  26.              label = "reset";
  27.              gpios = <&gpio 8 GPIO_ACTIVE_LOW>;
  28.              linux,code = <KEY_RESTART>;
  29.          };
  30.      };

  31. };


  32. &spi0 {
  33.         status = "okay";

  34.         flash@0 {
  35.                 compatible = "jedec,spi-nor";
  36.                 reg = <0>;
  37.                 spi-max-frequency = <10000000>;

  38.                 partitions {
  39.                         compatible = "fixed-partitions";
  40.                         #address-cells = <1>;
  41.                         #size-cells = <1>;

  42.                         partition@0 {
  43.                                 label = "u-boot";
  44.                                 reg = <0x0 0x20000>;
  45.                                 read-only;
  46.                         };

  47.                         partition@20000 {
  48.                                 label = "u-boot-env";
  49.                                 reg = <0x20000 0x10000>;
  50.                                 read-only;
  51.                         };

  52.                         factory: partition@30000 {
  53.                                 label = "factory";
  54.                                 reg = <0x30000 0x10000>;
  55.                                read-only;
  56.                         };

  57.                         partition@40000 {
  58.                                 compatible = "denx,uimage";
  59.                                 label = "firmware";
  60.                                 reg = <0x40000 0x7b0000>;
  61.                         };
  62.                 };
  63.         };
  64. };

  65. &gmac0 {
  66.         mtd-mac-address = <&factory 0xe000>;
  67. };

  68. &switch0 {
  69.         ports {
  70.                 port@0 {
  71.                         status = "okay";
  72.                         label = "wan";
  73.                        mtd-mac-address = <&factory 0xe000>;
  74.                        mtd-mac-address-increment = <1>;
  75.                 };

  76.                 port@2 {
  77.                         status = "okay";
  78.                         label = "lan1";
  79.                 };

  80.                 port@3 {
  81.                         status = "okay";
  82.                         label = "lan2";
  83.                 };

  84.                 port@4 {
  85.                         status = "okay";
  86.                         label = "lan3";
  87.                 };
  88.         };
  89. };

  90. &state_default {
  91.      gpio {
  92.          groups = "jtag", "uart2", "uart3", "wdt";
  93.          function = "gpio";
  94.      };
  95. };

  96. &pcie {
  97.      status = "okay";
  98. };


  99. &pcie0 {
  100.      mt76@0,0 {
  101.          reg = <0x0000 0 0 0 0>;
  102.          mediatek,mtd-eeprom = <&factory 0x0000>;
  103.                  mtd-mac-address = <&factory 0xe000>;
  104.          ieee80211-freq-limit = <2400000 2500000>;
  105.      };
  106. };


  107. &pcie1 {
  108.      mt76@0,0 {
  109.          reg = <0x0000 0 0 0 0>;
  110.          mediatek,mtd-eeprom = <&factory 0x8000>;
  111.                  mtd-mac-address = <&factory 0xe000>;
  112.          mtd-mac-address-increment = <2>;
  113.          ieee80211-freq-limit = <5000000 6000000>;
  114.      };
  115. };
复制代码
2.    修改 /openwrt/target/linux/ramips/mt7621/base-files/etc/board.d/02_network,在ramips_setup_interfaces()段加入下述内容,让固件启动时修改接口名称
  1. mercury,d21g)
  2.                 ucidef_set_interfaces_lan_wan "lan1 lan2 lan3" "wan"
  3.                 ;;
复制代码
3.    接着在同文件ramips_setup_macs()段加入下述内容,让固件从EEPROM对应地址处读取mac
  1. mercury,d21g)
  2.                 lan_mac=$(mtd_get_mac_binary factory 0xe000)
  3.                 wan_mac=$(mtd_get_mac_binary factory 0xe006)
  4.                 ;;
复制代码
4.    修改 /openwrt/target/linux/ramips/image/mt7621.mk,加入下述内容
  1. define Device/mercury_d21g
  2.   $(Device/dsa-migration)
  3.   $(Device/uimage-lzma-loader)
  4.   IMAGE_SIZE := 7808k
  5.   DEVICE_MODEL := D21G
  6.   DEVICE_VENDOR := Mercury
  7.   DEVICE_PACKAGES := kmod-mt7603 kmod-mt7615e kmod-mt7615-firmware
  8. endef
  9. 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



本帖子中包含更多资源

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

×

评分

参与人数 1恩山币 +1 收起 理由
zzxxz*** + 1 感谢你的分享,无论怎样,你都是最无私的人.

查看全部评分

 楼主| | 显示全部楼层
本帖最后由 avin4 于 2022-6-15 19:05 编辑

几点更新:
1. 楼下有人回复D26G也可以使用此固件,因为无线芯片是7611+7615,所以无线正常驱动,请自行尝试

2. 我的D21G底部标签显示是1.1版,不知道这个有什么变化(三剑客一般都是缩水啦!),供参考

3. 看到有人没备份EEPROM就上,我也是服气的,发一个备份EEPROM,MAC是生成的,自己改MAC。这玩意儿不是一机专用,但也不是批量适用,能不能用看脸。


链接:https://pan.baidu.com/s/1AbTBzD7R0gKjSxSEAHGoEQ
提取码:

qhhj




回复

使用道具 举报

不错哦!固件你自己编译的
回复

使用道具 举报

不错哦,思考思考!
回复

使用道具 举报

本帖最后由 471654852 于 2021-12-23 22:03 编辑

感谢大佬分享!!! 太厉害了!
===============

再次感谢大佬

亲测D26G (没有pro) 也可以用。 2.4G和5G全部正常。
回复

使用道具 举报

 楼主| | 显示全部楼层
471654852 发表于 2021-12-23 20:29
感谢大佬分享!!! 太厉害了!
===============

D26G应该是7615+7611,所以无线正常
回复

使用道具 举报

我要固件!
回复

使用道具 举报

楼主你底部标签写的是什么版本的啊(V1.0还是V1.1)
回复

使用道具 举报

 楼主| | 显示全部楼层
一脸懵13 发表于 2021-12-24 23:48
楼主你底部标签写的是什么版本的啊(V1.0还是V1.1)

标签写的1.1
回复

使用道具 举报

改的不错,很难不支持
回复

使用道具 举报

来自手机 | 显示全部楼层
牛批,但还是放弃了,当个无线交换机用
回复

使用道具 举报

问一下大佬有没有可能刷老毛子?
回复

使用道具 举报

 楼主| | 显示全部楼层
sdz1993 发表于 2022-2-8 23:52
问一下大佬有没有可能刷老毛子?

理论上可以的,但是还是需要SOP夹子,先把BREED/PB-BOOT刷进去再说
padavan同样需要针对8M ROM优化,没办法
回复

使用道具 举报

不错,非常感谢分享
回复

使用道具 举报

来自手机 | 显示全部楼层
谢谢楼主分享
回复

使用道具 举报

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

本版积分规则

关闭

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

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

GMT+8, 2024-5-15 01:35

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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

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