说明

1. 改造 Mercury MW305R v3.0(芯片 9533)
2. OpenWRT 版本:LEDE 17
3. 环境:Ubuntu 16.04 x64

第一步:修改硬件

1. 换 RAN 为 64M
2. 换 flash 为 16M
注:本教程主要说明制作镜像部分,具体修改硬件步骤请参考:链接

第二步:获取源码

使用以下命令克隆我当时使用的版本源码:

git clone -b lede-17.01 https://github.com/lede-project/source.git lede

第三步:target profile 添加新路由器

修改文件:/target/linux/ar71xx/image/tp-link.mk
添加以下内容:

define Device/mc-mw305r-v3$(Device/tplink-16mlzma)DEVICE_TITLE := MERCURY MC-MW305R v3BOARDNAME := MC-MW305R-v3TPLINK_HWID := 0x30500003
endef
TARGET_DEVICES += mc-mw305r-v3

删除 /tmp 目录,使用以下命令配置:

make menuconfig

在 Target System 里选择 Atheros AR7xxx/AR9xxx,然后在 Target Profile 里找到 MERCURY MC-MW305R v3 并选中。相关配置此时,编译一下,看看有没有错误。

make

make 成功后,/bin/targets/ar71xx/generic/ 目录下面会生成 MW305R 的 factory.bin,但是这时候下载到 flash 还不能启动,因为内核并没有支持 MW305R,继续下面的步骤。

第四步:kernel arch machine 新增路由器

新建文件:/build_dir/target-mips_24kc_musl/linux-ar71xx_generic/linux-4.4.74/arch/mips/ath79/mach-mc-mw305r-v3.c
文件内容:

/**  Mercury MW305R v3**  Copyright (C) 2014 Matthias Schiffer <mschiffer@universe-factory.net>**  This program is free software; you can redistribute it and/or modify it*  under the terms of the GNU General Public License version 2 as published*  by the Free Software Foundation.*/#include <linux/gpio.h>
#include <linux/platform_device.h>#include <asm/mach-ath79/ath79.h>
#include <asm/mach-ath79/ar71xx_regs.h>#include "common.h"
#include "dev-eth.h"
#include "dev-gpio-buttons.h"
#include "dev-leds-gpio.h"
#include "dev-m25p80.h"
#include "dev-wmac.h"
#include "machtypes.h"#define MC_MW305RV3_GPIO_LED_WLAN    13
#define MC_MW305RV3_GPIO_LED_WAN     4
#define MC_MW305RV3_GPIO_LED_LAN4    11
#define MC_MW305RV3_GPIO_LED_LAN3    14
#define MC_MW305RV3_GPIO_LED_LAN2    15
#define MC_MW305RV3_GPIO_LED_LAN1    16#define MC_MW305RV3_GPIO_BTN_RESET   12
#define MC_MW305RV3_GPIO_BTN_WIFI    17#define MC_MW305RV3_KEYS_POLL_INTERVAL     20    /* msecs */
#define MC_MW305RV3_KEYS_DEBOUNCE_INTERVAL (3 * MC_MW305RV3_KEYS_POLL_INTERVAL)static const char *mc_mw305r_v3_part_probes[] = {"tp-link",NULL,
};static struct flash_platform_data mc_mw305r_v3_flash_data = {.part_probes    = mc_mw305r_v3_part_probes,
};static struct gpio_led mc_mw305r_v3_leds_gpio[] __initdata = {{.name        = "mercury:green:lan1",.gpio        = MC_MW305RV3_GPIO_LED_LAN1,.active_low  = 1,}, {.name        = "mercury:green:lan2",.gpio        = MC_MW305RV3_GPIO_LED_LAN2,.active_low  = 1,}, {.name        = "mercury:green:lan3",.gpio        = MC_MW305RV3_GPIO_LED_LAN3,.active_low  = 1,}, {.name        = "mercury:green:lan4",.gpio        = MC_MW305RV3_GPIO_LED_LAN4,.active_low  = 1,}, {.name        = "mercury:green:wan",.gpio        = MC_MW305RV3_GPIO_LED_WAN,.active_low  = 1,}, {.name        = "mercury:green:wlan",.gpio        = MC_MW305RV3_GPIO_LED_WLAN,.active_low  = 1,.default_trigger = "heartbeat",},
};static struct gpio_keys_button mc_mw305r_v3_gpio_keys[] __initdata = {{.desc        = "Reset button",.type        = EV_KEY,.code        = KEY_RESTART,.debounce_interval = MC_MW305RV3_KEYS_DEBOUNCE_INTERVAL,.gpio        = MC_MW305RV3_GPIO_BTN_RESET,.active_low  = 1,}, {.desc        = "WIFI button",.type        = EV_KEY,.code        = KEY_RFKILL,.debounce_interval = MC_MW305RV3_KEYS_DEBOUNCE_INTERVAL,.gpio        = MC_MW305RV3_GPIO_BTN_WIFI,.active_low  = 1,}
};static void __init tl_ap143_setup(void)
{u8 *mac = (u8 *) KSEG1ADDR(0x1f01fc00);u8 *ee = (u8 *) KSEG1ADDR(0x1fff1000);u8 tmpmac[ETH_ALEN];ath79_register_m25p80(&mc_mw305r_v3_flash_data);ath79_setup_ar933x_phy4_switch(false, false);ath79_register_mdio(0, 0x0);/* LAN */ath79_eth1_data.phy_if_mode = PHY_INTERFACE_MODE_GMII;ath79_eth1_data.duplex = DUPLEX_FULL;ath79_switch_data.phy_poll_mask |= BIT(4);ath79_init_mac(ath79_eth1_data.mac_addr, mac, 0);ath79_register_eth(1);/* WAN */ath79_switch_data.phy4_mii_en = 1;ath79_eth0_data.phy_if_mode = PHY_INTERFACE_MODE_MII;ath79_eth0_data.duplex = DUPLEX_FULL;ath79_eth0_data.speed = SPEED_100;ath79_eth0_data.phy_mask = BIT(4);ath79_init_mac(ath79_eth0_data.mac_addr, mac, 1);ath79_register_eth(0);ath79_init_mac(tmpmac, mac, 0);ath79_register_wmac(ee, tmpmac);
}static void __init mc_mw305r_v3_setup(void)
{tl_ap143_setup();ath79_gpio_output_select(3, AR934X_GPIO_OUT_GPIO);ath79_gpio_output_select(4, AR934X_GPIO_OUT_GPIO);ath79_gpio_output_select(11, AR934X_GPIO_OUT_GPIO);ath79_gpio_output_select(14, AR934X_GPIO_OUT_GPIO);ath79_gpio_output_select(15, AR934X_GPIO_OUT_GPIO);ath79_gpio_output_select(16, AR934X_GPIO_OUT_GPIO);ath79_register_leds_gpio(-1, ARRAY_SIZE(mc_mw305r_v3_leds_gpio),mc_mw305r_v3_leds_gpio);ath79_register_gpio_keys_polled(1, MC_MW305RV3_KEYS_POLL_INTERVAL,ARRAY_SIZE(mc_mw305r_v3_gpio_keys),mc_mw305r_v3_gpio_keys);
}MIPS_MACHINE(ATH79_MACH_MW_MW305R, "MW-MW305R-v3", "MERCURY MW-MW305R v3",mc_mw305r_v3_setup);

