 实战:从源码到固件烧录)
1. 环境准备与源码获取第一次玩OpenWrt编译的朋友可能会被各种术语吓到其实整个过程就像组装乐高积木——只要按照说明书一步步来谁都能搭出自己想要的路由器系统。我去年第一次给SKW78编译OpenWrt时花了三天时间才搞明白所有环节现在把踩过的坑都总结成这份保姆级教程。先说说硬件配置SKW78采用的是MT7621方案这个芯片在智能路由领域堪称老黄牛性能稳定且开源支持完善。无线部分用的MT7603E芯片负责2.4GHz频段这个组合在工控设备里特别常见。我实测在OpenWrt 21.02下这套硬件能稳定跑到600Mbps的NAT吞吐量。准备编译环境推荐用Ubuntu 20.04 LTS记得硬盘预留至少50GB空间。先安装基础工具链sudo apt update sudo apt install -y build-essential ccache ecj fastjar file g gawk \ gettext git java-propose-classpath libelf-dev libncurses5-dev \ libncursesw5-dev libssl-dev python python2.7-dev python3 unzip wget \ python3-distutils python3-setuptools rsync subversion swig time \ xsltproc zlib1g-dev国内用户建议换源加速sudo sed -i s/archive.ubuntu.com/mirrors.aliyun.com/g /etc/apt/sources.list获取源码时最容易卡在git clone环节这里推荐用国内镜像仓库git clone --depth1 --branch openwrt-21.02 https://gitee.com/cocos_yang/openwrt.git cd openwrt--depth1参数能大幅减少下载量实测从原本的1.2GB缩减到300MB左右。进入目录后要修改feeds配置把官方源替换为国内镜像sed -i s#git.openwrt.org/#gitee.com/openwrt/#g feeds.conf.default2. 软件包管理与依赖处理很多新手编译失败都是栽在feeds更新这一步。OpenWrt的软件包管理系统就像个智能超市feeds就是货架清单。我们先要更新货架目录再把需要的商品放进购物车./scripts/feeds update -a ./scripts/feeds install -a这里有个隐藏技巧如果遇到网络超时可以手动修改feeds.conf.default文件把所有源替换成gitee镜像。我常用的配置是这样的src-git-full packages https://gitee.com/cocos_yang/openwrt_packages.git;openwrt-21.02 src-git-full luci https://gitee.com/cocos_yang/openwrt_luci.git;openwrt-21.02 src-git-full routing https://gitee.com/cocos_yang/openwrt_routing.git;openwrt-21.02更新完成后建议先做个清洁编译make distclean make defconfig这时候会遇到第一个关键选择要不要用预编译的dl库我建议新手勾选Download and build all packages虽然耗时更长但能避免依赖问题。老手可以用我整理好的dl包约5GB能节省90%的下载时间。3. 内核与驱动配置进入核心配置环节输入make menuconfig界面看起来像老式的BIOS设置其实逻辑很简单按/键可以搜索配置项空格键循环切换选中状态方向键移动光标对于SKW78要特别注意这几个配置Target System - MediaTek Ralink MIPS Subtarget - MT7621 based boards Target Profile - Custom Profile无线驱动是最大坑点很多教程会推荐选MT7615但SKW78的2.4G芯片实际是MT7603E。正确配置路径是Kernel modules - Wireless Drivers - kmod-mt7603其他实用配置建议勾选Build the OpenWrt SDK方便后期调试在Image configuration里去掉Build images with ramdisk勾选luci和luci-ssl获得Web管理界面保存配置后建议备份.config文件cp .config config_backup4. 编译优化与排错开始编译前建议做两件事加速过程开启ccache缓存export CCACHE_DIR$PWD/.ccache export CCACHE_SIZE2G启用多线程编译CPU核心数×1.5make -j$(($(nproc)1)) Vs编译过程中最常见的三个错误下载失败手动下载dl库文件放到dl目录依赖冲突执行make clean后重新配置内存不足添加swap空间或减少线程数我遇到最棘手的问题是mt7603驱动编译报错解决方法是在make前执行echo CONFIG_NET_RADIOy .config编译成功后会生成两个关键文件openwrt-ramips-mt7621-skw78-squashfs-sysupgrade.bin升级固件openwrt-ramips-mt7621-skw78-squashfs-factory.bin出厂固件5. 固件烧录与测试烧录方式取决于设备当前状态从原厂系统升级用factory.bin通过Web界面直刷OpenWrt版本升级用sysupgrade.bin在SSH下刷机我推荐用scp上传固件后命令行操作scp openwrt-*.bin root192.168.1.1:/tmp/ ssh root192.168.1.1 sysupgrade -v /tmp/openwrt-ramips-mt7621-skw78-squashfs-sysupgrade.bin首次启动后必做设置修改无线配置vi /etc/config/wireless找到option disabled 1改为option disabled 0重启网络服务/etc/init.d/network restart测试小技巧用iperf3测内网吞吐量连续ping网关24小时检查稳定性查看内核日志logread | grep mt76036. 深度定制与优化系统跑起来后可以进一步调优。比如修改MT7603的发射功率单位dBmuci set wireless.radio0.txpower20 uci commit wireless wifi reload我常用的性能优化参数# 提升NAT性能 echo 16384 /proc/sys/net/netfilter/nf_conntrack_max # 优化内存分配 uci set system.system[0].coredump0 uci commit对于需要USB功能的用户要额外编译这些模块kmod-usb-core kmod-usb2 kmod-usb-storage遇到无线信号弱的问题可以尝试调整国家代码uci set wireless.radio0.countryCN uci commit wireless reboot7. 常见问题解决方案Q1: 编译到一半报错怎么办A: 保留.config文件后执行make clean make -j1 Vs单线程编译能更准确显示错误位置Q2: 刷机后无法获取IPA: 按住复位键15秒恢复出厂设置或者用TTL串口连接查看启动日志Q3: 无线速率不达标A: 检查是否启用HT40模式uci set wireless.radio0.htmodeHT40 uci commit wireless wifi reloadQ4: 如何备份配置A: 使用sysupgrade保留配置sysupgrade -b /tmp/backup.tar.gz最后提醒下MT7621的USB3.0接口会干扰2.4G无线如果要用U盘建议使用USB2.0模式或者将无线固定在5GHz频段