嵌入式系统之-小米路由器3G v1

2023-05-16

嵌入式系统之-小米路由器3G v1

相关汇总:嵌入式系统系列目录
第一篇 嵌入式系统之-小米路由器3G V1
第二篇 …
未完待续,欢迎收藏关注。


目录

  • 嵌入式系统之-小米路由器3G v1
  • 前言
  • 一、开箱和拆机
  • 二、硬件配置
  • 三、开启ssh
    • 3.1 升级到开发版ROM
      • 3.1.1 下载ROM
      • a. web管理端手动更新固件
      • b. U盘更新固件
    • 3.2 刷入ssh解锁包
    • 3.3 修改root密码及开启密钥登录
  • 四、重写Bootloader
    • 4.1 安装breed BootLoader
  • 五、刷入OpenWrt系统
  • 六、配置OpenWrt系统
    • 6.1 配置opkg镜像
    • 6.2 配置luci管理界面语言
    • 6.2 配置ddns服务
      • 6.2.1 安装ddns脚本包和luci界面包
      • 6.2.2 安装ddns-scripts_aliyun_1.0.0-1_all.ipk
      • 6.2.3 启用阿里云DDNS解析
    • 6.3 配置frp服务
  • 七、升级OpenWrt系统
  • 总结


前言

在2016年末入手了1台小米路由器3(至今健在,还能正常使用),入手之后发现可玩性比以前的传统路由器高了非常多,然后就开始了路由器折腾之路,一发不可收拾。19年又淘了一个二手的小米路由器3G V1,也进行了一通折腾,拖拖拉拉现在才来写这篇文章记录一下折腾的过程。主要包括解锁ssh,写入breed Bootloader,刷入OpenWrt系统,升级OpenWrt,进行相关配置等等。


提示:本篇文章算是处女作,下面的代码和方案仅供参考,搞机请注意安全。

一、开箱和拆机

这部分略过,这里放几个其他大神的开箱图和拆机图,有兴趣的可以去翻翻。

  1. 小米路由器3G开箱评测 有一些基本的测试
  2. 低调的新品,小米路由器3g开箱及【全网首拆】以及翻车撒花
  3. 拆个小米路由3G(R3G) 需要登录才能看大图

总体上外观中规中矩,内部设计也算对得起它的价格,家庭使用基本够用。


二、硬件配置

这里简单罗列一些主要部件的配置:

  • SoC:MediaTek MT7621AT, 880MHz, 双核
  • Flash:128MB
  • RAM:256MB
  • 以太网口:千兆口 x 3(1个WAN口与2个LAN口)
  • WLAN芯片:MediaTek MT7603EN, MediaTek MT7612EN
  • 2.4G:b/g/n
  • 5G:a/n/ac
  • USB:3.0 x 1

硬件详情可查阅OpenWrt上的toh mir3g详情
硬件技术数据可查阅OpenWrt上的techdata mir3g技术规格


三、开启ssh

3.1 升级到开发版ROM

3.1.1 下载ROM

官方ROM下载首页:小米路由器ROM
小米路由器3G 开发版ROM 版本2.25.124(2018年10月30日更新)
下载后将ROM文件存放到文件系统格式为FAT或FAT32的U盘中。按照以下两种方式之一,将路由器升级到开发版。

a. web管理端手动更新固件

插上U盘,路由器上电启动后,使用电脑连接到路由器,使用管理密码(第一次上电初始化的时候设置的,如果忘记,请重置路由器),进入 常用设置->系统状态:升级检测 界面,选择系统升级,然后选择ROM进行手动升级,等重启完成后即可。

b. U盘更新固件

  1. 将3.1.1步骤中下载好的ROM包放到U盘的根目录下,并命名为“miwifi.bin”。
  2. 断开路由器电源,插入U盘,用细长工具按住reset,接通电源,待路由器指示灯变为黄灯闪烁时,松开reset。
  3. 大约3-5分钟后,指示灯变成黄色常亮状态时刷机已经完成正在重启,稍等片刻路由器指示灯变蓝就可以正常使用了。

