相信很多人对路由器的工作原理充满好奇。在这篇文章中,我们将通过使用Wi-Fi模组芯片(注意,这不是专门为路由器设计的芯片,因此在硬件功能上会有所限制)结合主控芯片的方式,演示如何实现一款简易的路由器,并揭秘其中的技术方案。这不仅帮助大家理解路由器的构建原理,也能为那些希望定制化网络设备的朋友们提供参考,同时,我们还将开放源代码。
1. 环境准备
1.1 Host环境
这里的主控我们选择了NXP平台的i.MX8MP芯片,需要自行购买,其链接如下所示:
i.MX 8M Plus | Cortex-A53/M7 | NXP Semiconductors
1.2 Wi-Fi模组
这里我们选择了高通的Wi-Fi 7芯片QCC2076作为示例,并且使用Quectel的模组FGE576Q。此芯片主要面向市场为机顶盒、游戏机等市场,主要做STA,所以做AP时,硬件功能上会有所欠缺,但是对于我们DIY已经完全够用了。
1.3 连接实物图
关于实物连接,因为我们的FGE576Q是M.2 Key-E接口的模组,并且我们的i.MX8MP有M.2 Key-E的接口,所以无需任何飞线或者转接板,直接插上去即可,具体如下图所示:
2. 软件环境
2.1 获取代码
我已经为大家准备好了相关代码SDK,无需自己从头bringup,从github上直接拉取编译即可,具体指令如下所示:
# git clone git@github.com:Qingzong-MA/Simple_Router.git # 如果需要相关代码,请联系博主
# cd Simple_Router
# source build-quec.sh
# buildconfig FGE576QAAMD FGE576QAAMD_IMX8_5.15_LINUX_R01A01V01
# bitbake core-image-minimal
2.2 固件烧录
自行参考网上相关文档,如有相关疑问,请留言给博主即可。
2.3 安装QCA2076驱动
确认硬件识别:
# lspci | grep Qualcomm
安装QCA驱动:
# insmod /lib/modules/5.15.71+g305f6c9af2db/extra/qcc207x/wlan.ko
2.3 网络配置
配置hostapd(Wi-Fi热点):
# brctl addbr br0
# ifconfig br0 192.168.0.1
# ip link set dev br0 up
# systemctl stop dnsmasq
# dnsmasq --conf-file=/etc/dhcpd_dhcp_lan.conf &
# hostapd -B /etc/wifi/hostapd.conf -P /var/run/data/hostapd_ssid1.pid -e /var/run/entropy_file1 -dd -t -K -f /var/run/hostapd1.log
# brctl addif br0 wlan0
启动服务:
# iptables -F // 清空用户自定义规则
# echo 1 >/proc/sys/net/ipv4/ip_forward
# iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE --random