找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
广告投放联系QQ68610888
查看: 15888|回复: 29

水星D26G Pro刷机openwrt,启用160Mhz,5G速率飙升至3466Mbps!!!

[复制链接]
发表于 2021-10-10 21:41 | 显示全部楼层 |阅读模式
本帖最后由 dingnan21 于 2021-10-17 21:18 编辑

首先,感谢daiyanpan《水星D26G Pro全千兆2600M路由器 拆机》一文,让我对D26G pro的硬件规格有了明确的了解。
先上图,看刷机效果,跑分基本上是MT7621AT的平均水平,跟MiR3G一致。

但无线芯片、天线这块,D26G pro比MiR3G强太多了,2.4G启用40Mhz后,传输速率显示为600Mbps;5G启用160Mhz后,传输速率直接飙升至3466.8Mbps!!!


D26G Pro也算是Mercury的诚意堆料之作了。除了通体铝合金外壳,分量十足外,在水星路由器上配备了128MB内存,实在是难能可贵。具体硬件信息如下:
  • CPU:MT7621集成了双核MIPS1004K(880MHz)
  • Flash: 兆易创新 (GigaDevice)   GD25Q64B 25Q64CSIG 8MB
  • Mem:南亚的DDR3  NT5CC64M16GP-DI  128MB
  • 无线芯片:MT7615N+MT7611E(MT7615N阉割版本,驱动通用) 支持2.4G 4*4,800M,5G 4*4,1733M;
相关硬件信息及内存规格

之后陆续在咸鱼上,花150块大洋淘了两个D26G pro,计划是刷了openwrt以后,组easymesh网络。

给D26G pro刷机分为两个部分:
  • 找到能用的breed,想办法给烧录到Flash内。
  • 适配能用的openwrt固件,将体积精简至8MB以内。


由于网上的资料实在太少,这两个步骤确实花了我不少时间。
  • 寻找合适的breed,烧录至Flash闪存

在这里先感谢前人栽树,laomao9000的《水星D26G PRO 刷入PB-BOOT 潘多拉pandorabox,便宜的双MT7615E路由器》和《水星MAC2600R刷入潘多拉pandorabox,两片7615,比红米ac2100香》两篇文章对我启发很大。

laomao9000的文章里,刷入的是pandorabox固件,使用的uboot是pb-boot,优点很明显,针对D26G PRO做过适配,可以直接进入刷机界面。
缺点是:pb-boot占用192KB flash空间,0x30000;对于不想更换16MB闪存的我来说,uboot占用空间太大。会对后期移植openwrt固件产生难度。(是的,你没看错,64KB也要抠)
pb-boot-mercury_mac2600r-20190317-61b6d33.bin