如果在刷机过程中,指示灯黄灯闪烁几秒后变为黄灯常亮状态,说明此次U盘刷机过程失败,请检查以上的刷机过程并重新进行刷机操作。附指示灯说明:

  • 蓝灯:正常运行(长亮)
  • 黄灯:系统升级中(闪烁),系统启动中(长亮)
  • 红灯:安全模式(闪烁),系统故障(长亮)

3.2 刷入ssh解锁包

刷完开发版ROM后,先确定路由器是否可以正常工作,然后按下列步骤开启SSH管理功能,这样我们就能像操作Linux一样操作路由器了。

  1. 先用小米账户绑定路由器(通过手机客户端“小米WiFi”操作),如果已经绑定则跳过。
  2. 到https://d.miwifi.com/rom/ssh下载SSH工具包,同时记下你的root密码。
  3. 将下载的工具包bin文件复制到U盘(FAT或FAT32格式)根目录下,保证文件名为miwifi_ssh.bin。
  4. 断开小米路由器的电源,将U盘插入USB接口。
  5. 按住reset按钮之后重新接入电源,指示灯变为黄色闪烁状态即可松开reset键。
  6. 等待3-5秒后安装完成之后,小米路由器会自动重启,指示灯变为蓝色即正常运行,之后您就可以尽情折腾啦 😃 。
  7. ssh root@192.168.31.1即可登录到路由器上。密码是前面下载SSH包时记下的密码,如果不出意外,将顺利登录路由器,显示“Welcome to XiaoQiang”和“ARE YOU OK”,这时我们就可以给路由器安装想要的软件了。

3.3 修改root密码及开启密钥登录

  1. 以root用户登录后,在命令行输入passwd,按照提示即可重设root账户的密码,密码可以为空。一定要牢记。否则会很麻烦。

  2. 用密钥登录,需要先生成密钥对,可以使用ssh-keygen或其他工具软件。密钥对生成后,将其导入到/etc/dropbear/authorized_keys文件中。具体操作可以参考如下代码:

    scp ./id_rsa.pub root@192.168.31.1:/home/ #将公钥复制到路由器的/home目录
    ssh root@192.168.31.1 #ssh登录路由器
    cat /home/id_rsa.pub >>/etc/dropbear/authorized_keys #将公钥追加写入到authorized_keys文件
    /etc/init.d/dropbear restart
    

到这里路由器原生系统相关的操作就告一段落了,下一步就要开始激动人心的时刻了。😃


四、重写Bootloader

路由器原生系统使用U-boot作为BootLoader,U-boot是德国大神弄的一个非常强大的BootLoader,在不少嵌入式系统中都有应用。但是为了发扬生命不息,折腾不止的精神,本文使用hackpascal大神的breed作为Bootloader,具体操作过程如下。目前也有很多其他的BootLoader,如opboot等,各有其优缺点,在此不一一评述。

4.1 安装breed BootLoader

喝水不忘挖井人,在此先膜拜一下hackpascal大神。相关连接:

  • 在恩山无线论坛的主页:https://www.right.com.cn/forum/space-uid-200302.html
  • 个人主页:https://www.hackpascal.net/
  • 恩山论坛上Breed开发blog:https://www.right.com.cn/forum/forum.php?mod=viewthread&tid=161906
  • Breed BootLoader官方下载页:https://breed.hackpascal.net/

下面开始我们的正菜。

  1. 从Breed BootLoader官方下载页下载breed固件包,一个bin文件,小米路由器3G v1对应的固件下载地址:https://breed.hackpascal.net/breed-mt7621-xiaomi-r3g.bin
  2. 然后将文件重命名为breed.bin后,上传到小米路由器,可以使用U盘或者使用SCP上传,上传到/tmp目录下。
  3. ssh登录到小米路由器,使用cat /proc/mtd 查看系统的固件和分区布局,然后开始将breed写入到BootLoader区 mtd -r write /tmp/breed.bin Bootloader
  4. 刷入后,机器会自动重新启动,默认会进入原来的小米路由器固件。
  5. 如果按住reset键开机,等到路由指示灯闪烁时,松开reset键,然后浏览器中输入192.168.1.1即可进入breed web恢复控制台。
  6. 进入breed web恢复控制台,备份原有系统的所有信息。
  7. 重启路由器,回到原来的小米路由器固件,然后ssh登陆准备刷入openwrt。