修改文件:/build_dir/target-mips_24kc_musl/linux-ar71xx_generic/linux-4.4.74/arch/mips/ath79/Kconfig
添加以下内容:

config ATH79_MACH_MC_MW305Rbool "MERCURY MC-MW305R v3 support"select SOC_AR933Xselect ATH79_DEV_ETHselect ATH79_DEV_GPIO_BUTTONSselect ATH79_DEV_LEDS_GPIOselect ATH79_DEV_M25P80select ATH79_DEV_WMAChelpSay 'Y' here if you want your kernel to support theMERCURY MC-MW305R v3.

修改文件:/build_dir/target-mips_24kc_musl/linux-ar71xx_generic/linux-4.4.74/arch/mips/ath79/machtypes.h
添加以下内容:

ATH79_MACH_MC_MW305R,

修改文件:/build_dir/target-mips_24kc_musl/linux-ar71xx_generic/linux-4.4.74/arch/mips/ath79/Makefile添加以下内容:

obj-$(CONFIG_ATH79_MACH_MC_MW305R)  += mach-mc-mw305r-v3.o

使用以下命令配置:

make kernel_menuconfig
-> Machine selection
-> Atheros AR71XX/AR724X/AR913X machine selection
MERCURY MC-MW305R v3 support

此时,编译一次看看有没有问题:

make

make 成功后,如果直接固件下载到 flash,已经能启动了,但会出现网络问题,继续看第五步。

第五步:network 配置问题(ar71xx系列)

修改文件:/target/linux/ar71xx/base-files/etc/board.d/02_network
添加以下内容:

mc-mw305r-v3)ucidef_set_interfaces_lan_wan "eth0" "eth1"ucidef_add_switch "switch0" \"0@eth0" "1:lan" "2:lan" "3:lan" "4:lan";;

修改文件:/target/linux/ar71xx/base-files/lib/ar71xx.sh
添加以下内容:

*"MC-MW305R v3"*)name="mc-mw305r-v3";;

此时,再编译一次看看有没有问题:

make

make 成功后,如果下载固件到 flash,网络已经没问题了,但是会发现 LED 灯工作得不正常,继续看第六步。

第六步:LED 灯问题

修改文件:/target/linux/ar71xx/base-files/etc/board.d/01_leds
添加以下内容:

mc-mw305r-v3)ucidef_set_led_netdev "wan" "WAN" "mercury:green:wan" "eth1"ucidef_set_led_switch "lan0" "LAN0" "mercury:green:lan1" "switch0" "0x10"ucidef_set_led_switch "lan1" "LAN1" "mercury:green:lan2" "switch0" "0x08"ucidef_set_led_switch "lan2" "LAN2" "mercury:green:lan3" "switch0" "0x04"ucidef_set_led_switch "lan3" "LAN3" "mercury:green:lan4" "switch0" "0x02"ucidef_set_led_wlan "wlan" "WLAN" "mercury:green:wlan" "phy0tpt";;