最后采用了breed-mt7621-xunlei-timeplug.bin,(迅雷时光机 (时光云) 专用,DDR3 内存适用,默认 256MB DDR AC 时序参数,波特率 115200,复位键 GPIO#4
占用空间在128KB以下,只需要0x20000的二进制空间。
缺点是复位键为GPIO#4,与D26G Pro的GPIO#8不一致。这也意味着后面刷入openwrt后,无法通过捅reset键进入breed。(可以使用breedEnter进入
《免拆闪存 TTL WDR8620 MAC2600R刷入breed及刷padavan教程》一文详细介绍了通过TTL刷机的方法。

不过我手渣,TTL接触不良,在执行完spi erase 0x0 0x20000后,TTL花屏死机了.....
也就是说,如果不用烧录线,我的D26G PRO变砖了。没有uboot了....

又花了几天时间,在淘宝采购了 CH341A编程器+SOP8在线烧录夹,然后就可以再次开搞了。
拆机,上SOP8烧录夹

连接CH341A烧录器,这编程器只支持windows,没办法,老air装了windows 10 安排起来。

打开烧录软件,备份SPI Flash数据。(第一台D26G pro的0x0 0x20000段数据被我擦掉了,里面包含了宝贵的EEPROM.bin,不过幸亏我有2台,第二天EEPROM恢复出来就好了!

数据备份完就可以烧录了。
这里有个坑,在断电情况下,我推断是由于电容保护,SOP8烧录夹只能读取Flash数据,无法写入;查询了下网上的资料,大意是SOP8烧录夹夹在Flash上以后,usb就给MT7621AT芯片供电了,导致CPU与烧录夹争抢读写权限。
解决方法是在夹着烧录夹的状态下,给路由器主板通电。先插好CH341A编程器,然后再给路由器主板通电,顺序不可反。
多试几次就能成功,打开breed.bin,手动擦除flash->验空->写入->校验
搞定以后,路由器由于没有固件,通电就会自动进入breed,如下图:


点击固件更新,选中openwrt固件,注意:D26G在刷入openwrt时,闪存布局选择“精简 0x40000”,否则固件刷入会失败。
听起来挺简单,干起来,呵呵.......

接下来是第二部分:
  • 适配D26G pro能用的openwrt固件

这块也感谢laomao9000的《给水星D26G pro 适配OPENWRT,5.4 内核》一文给予的引导。不过laomao9000适配的openwrt适用于16MB Flash的,也就意味着必须要更换Flash,对于手残党来说,风险太大了。因此我站在前人的肩膀上进行了二次优化。

适配水星OpenWrt需要修改3处配置文件:
  • target/linux/ramips/dts/mt7621_mercury_d26g.dts
  • target/linux/ramips/image/mt7621.mk
  • target/linux/ramips/mt7621/base-files/etc/board.d/02_network


1、target/linux/ramips/dts/mt7621_mercury_d26g.dts
Dts更改的主要难点在于8MB Flash如何合理布局mtd
  1. #include "mt7621.dtsi"

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

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

  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 = "d26g: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@30000 {
  48.                                 label = "u-boot-env";
  49.                                 reg = <0x20000 0x10000>;
  50.                                 read-only;
  51.                         };

  52.                         factory: partition@40000 {
  53.                                 label = "factory";
  54.                                 reg = <0x30000 0x10000>;
  55.                                 read-only;   #此行注销,否则无法修改EEPROM
  56.                         };

  57.                         partition[url=home.php?mod=space&uid=485662]@50000[/url] {
  58.                                 compatible = "denx,uimage";
  59.                                 label = "firmware";
  60.                                 reg = <0x40000 0x7b0000>;
  61.                         };
  62.                 };
  63.         };
  64. };

  65. &switch0 {
  66.      ports {
  67.          port@0 {
  68.                     status = "okay";
  69.                         label = "wan”;
  70.                 };

  71.                 port@2 {
  72.                         status = "okay";
  73.                         label = "lan1";
  74.                 };

  75.                 port@3 {
  76.                         status = "okay";
  77.                         label = "lan2";
  78.                 };

  79.                 port@4 {
  80.                         status = "okay";
  81.                         label = "lan3";
  82.                 };

  83.      };
  84. };

  85. &state_default {
  86.      gpio {
  87.          groups = "jtag", "uart2", "uart3", "wdt";
  88.          function = "gpio";
  89.      };
  90. };

  91. &pcie {
  92.      status = "okay";
  93. };


  94. &pcie0 {
  95.      mt76@0,0 {
  96.          reg = <0x0000 0 0 0 0>;
  97.          mediatek,mtd-eeprom = <&factory 0x0000>;
  98.          ieee80211-freq-limit = <2400000 2500000>;
  99.      };
  100. };


  101. &pcie1 {
  102.      mt76@0,0 {
  103.          reg = <0x0000 0 0 0 0>;
  104.          mediatek,mtd-eeprom = <&factory 0x8000>;
  105.          ieee80211-freq-limit = <5000000 6000000>;
  106.      };
  107. };
复制代码


2、target/linux/ramips/image/mt7621.mk
在编译文件中添加如下信息:
此处与参考文档有所不同,不需要wpad-basic  uboot-envtools,前者在选择easymesh后,会安装wpad-openssl,后者暂时不知道作用。

  1. define Device/mercury_d26g
  2.   $(Device/uimage-lzma-loader)
  3.   IMAGE_SIZE := 7808k
  4.   DEVICE_MODEL := D26G Pro
  5.   DEVICE_VENDOR := Mercury
  6.   DEVICE_PACKAGES := kmod-mt7615e kmod-mt7615-firmware #为适配进8MB flash,裁剪掉了kmod-usb3
  7. endef
  8. TARGET_DEVICES += mercury_d26g
复制代码