五、刷入OpenWrt系统

目前OpenWrt中已经上线了小米路由器3G v1的稳定版(release),点这里。
如果喜欢尝鲜可以试试开发版(snapshot),也是点这里。

在这里我们刷入稳定版,具体操作过程如下:

  1. 下载稳定版的固件包 注意版本
    openwrt-19.07.4-ramips-mt7621-xiaomi_mir3g-squashfs-kernel1.bin
    openwrt-19.07.4-ramips-mt7621-xiaomi_mir3g-squashfs-rootfs0.bin
    下载完成后,使用scp或者U盘,将这两个文件复制到路由器的/tmp目录。

  2. 将固件写入系统,ssh登录到小米路由器

    cd /tmp
    mtd write openwrt-19.07.4-ramips-mt7621-xiaomi_mir3g-squashfs-kernel1.bin kernel0
    mtd write openwrt-19.07.4-ramips-mt7621-xiaomi_mir3g-squashfs-kernel1.bin kernel1
    mtd write openwrt-19.07.4-ramips-mt7621-xiaomi_mir3g-squashfs-rootfs0.bin rootfs0
    reboot
    
  3. 重新启动后,ssh登录路由器,按照前面所述重新设置root密码。

至此,openwrt系统安装完毕。


六、配置OpenWrt系统

6.1 配置opkg镜像

镜像由清华大学开源软件镜像站管理。
镜像首页:OpenWrt OPKG Mirror
镜像使用帮助:镜像配置帮助

  • 手工替换
    登录到路由器,并编辑 /etc/opkg/distfeeds.conf 文件,将其中的downloads.openwrt.org 替换为 mirrors.tuna.tsinghua.edu.cn/openwrt 即可。
  • 自动替换
    执行如下命令自动替换
    sed -i 's_downloads.openwrt.org_mirrors.tuna.tsinghua.edu.cn/openwrt_' /etc/opkg/distfeeds.conf
    opkg update
    

6.2 配置luci管理界面语言

进入系统->系统:语言和界面,选择中文,如果选择中文后界面依然为英文,则需要手动安装中文语言包。

  • 命令行安装,ssh登录到路由器

    opkg install luci-i18n-base-zh-cn
    
  • luci web界面安装
    进入系统-软件,首先更新软件列表,然后在filter中输入luci-i18n-base-zh-cn,然后在出来的结果中,点击 安装 即可。

6.2 配置ddns服务

6.2.1 安装ddns脚本包和luci界面包

opkg install ddns-scripts luci-app-ddns luci-i18n-ddns-zh-cn

6.2.2 安装ddns-scripts_aliyun_1.0.0-1_all.ipk

众所周知,OpenWrt自带的DDNS并不支持阿里云的动态DNS解析服务。这里使用sensel大神做的一个脚本来实现阿里云DDNS解析。

项目介绍:
论坛主页:适用于OpenWRT/LEDE自带DDNS功能的阿里云脚本,完美嵌入
Github主页:https://github.com/sensec/ddns-scripts_aliyun

从github下载ddns-scripts_aliyun_1.0.0-1_all.ipk包,然后执行 opkg install ddns-scripts_aliyun_1.0.0-1_all.ipk 即可安装成功。

6.2.3 启用阿里云DDNS解析

  • 第一步:准备好阿里云accesskey
  • 第二步:在 服务->动态DNS 界面进行详细配置。注意查询主机名字段需要填写你要设置的二级域名,如blog.baidu.com;如果需要将顶级域名进行解析则直接填写顶级域名,如baidu.com域名字段填写需要DDNS解析到的二级域名,如前述的blog.baidu.com;如果是顶级域名则写成@baidu.com这种形式
  • 第三步:使用HTTPS可以勾选或者不勾选,不影响结果。CA 证书路径字段可以为空。
  • 第四步:切换到高级设置标签,根据路由器是否配置了wan接口,选择使用相应的方式获取路由器公网IP地址来源。本例中,路由器位于内网中,切未配置wan口,所以需要选择用URL方式获取公网IP。默认提供了一个用于监测的URL,可以直接使用,如果不用这个,也可以使用其他的,比如:http://ddns.oray.com/checkip 或者 http://www.3322.net/dyndns/getip等等。另外DNS服务器字段建议填一个靠谱的。

