【最新发布OpenWrt X86软路由编译多功能稳定版ipv6/多线多拨/smartdns/酸酸乳/应用过滤/SFE加速】
俗话说,生命不息,折腾不止。
前段时间折腾完中国电信的光猫(光猫的配置低,wifi和网络功能不太稳定),
把拨号功能放到了小米R3G路由器,这两天又开始对小米路由器有想法了,哈哈!
关于如何编译 OpenWrt 固件,网上已有很多教程,我也是临时学的,总结记录一下。
适合刷小米R3G路由器的固件,比较流行的有三种:
Pandavan和OpenWrt,还有一个叫 X-Wrt(也是基于OpenWrt)。
Pandavan的功能都比较完善,适合小白刷了直接用,
不过我刷了Pandavan后,发现我的老dell笔记本连接wifi速度好像蜗牛。。。(2.4G的自带网卡)
并且稳定性也有一丁点问题(没去做数据测试,只是感觉)
然后,目标转向了X-Wrt和OpenWrt,X-Wrt的话优化的不错,还内置了远程登录管理功能,却少了饮料插件,
找啊找,居然没找到合适的插件源码来编译(好多都过期了)
最后,发现了Lean大神的OpenWrt源码,并且里面包括了有好多新插件,
决定自行编译玩玩!
感谢网络/论坛上的大神们,感谢他们提供的不少教程。
**【2021.05.03重新制作】。
基于最新版lean源码。
后台 192.168.8.1 用户root 密码password
1、新版 ,基于lean大最新源码重新编译,wifi闭源驱动,可开启中继模式
2、修复NTFS格式硬盘/U盘挂载,具体内容与插件自行尝试。
3、开启并修改wifi密码方法:网络-无线-2G的,基本设置-修改SSID,加密选WPA2PSK,填写密码,保存&应用
4、同理,修改开启5G的wifi**
【重点:刷机方法】
1、开启ssh,备份原厂分区,刷breed,然后进breed刷kernel.bin,重启。
2、重启完成后,必须进openwrt后台,系统-备份/升级,选择sysupgrade.bin升级,功能才正常!【具体方法翻到后面查看】!
【第二部分、刷机过程】
1、刷机准备工具
小米R3G路由器
一个U盘(安装开启ssh)
一根牙签(用来重置路由器)
ssh命令行软件Xshell5(也可以用putty等等)
ssh传输软件WinSCP
2、路由器开启SSH
http://www.miwifi.com/miwifi_download.html
下载小米路由器开发版固件,
登陆到小米路由器的 管理后台,手动升级下载的开发版固件。
https://d.miwifi.com/rom/ssh
登陆你的小米账号,获取当前路由器的 SSH root 密码。
下载页面上提供的 miwifi_ssh.bin 文件,拷贝进FAT32的U盘的根目录,按照提示解锁 SSH
路由器断电,U盘插入路由器USB接口,牙签捅住reset扭不松开,
接上电源后等指示灯为黄色闪烁时才松开,数分钟后路由器会自动重启,此过程不要乱动路由器。
3、打开SSH终端(我用的Xshell5),
输入命令
$ ssh root@192.168.31.1
然后输入小米提供的ssh密码,登录成功,显示搞笑的 ARE U OK,就开启ssh成功了
【重要备份】
在使用 SSH 干坏事之前,要先做好备份。在终端中输入 cat /proc/mtd 查看分区情况:
root@XiaoQiang:~# cat /proc/mtd
dev: size erasesize name
mtd0: 07f80000 00020000 "ALL"
mtd1: 00080000 00020000 "Bootloader"
mtd2: 00040000 00020000 "Config"
mtd3: 00040000 00020000 "Bdata"
mtd4: 00040000 00020000 "Factory"
mtd5: 00040000 00020000 "crash"
mtd6: 00040000 00020000 "crash_syslog"
mtd7: 00040000 00020000 "reserved0"
mtd8: 00400000 00020000 "kernel0"
mtd9: 00400000 00020000 "kernel1"
mtd10: 02000000 00020000 "rootfs0"
mtd11: 02000000 00020000 "rootfs1"
mtd12: 03580000 00020000 "overlay"
mtd13: 012a6000 0001f000 "ubi_rootfs"
mtd14: 030ec000 0001f000 "data"
我们需要备份前面 13 个分区(第 14 个分区可能提示占用而不能被备份)。在小米路由器上插入一个格式化为 FAT32 格式的 U 盘(你可以继续用之前解锁 SSH 的 U 盘),然后在终端执行 df -h 查看你的 U 盘的路径(通常形如 /extdisks/sdax)。我的是 /extdisks/sda1,下文以此为例。
在终端中依次输入下面的指令(别忘了修改为你的 U 盘的路径):
dd if=/dev/mtd0 of=/extdisks/sda1/backup/ALL.bin
dd if=/dev/mtd1 of=/extdisks/sda1/backup/Bootloader.bin
dd if=/dev/mtd2 of=/extdisks/sda1/backup/Config.bin
dd if=/dev/mtd3 of=/extdisks/sda1/backup/Bdata.bin
dd if=/dev/mtd4 of=/extdisks/sda1/backup/Factory.bin
dd if=/dev/mtd5 of=/extdisks/sda1/backup/crash.bin
dd if=/dev/mtd6 of=/extdisks/sda1/backup/crash_syslog.bin
dd if=/dev/mtd7 of=/extdisks/sda1/backup/reserved0.bin
dd if=/dev/mtd8 of=/extdisks/sda1/backup/kernel0.bin
dd if=/dev/mtd9 of=/extdisks/sda1/backup/kernel1.bin
dd if=/dev/mtd10 of=/extdisks/sda1/backup/rootfs0.bin
dd if=/dev/mtd11 of=/extdisks/sda1/backup/rootfs1.bin
dd if=/dev/mtd12 of=/extdisks/sda1/backup/overlay.bin
dd if=/dev/mtd13 of=/extdisks/sda1/backup/ubi_rootfs.bin
dd if=/dev/mtd14 of=/extdisks/sda1/backup/data.bin
当你运行到最后一个是可能会遇到以下报错提示:
dd: can't open '/dev/mtd14': Device or resource busy
这个无所谓,我们只需要备份前 13 个分区就行,最后一个分区没有备份的必要。
如果你还在使用 MIWIFI 的官方固件,需要还原上述备份,你可以使用下述指令;当然现在我们不需要执行这些操作:
mtd write /extdisks/sda1/backup/Bootloader.bin Bootloader
mtd write /extdisks/sda1/backup/Config.bin Config
mtd write /extdisks/sda1/backup/Bdata.bin Bdata
mtd write /extdisks/sda1/backup/Factory.bin Factory
mtd write /extdisks/sda1/backup/crash.bin crash
mtd write /extdisks/sda1/backup/crash_syslog.bin crash_syslog
mtd write /extdisks/sda1/backup/reserved0.bin reserved0
mtd write /extdisks/sda1/backup/kernel0.bin kernel0
mtd write /extdisks/sda1/backup/kernel1.bin kernel1
mtd write /extdisks/sda1/backup/rootfs0.bin rootfs0
mtd write /extdisks/sda1/backup/rootfs1.bin rootfs1
mtd write /extdisks/sda1/backup/overlay.bin overlay
mtd write /extdisks/sda1/backup/ubi_rootfs.bin ubi_rootfs
如果你备份了 data,你可以继续执行下面的指令还原 data
mtd write /extdisks/sda1/backup/data.bin data
备份完成后为小米路由器 3G 开始刷入 Breed 不死控制台:
4、刷入 Breed 不死控制台
这个步骤是刷入Bootloader分区,就是类似安卓的recovery,用来恢复备份系统的
就算固件刷坏了,Bootloader没坏,都能刷回来,不会变砖
在电脑上下载小米路由器 3G 的 Breed 不死控制台固件并重命名为 breed.bin,在 U 盘中新建 breed 文件夹,把 breed.bin 复制到 U 盘的 breed 目录之中。然后把 U 盘插回到小米路由器上,并在终端直接执行下面的指令(依然要注意你 U 盘的路径):
mtd -r write /extdisks/sda1/breed/breed.bin Bootloader
5、小米路由器断电,用牙签按下小米路由器的 reset 按钮不放,
然后接上电源当路由器的灯开始闪烁时松开 reset,
在浏览器上中访问 192.168.1.1 就可以看到 Breed 控制台了。
6、进入Breed,选择「固件更新」,
选择你方才下载的openwrt-ramips-mt7621-xiaomi_mir3g-initramfs-kernel.bin固件,确认刷入。
刷入后重启,这个是临时固件,断电数据不会保存,然后进入路由器管理页面 192.168.1.1
默认用户名root 密码password,进去系统管理,更新固件,选择openwrt-ramips-mt7621-xiaomi_mir3g-squashfs-sysupgrade.bin
然后再进入Breed,在环境变量编辑里添加xiaomi.r3g.bootfw字段,值为2,保存后重启即可完美进入Openwrt。
7、进入新系统截图
第一部分是编译过程,第二部分是刷机过程,第三部分编译好的固件下载,下载地址在文章最后。
【第一部分、编译属于自己小米R3G路由器的OpenWrt固件】
编译OpenWrt固件的环境:Ubuntu 64bit
我用的国外VPS,系统装的Ubuntu 19.10 x64
VPS的配置比较低,内存只有1G,需要先增加swap(类似虚拟内存)
然后新增账户,不能用root用户进行编译。
来具体操作:
1、ssh用root登录服务器,
查看内存使用
free -m
2、增加虚拟内存1G
dd if=/dev/zero of=/home/swap bs=1024 count=1024000
/sbin/mkswap /home/swap
/sbin/swapon /home/swap
3、再次查看,确认增加成功
free -m
4、新增用户名zsz,并设置密码
useradd zsz
passwd zsz
4、编辑sudoers文件,赋予zsz的权限
vi /etc/sudoers
在这句话后面,
root ALL=(ALL:ALL) ALL
增加
zsz ALL=(ALL:ALL) ALL
然后按esc,
:wq!
退出强制保存(是只读文件)
5、切换成新用户
su zsz
6、执行系统更新
sudo apt-get update
7、安装一些编译所需软件包
sudo apt-get -y install build-essential asciidoc binutils bzip2 gawk gettext git libncurses5-dev libz-dev patch unzip zlib1g-dev lib32gcc1 libc6-dev-i386 subversion flex uglifyjs git-core gcc-multilib p7zip p7zip-full msmtp libssl-dev texinfo libglib2.0-dev xmlto qemu-utils upx libelf-dev autoconf automake libtool autopoint
8、新建目录zsz,并进入目录
cd /zsz
9、下载大神的源码(下载完会自动建立lede文件夹)
git clone https://github.com/coolsnowwolf/lede
10、进入lede文件夹
cd lede
11、运行更新列表命令
./scripts/feeds update -a
./scripts/feeds install -a
12、运行固件配置命令
make menuconfig
选择小米路由器R3G对应的配置
然后选择自己想要的插件
Luci->3.Applications
(* 点击Y勾选需要编译进固件的应用,M勾选只编译为ipk安装包,空格剔除不需要的应用)
其他基本默认就可以了
Themes里勾选material主题
13、点击save保存覆盖,然后退出
14、输入命令,开始编译
make -j1 V=s
(-j1 后面是线程数)
接下来就是漫长的等待,配置不高的话,第一次编译需要等2-3小时才能编译
15、完成编译
固件保存在 lede/bin/targets/ramips/mt7621
winscp登录vps,进入lede文件夹,把这两个文件下载回来,准备刷机
openwrt-ramips-mt7621-xiaomi_mir3g-initramfs-kernel.bin
openwrt-ramips-mt7621-xiaomi_mir3g-squashfs-sysupgrade.bin
另外这两个文件,也是可以刷机的,只是刷的方法不一样
openwrt-ramips-mt7621-xiaomi_mir3g-squashfs-kernel1.bin
openwrt-ramips-mt7621-xiaomi_mir3g-squashfs-rootfs0.bin
【再次编译】
进入源码目录(如果不在此目录)
更新
TIPS: 短期内再次编译可忽略更新这个步骤。
更新系统软件包
sudo sh -c "apt update && apt upgrade -y"
主要作用是更新在编译环境搭建时所安装的编译组件
拉取 OpenWrt 源码更新
git pull
拉取 feeds 源码
./scripts/feeds update -a
安装 feeds 中的软件包
./scripts/feeds install -a
文件清理
清除旧的编译产物(可选)
make clean
在源码有大规模更新或者内核更新后执行,以保证编译质量。此操作会删除/bin和/build_dir目录中的文件。
清除旧的编译产物、交叉编译工具及工具链等目录(可选)
make dirclean
更换架构编译前必须执行。此操作会删除/bin和/build_dir目录的中的文件(make clean)以及/staging_dir、/toolchain、/tmp和/logs中的文件。
清除 OpenWrt 源码以外的文件(可选)
make distclean
除非是做开发,并打算 push 到 GitHub 这样的远程仓库,否则几乎用不到。此操作相当于make dirclean外加删除/dl、/feeds目录和.config文件。
还原 OpenWrt 源码到初始状态(可选)
git clean -xdf
如果把源码改坏了,或者长时间没有进行编译时使用。
清除编译缓存
rm -rf tmp
此操作据说可防止make menuconfig加载错误,暂时没遇到过,如有错误欢迎大佬指正。
删除配置文件(可选)
rm -f .config
可以理解为恢复默认配置,建议切换架构编译前执行。
编译
调整 OpenWrt 系统组件
make menuconfig
如果不打算调整组件则输入make defconfig,它会检测编译环境并根据更新自动调整编译配置文件。
预下载编译所需的软件包
make download -j8 V=s
检查文件完整性
find dl -size -1024c -exec ls -l {} \ ;
此命令可以列出下载不完整的文件(根据我多次编译的经验得出小于1k的文件属于下载不完整),如果存在这样的文件可以使用find dl -size -1024c -exec rm -f {} \ ;命令将它们删除,然后重新执行make download下载并反复检查,确认所有文件完整可大大提高编译成功率,避免浪费时间。
开始编译
make -j$(nproc) V=s
-j$(nproc):自动获取CPU线程数,采用多线程编译。成功编译后的再次编译且没有进行make clean操作时使用。
【小米路由器R3G固件下载 2021.04.21最新编译】
不想自己折腾的话,可以下载我编译的固件,本固件只适合小米路由器3G。
天翼网盘下载地址:https://cloud.189.cn/t/AzM7Nj3UVFny(访问码:xqb2)
(提醒,刷机有风险,请谨慎操作哦。具体方法请查看上面的刷机操作部分)