3、target/linux/ramips/mt7621/base-files/etc/board.d/02_network
在ramips_setup_interfaces()函数内xiaomi,redmi-router-ac2100后单独添加一段

  1. ramips_setup_interfaces()
  2. {
  3.     mercury,d26g)
  4.                 ucidef_set_interfaces_lan_wan "lan1 lan2 lan3" "wan"
  5.                 ;;
  6. }
复制代码
ramips_setup_macs()函数内xiaomi,redmi-router-ac2100后单独添加一段
  1. ramips_setup_macs()
  2. {
  3.     mercury,d26g)
  4.                 lan_mac=$(mtd_get_mac_binary factory 0xe000)
  5.                 wan_mac=$(mtd_get_mac_binary factory 0xe006)
  6.                 ;;
  7. }
复制代码
之后就跟编译日常固件一样,敲入make menuconfig后,会看到D26G pro的选项,进行固件编译。不过按照上述流程编译的固件,大概率压不住8MB flash的棺材板,关于固件精简与固件下载,请参考《OpenWrt路由器固件编译与精简指南》

[2021.10.14更新]-------------------------------------------------------------------------------------------------
SPI Flash的更换,8M->16M
使用电烙铁开始拆SPI Flash

拆完以后,太脏了,全是松香。

使用洗板水清洗过后。

更换16MB SPI flash后(安装散热片后补拍)

更换以后,breed重新刷机,软件包可用空间如下,感觉不错,可以装不少插件了。




行文至此,openwrt适配openwrt在配置文件部分就完成了。不过对于有研究精神的极客来说,知道原理比照抄更有意义,现分享部分研究结果:



Mac地址在factory的二进制位置的出处
  • LAN/WAN MAC地址的出处