配置完成后,保存并应用,回到 服务->动态DNS 界面,启动即可。另外检查一下 系统->启动项 里面是否有ddns,处于启用并启动状态即可。

参考链接:
https://www.sgtfz.cn/2020/07/2651.html
http://blog.zivers.com/post/2338.html

至此相关的配置告一段落,更多玩法自己去慢慢发现吧。


6.3 配置frp服务

在我之前的一篇博客中对frp进行了一些基本的介绍,frp服务配置及应用。
这里强调一点关于SoC架构和CPU类型方面的暗坑。根据以下指令获取CPU及系统信息:

cat  /proc/cpuinfo
uname -a

对应的输出(截取)

root@OpenWrt:~#cat  /proc/cpuinfo
system type             : MediaTek MT7621 ver:1 eco:3
machine                 : Xiaomi Mi Router 3G
processor               : 0
cpu model               : MIPS 1004Kc V2.15
BogoMIPS                : 584.90
wait instruction        : yes
microsecond timers      : yes
tlb_entries             : 32
extra interrupt vector  : yes
hardware watchpoint     : yes, count: 4, address/irw mask: [0x0ffc, 0x0ffc, 0x0ffb, 0x0ffb]
isa                     : mips1 mips2 mips32r1 mips32r2
ASEs implemented        : mips16 dsp mt
Options implemented     : tlb 4kex 4k_cache prefetch mcheck ejtag llsc pindexed_dcache userlocal vint perf_cntr_intr_bit cdmm nan_legacy nan_2008 perf
shadow register sets    : 1
kscratch registers      : 0
package                 : 0
core                    : 0
VPE                     : 0
VCED exceptions         : not available
VCEI exceptions         : not available
root@OpenWrt:~#uname -a
Linux OpenWrt 4.14.195 #0 SMP Sun Sep 6 16:19:39 2020 mips GNU/Linux

以上信息中所看到的与cpu相关的描述都是mips字眼,但均无法提供CPU位数,大小端格式等准确有效的信息。
实际上小米路由器3G V1 使用的CPU是联发科的MT7621AT,属于32位 mips小端little endian架构
同样小米路由器3 使用的CPU为联发科的MT7620A,也属于32位 mips小端little endian架构
故应选择上应选择 frp_VERSION_linux_mipsle.tar.gz 程序包。

具体安装,配置,应用按照本节开头的文章操作即可。这里不再赘述。

开机启动frp服务,可以在 系统->启动项-本地启动脚本 界面设置/etc/rc.local 中的启动脚本,也可以直接编辑该文件。

#启动frpc
/root/frp_0.34.1_linux_mipsle/frps -c /root/frp_0.34.1_linux_mipsle/frps.ini >/dev/null 2>&1
exit 0

七、升级OpenWrt系统

从OpenWrt下载sysupgrade文件,点这里。 注意版本
下载后,进入系统->备份/升级: 刷写新的固件,然后点击升级即可。


总结

以上。本文会偶尔更新。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