这时候已经大功告成了,最后编译一次:

make

Mercury MW305R v3.0 路由器改造 LEDE(OpenWRT)相关推荐

  1. mercurymw305r虚拟服务器,Mercury MW305R v3.0 路由器改造 LEDE(OpenWRT)

    說明 1. 改造 Mercury MW305R v3.0(芯片 9533) 2. OpenWRT 版本:LEDE 17 3. 環境:Ubuntu 16.04 x64 第一步:修改硬件 1. 換 RAN ...

  2. 知道创宇研发技能列表v3.0

    Expand - Collapse 知道创宇研发技能表v3.0 2015/8/21 发布 by @知道创宇(www.knownsec.com) @余弦 & 404团队 后续动态请关注微信公众号 ...

  3. 【cocos2d-js官方文档】二十五、Cocos2d-JS v3.0中的单例对象

    为何将单例模式移除 在Cocos2d-JS v3.0之前.全部API差点儿都是从Cocos2d-x中移植过来的,这是Cocos2d生态圈统一性的重要一环.可惜的是,这样的统一性也在非常大程度上限制了C ...

  4. 低代码平台,JeecgBoot v3.0版本发布—新里程牌开始,迎接VUE3版本到来

    项目介绍 JeecgBoot是一款基于代码生成器的低代码平台!前后端分离架构 SpringBoot2.x,SpringCloud,Ant Design&Vue,Mybatis-plus,Shi ...

  5. 【保姆级!完整详细!】小米路由器3 刷openwrt固件并连接上校园网

    小米路由器3 刷openwrt固件并连接上校园网 本篇参考: https://www.bilibili.com/video/BV1dL411A72f https://blog.csdn.net/adi ...

  6. 小米路由器AX9000刷写OpenWrt官网发布的固件

    准备工作 从官网(OpenWrt Firmware Selector)下载下图标注的两个文件 由于OpenWrt官网发布的固件会改写MTD分区布局,不支持原厂和OpenWrt共存,需要先刷入openw ...

  7. 创宇技能表_知道创宇研发技能表v3.0 来了!

    这次是时隔1年多了,我们终于发布了知道创宇研发技能表v3.0,来自知道创宇团队的良心出品.这一年来,我们都更新了哪些技能呢? ## Changelog * 通用技能,做了重构性更新,更有脉络章法 * ...

  8. MKS Robin nano V3.0 主板使用Klipper固件教程

    MKS Robin nano V3.0 主板使用Klipper固件教程 文章目录 一.准备 1.1硬件板卡准备 1.2镜像文件下载 1.3镜像文件安装 1.4无线网络配置 1.5连接树莓派 1.6 O ...

  9. 运维知识体系-V3.0

    运维知识体系-V3.0 By:赵舜东(赵班长) [转载请注明来自于-运维社区:https://www.unixhot.com/] 运维架构层级/运维角度 内容描述/主要技术关键词 监控体系 自动化/D ...

最新文章

  1. 独家|测量、建议、快速上手!你所使用的Python对象占用了多少内存?(附代码)...
  2. 三行情书代码_用三行代码优化您的交易策略
  3. java ee maven_针对新手的Java EE7和Maven项目–第7部分
  4. 如何利用云服务器挖矿_企业如何选择云服务器
  5. uni一t 说明书_不输特斯拉,站在UNI-T背后的长安「超级工厂」
  6. 2.设计模式-桥接模式
  7. java instanceof运算符_Java 中的instanceof 运算符
  8. 如何轻松除掉肠道废物
  9. Python 集体智慧编程PDF
  10. 中英文停用词(stop word)列表
  11. qt 设置按钮大小_QT使用教程(四)之初体验
  12. linux 性能测试 跑分,测试10秒钟,分析8小时,性能评估只看跑分可不够
  13. 计算机组成原理——中央处理器
  14. C++if嵌套语句判断闰年
  15. 【读书笔记】吴军阅读与写作讲义
  16. python调整图片亮度_python 调整图片亮度的示例
  17. IDEA设置一键导包
  18. 微信热搜榜、订阅热词API
  19. [文摘20080131]89个管理定律及点评
  20. 河边的小屋原来是这么俗气的一个名字

热门文章

  1. python pyplot 宽高等比_如何使pyplot分散中的markersize不依赖于图形的比例?
  2. 2076:时针分针的夹角
  3. 记一次英伟达驱动踩坑
  4. matlab 生成audio vst plugin
  5. REVEAL APP FOR IOS 永久试用
  6. oracle 11g system01.dbf,oracle数据文件system01.dbf上有坏块,如何修复
  7. K-L变换(Karhunen-Loève Transform)
  8. 写在5G边缘:2B本质是2C
  9. Oracle学习1.0
  10. RMQ的ST算法(区间最值)