参考MTK_APSoC_SDK_User_Manual.pdf可知,MT7621为没有wifi的独立方案,因此他们的LAN/WAN MAC地址存储在EEPROM的0xe000~0xe00b
这里的RF Parameter即openwrt mtd布局内的factory,也就是EEPROM   行业通用惯例尺寸为64KB(二进制0x010000

在openwrt virtual flash layout中,factory的实际大小为0x010000(64KB)
效仿redmi-router-ac2100描述将lan的mac地址和wan的mac地址分别定为于
  1. factory 0xe000
  2. factory 0xe006
复制代码

  • wifi MAC地址的出处(BSSID)
从文档可知,wifi的mac地址默认存放在EEPROM中。即MTD布局的factory内。
如下图可知,EEPROM内最多可以存放6组数据(0~5),分别对照用于2.4G和5G wifi,也就是BSSID的6位。


例如:D26G pro的2.4G BSSID为C0:A5D:4B:FA:40/42,openwrt virtual flash layout中,factory的offset地址为0x030000,即Flash内的绝对二进制offset如下:
BSSID
2.4G

5G

MAC Addr [0]
0x030004

C0

0x038004

C0

MAC Addr [1]
0x030005

A5

0x038005

A5

MAC Addr [2]
0x030006

DD

0x038006

DD

MAC Addr [3]
0x030007

4B

0x038007

4B

MAC Addr [4]
0x030008

FA

0x038008

FA

MAC Addr [5]
0x030009

40

0x038009

42

根据如下文档,Mtd-eeprom的offset位置为factory的0x0000和0x8000,因此在mt7621_mercury_d26g.dts内配置如下:
  1. #2.4G
  2. mediatek,mtd-eeprom = <&factory 0x0000>;
  3. #5G
  4. mediatek,mtd-eeprom = <&factory 0x8000>;
复制代码


从文档可知,wifi的mac地址默认存放在EEPROM中。即MTD布局的factory内。

原厂EEPROM适配openwrt通用EEPROM/factory
经过测试,在mac平台可以使用hexfiend替代winhex打开factory.bin进行对应内容修改(工具下载地址:https://hexfiend.com/

eeprom文件是非常重要的文件,每台机器都不一样,里面有一些路由器调教参数
经过实际固件分析,
  • 原厂固件EEPROM的offset位置在编程器固件物理位置为0x01E000,选块尾部为0x1F400,尺寸为5KB(0x1400=0x1000+0x400=4K+1K=5K)即
            原厂固件的EEPROM在MTD2的art内
  • 原厂EEPROM格式与OPENWRT,PANDAVAN等固件的EEPROM要求不符,需要进行搬运重组因此在需要对0xE000,0xF400的原厂2.4G和5G布局进行修正

  • 新建一个EEPROM/factory,尺寸为64K(0x10000)
  • 将远程固件存放EEPROM信息的MTD art分区<0x1E000,0x1E400>内容(2.4G EEPROM信息)重定向保存在<&factory 0x0000,0x0400>
  • 将5G的EEPROM内容<&art 0x1F000,0x1F3FF>复制到<&factory 0x8000,0x83FF>位置
  • 在5G EEPROM移动完成后,对<&factory 0x1000,0x7FFF>位置使用FF填充选块
  • <&factory 0x8400,0x10000>位置使用FF填充选块
  • <&factory 0x4,0x8004>位置填充2.4G和5G的mac地址


原厂MAC的计算逻辑与复原方法:
在原厂固件的0x2D80D可以找到LAN的mac地址。其实也可以通过查看路由器标签找到
  • LAN = 2.4G MAC
  • WAN MAC = LAN + 1
  • 5G MAC = 2.4G MAC + 2

对应EEPROM位置:2.4G MAC <&factory 0x4>; 5G MAC <&factory 0x8004>; LAN MAC <&factory 0xE000>; WAN MAC <&factory 0xE006>
参考文档:https://blog.qwq.ren/posts/hc5962-openwrt/







本帖子中包含更多资源

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

×
我的恩山、我的无线 The best wifi forum is right here.
发表于 2021-10-11 06:51 | 显示全部楼层
水星不考虑
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

发表于 2021-10-11 07:26 来自手机 | 显示全部楼层
技术呀。路过帮顶等等的
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

发表于 2021-10-11 17:14 | 显示全部楼层
绝望的生存条件

点评

固件精简是挺绝望,不过也是学习过程。让我对编译openwrt有了更加深入的了解。  详情 回复 发表于 2021-10-11 17:45
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

 楼主| 发表于 2021-10-11 17:45 | 显示全部楼层

固件精简是挺绝望,不过也是学习过程。让我对编译openwrt有了更加深入的了解。
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

发表于 2021-10-22 18:01 | 显示全部楼层
不错,收藏了,有一台D21G,硬件和26G一样的,8M ROM+128 RAM,也想刷op不过也手残,估计晚些时候依样画葫芦。
其实精简op很简单,把luci界面去掉就可以精简将近1M,全部命令通过ssh用uci捅命令
用熟了效率没什么区别,还防蹩脚黑客,因为直接连登陆后台都没有了
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

发表于 2021-11-16 17:45 | 显示全部楼层
楼主, 我有一个D21G pro, 能搞吗? 不知道里面还不是一样的~~

点评

应该是一样的,固件通刷  详情 回复 发表于 2021-11-16 20:22
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

 楼主| 发表于 2021-11-16 20:22 | 显示全部楼层
Coolman88 发表于 2021-11-16 17:45
楼主, 我有一个D21G pro, 能搞吗? 不知道里面还不是一样的~~

应该是一样的,固件通刷
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

发表于 2021-11-25 21:38 | 显示全部楼层
楼主求一个eeprom。我没想到这个factory在0x1e000上,而mac2600r在0x2e000,导致弄完后eeprom同样被清空了

点评

在另一位大佬laomao9000的帖子下找到了技术支持,解决了  详情 回复 发表于 2021-11-26 23:16
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

发表于 2021-12-21 21:38 来自手机 | 显示全部楼层
楼主可以帮我搞下吗
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

发表于 2021-12-21 21:53 | 显示全部楼层
有联系方式吗
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

发表于 2021-12-25 10:32 | 显示全部楼层
感谢分享
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

发表于 2022-1-25 21:25 | 显示全部楼层
看的我头晕啦,楼主厉害啊!
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

发表于 2022-4-18 12:44 | 显示全部楼层
谢谢分享,技术大师
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

发表于 2022-4-20 19:50 | 显示全部楼层
核弹黑科技吗 硬件只支持到1733你跑出个3466来,不觉得有问题吗

点评

老文章了,确实只能跑到1733  详情 回复 发表于 2022-4-21 12:24
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-19 17:25

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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

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