嵌入式系统之-小米路由器3G v1 的相关文章

  • 模板函数实现数组排序

    template lt class T gt void sortfun T arr int len int i j T tmp for i 61 0 i lt len 1 i 43 43 for j 61 i j lt len 1 j 43
  • 静态转换和动态转换

    1 静态转换 静态转换用于 xff0c 普通数据类型间的转换 xff0c 具有继承关系的父子类指针或引用的转换 class Dad class Son public Dad class MyClass 基础类型转换 void test1 i
  • 文件的原子操作

    文件的原子操作是指一个操作一旦启动 xff0c 则无法能被破坏它的其它操作打断 1 写文件原子操作 无论是两个打开 xff0c 还是dup xff0c 同时操作一个文件都可能引起混乱 xff0c 解决这个问题的方法是 xff0c 可以通过O
  • 目录操作

    创建目录 xff1a int mkdir const char pathname mode t mode xff1b pathname xff0c 路径 xff1b mode xff0c 目录访问权限 xff1b 返回值 xff1a 成功
  • 【UE4学习】6.粒子系统

    文章目录 粒子系统常用参数Simple Sprite Burst EmitterEmitter SettingsEmitter SpawnEmitter UpdateParticle SpawnParticle UpdateAdd Even
  • java中Array/List/Map/Object与Json互相转换详解

    JSON JavaScript Object Notation xff1a 是一种轻量级的数据交换格式 一 JSON建构有两种结构 xff1a 对象和数组 1 对象 xff1a 对象在js中表示为 扩起来的内容 xff0c 数据结构为 ke
  • ZipInputStream解压远程文件报错,java.lang.IllegalArgumentException: MALFORMED[1]

    我遇到的问题是报的这个错java lang IllegalArgumentException MALFORMED 1 at java util zip ZipCoder toString ZipCoder java 65 不是 java l
  • OAuth2.0接百度平台进行授权

    百度开发文档 xff1a https openauth baidu com doc regdevelopers html 1 注册开发者账号并创建一个应用 2 创建应用后 xff0c 获取API Key和Secret Key 3 创建一个S
  • Spring 中最常用的 11 个扩展点

    1 自定义拦截器 spring mvc拦截器根spring拦截器相比 xff0c 它里面能够获取HttpServletRequest和HttpServletResponse等web对象实例 spring mvc拦截器的顶层接口是 xff1a
  • 经典排序算法

    https juejin cn post 7198840786766102589
  • SpringBoot项目启动加载时排除某一个类

    在Application启动类上 xff0c 用这个注解就可以指定某个类不加载进容器 64 ComponentScan
  • 手写一个生产者/消费者模式(三种方式实现)

    这种设计模式需要满足以下三点要求 xff1a xff08 1 xff09 生产者生产数据到缓冲区中 xff0c 消费者从缓冲区中取数据 xff08 2 xff09 如果缓冲区已经满了 xff0c 则生产者线程阻塞 xff1b xff08 3
  • Android中Okhttp,Volley,Retrofit网络框架优缺点及对比

    Okhttp xff1a Square 公司开源的 OkHttp 是一个专注于连接效率的 HTTP 客户端 OkHttp 提供了对 HTTP 2 和 SPDY 的支持 xff0c 并提供了连接池 xff0c GZIP 压缩和 HTTP 响应
  • Google身份验证服务端实现

    import org apache commons codec binary Base32 import org apache commons codec binary Base64 import javax crypto Mac impo
  • 下载jdk8登录账号

    目前在官网下载低于jdk1 8的java jdk的时候需要登陆 xff0c 这边分享一个账号 xff0c 方便下载 2696671285 64 qq com 密码 xff1a Oracle123
  • idea中maven项目 jar包下载不完整解决办法

    有时从git上clone项目 xff0c maven工程 xff0c 有时候pom xml在project标签处报错 xff1a Failed to read artifact descriptor for xxx jar 这种有时候时ja
  • 【RoboMaster】舵机驱动&蓝牙模块教程

    本文是为参加2021赛季北京理工大学机器人队校内赛所写的简单教程 xff0c 意在帮助参赛选手快速了解校内赛所需模块的使用方法 xff0c 以及其与薪火培训知识的联系 舵机驱动 硬件接线 舵机是由直流电机 减速齿轮组 传感器和控制电路组成的
  • vs编译程序加快速度的方法

    在使用VS2013编译C 43 43 程序的时候 xff0c 修改某个文件 xff0c 会使整个工程都重新编译一遍 xff0c 为了使编译速度加快 xff0c 可以修改C 43 43 配置属性 xff1a 第一因时间引起的 xff1a 1
  • Visual Studio中gets报错解决方法

    方法如下 xff1a 1 这是敲出gets后报的错 2 经过查找资料 xff0c 知道vs2015之后就不支持gets了 xff0c 变成了gets s xff0c 并且后面的括号中也不能单独写一个数组名 xff0c 还需加上数组内的个数
  • 利用RCLCPP实现话题的发布与订阅

    目录 1 创建节点2 编写发布与订阅节点2 1 发布节点 xff08 topic publisher 01 cpp xff09 2 2 订阅节点 xff08 topic subscribe 01 cpp xff09 2 3 修改CmakeL

随机推荐