前言
在物联网领域,LoRaWAN 网关作为终端设备与网络服务器的核心桥梁,其稳定性与扩展性直接决定了物联网场景的落地效果。RK3506 芯片凭借3×Cortex‑A7 + 1×Cortex‑M0异构架构、22nm 工业级工艺及丰富接口(双百兆以太网、CAN FD、SPI、USB 等),成为中低端 LoRaWAN 网关、工业物联网网关的理想选型;而 OpenWrt 系统则以轻量、稳定、高可定制性的优势,成为网关固件开发的首选框架。
本文聚焦OpenWrt + RK3506环境搭建全流程,从编译环境准备、源码拉取、内核配置、固件编译到烧录验证,覆盖 LoRaWAN 网关开发的核心步骤,附带完整可执行命令与避坑指南,帮助嵌入式开发者快速搭建可落地的 LoRaWAN 网关开发环境。
一、环境准备
1.1 硬件环境
| 设备类型 | 选型要求 | 用途 |
|---|---|---|
| 编译主机 | Ubuntu 20.04/22.04 LTS(64 位),CPU ≥4 核,内存 ≥8GB,硬盘 ≥50GB | 编译 OpenWrt 固件、配置开发环境 |
| 开发板 | RK3506 核心板 + 底板(需引出 SPI、ETH、UART 接口) | 烧录固件、运行 LoRaWAN 网关 |
| 辅助工具 | USB 转串口模块、电源适配器、网线、SPI 接口射频模块(SX1302/SX1301) | 调试、连接 LoRa 射频模块 |
1.2 软件环境
- 编译依赖:需安装 OpenWrt 编译必备的工具链与库文件
- 源码来源:OpenWrt 官方源码 + RK3506 适配补丁 / DTS 文件
- 烧录工具:瑞芯微 AndroidTool(Windows)/rkflash.sh(Linux)
- 调试工具:SSH 工具(Xshell/MobaXterm)、串口调试工具(SecureCRT)
1.3 安装编译依赖(必执行)
OpenWrt 编译对系统依赖要求严格,需先安装所有必备工具,在编译主机终端执行以下命令:
sudo apt update -y sudo apt upgrade -y sudo apt install -y ack antlr3 asciidoc autoconf automake autopoint binutils bison build-essential \ bzip2 ccache cmake cpio curl device-tree-compiler fastjar flex gawk gettext gcc-multilib g++-multilib \ git gperf haveged help2man intltool libc6-dev-i386 libelf-dev libglib2.0-dev libgmp3-dev libltdl-dev \ libmpc-dev libmpfr-dev libncurses5-dev libncursesw5-dev libreadline-dev libssl-dev libtool lrzsz \ mkisofs msmtp nano ninja-build p7zip p7zip-full patch pkgconf python2.7 python3 python3-pip qemu-utils \ rsync scons squashfs-tools subversion swig texinfo uglifyjs upx-ucl unzip vim wget xmlto xxd zlib1g-dev1.4 创建非 root 用户(关键避坑)
OpenWrt 编译禁止使用 root 用户,需创建专用用户并赋予权限,执行以下命令:
# 创建用户 sudo useradd -m openwrt # 设置密码(按提示输入自定义密码) sudo passwd openwrt # 添加 sudo 权限 sudo usermod -aG sudo openwrt # 切换至 openwrt 用户 su - openwrt二、拉取 OpenWrt 源码与 RK3506 适配
2.1 拉取 OpenWrt 源码
本文选用 OpenWrt 23.05.4 稳定版(兼容性与稳定性最佳),执行以下命令拉取源码:
# 克隆源码(-b 指定版本,避免拉取最新开发版) git clone https://github.com/openwrt/openwrt.git -b v23.05.4 # 进入源码目录 cd openwrt2.2 RK3506 适配配置
官方 OpenWrt 的rockchip/armv8目标暂未默认支持 RK3506,需手动完成适配核心配置:
- 下载 RK3506 专用 DTS(设备树文件)与内核配置补丁,放置至源码对应目录:
# 假设已下载适配文件至当前目录,复制至内核设备树目录 cp rk3506.dtsi target/linux/rockchip/armv8/dts/ cp rk3506-defconfig target/linux/rockchip/armv8/config-6.1/ - 更新 feeds(软件包源,确保 LoRa 相关包可检索):
./scripts/feeds update -a ./scripts/feeds install -a
三、核心配置:OpenWrt 与 RK3506 适配
3.1 选择目标平台与架构
执行make menuconfig进入配置界面,按以下选项勾选:
make menuconfig配置界面操作指南:
- Target System→ 选择Rockchip(核心芯片架构)
- Subtarget→ 选择ARMv8(64 位系统架构)
- Target Profile→ 选择Generic ARMv8(适配 RK3506 通用配置)
- 按
空格键勾选以下核心模块(必选):- LuCI → Collections →luci(Web 管理后台,网关必备)
- LuCI → Modules →luci-base、luci-mod-admin-full(后台核心依赖)
- Network →lora-packet-forwarder(Semtech 官方 LoRa 转发器,网关核心)
- Network →mosquitto-mqtt(MQTT 通信,适配 NS 服务器)
- Utilities →tcpdump、i2c-tools、minicom(调试工具,排查问题)
配置完成后,按Esc退出,选择Yes保存配置文件(.config)。
3.2 内核配置:开启 LoRa 驱动与接口
RK3506 需开启 SPI、I2C 等接口以连接 LoRa 射频模块,同时开启 LoRa 内核驱动,执行以下命令进入内核配置界面:
make kernel_menuconfig按以下路径勾选配置(核心必选):
- Device Drivers→
- 勾选Network device support→LoRa devices→Semtech SX130x/SX125x support(SX1302/SX1301 射频驱动)
- 勾选SPI support→User mode SPI device driver support(SPI 接口启用)
- 勾选I2C support→I2C device interface(I2C 接口启用,适配射频模块调试)
- Networking support→ 勾选LoRaWAN support(LoRaWAN 协议栈支持)配置完成后保存退出,内核配置将自动写入
.config。
3.3 生成默认配置
确保所有配置生效,执行以下命令生成默认配置:
make defconfig四、下载依赖包与编译固件
4.1 下载依赖包(避免编译中断)
OpenWrt 编译需提前下载所有源码依赖包,执行以下命令:
# -j8 表示 8 线程下载,V=s 显示详细日志(便于排查失败) make download -j8 V=s- 若下载失败,可重复执行命令,直至所有包下载完成;
- 若依赖缺失,根据日志提示补充安装对应系统库。
4.2 编译固件(核心步骤)
OpenWrt 编译耗时较长(首次编译通常 2~5 小时),提供两种编译模式:
模式 1:单线程编译(新手首选,稳定不报错)
make V=s -j1模式 2:多线程编译(多核主机,加速编译)
# -j$(nproc) 自动调用主机所有核心数编译 make V=s -j$(nproc)- 编译过程中若出现报错,优先查看日志提示,常见问题可参考文末「避坑指南」;
- 编译完成后,终端会提示「build completed successfully」。
4.3 编译产物位置
固件编译完成后,存储在源码目录的bin文件夹下,路径如下:
openwrt/bin/targets/rockchip/armv8/ ├── openwrt-rockchip-armv8-generic-squashfs-sysupgrade.img.gz # 升级固件(用于已烧录系统的网关更新) └── openwrt-rockchip-armv8-generic-squashfs-factory.img.gz # 出厂固件(首次烧录使用,需解压)- 重点关注
factory.img.gz文件,首次烧录必须使用该文件; - 解压固件:
gunzip openwrt-rockchip-armv8-generic-squashfs-factory.img.gz。
五、固件烧录与 RK3506 开机验证
5.1 烧录固件至 RK3506
步骤 1:进入 Loader 模式
- 断开 RK3506 开发板电源;
- 长按RECOVERY键,同时连接电源适配器,保持 3~5 秒后松开 RECOVERY 键;
- 连接 USB 线至编译主机(Windows/Linux),此时开发板将被识别为「Rockchip Loader Device」。
步骤 2:烧录固件
Windows 系统(使用 AndroidTool)
- 下载安装瑞芯微 AndroidTool 工具,打开后选择「烧录固件」;
- 加载解压后的
factory.img固件文件; - 点击「开始烧录」,等待进度条完成,提示「烧录成功」后重启开发板。
Linux 系统(使用 rkflash.sh)
- 下载 rkflash.sh 工具,赋予执行权限:
chmod +x rkflash.sh; - 执行烧录命令:
./rkflash.sh openwrt-rockchip-armv8-generic-squashfs-factory.img - 等待烧录完成,重启开发板。
5.2 开机初始化与 Web 后台登录
步骤 1:连接串口调试
- 连接 USB 转串口模块至 RK3506 底板 UART 接口(TX、RX、GND);
- 打开串口调试工具,设置波特率115200,数据位 8,停止位 1,无校验;
- 重启开发板,观察串口日志,若出现「login:」提示,说明系统启动成功。
步骤 2:登录 Web 管理后台
- 连接 RK3506 开发板与路由器(或电脑),通过路由器后台查看开发板 IP(默认通过 DHCP 获取);
- 打开浏览器,访问
http://开发板IP(默认 IP 为 192.168.1.1); - 登录账号:
root,初始密码为空,首次登录需设置新密码。
5.3 验证 LoRa 驱动与核心服务
- SSH 登录开发板:
ssh root@开发板IP,输入设置的密码; - 检查 SPI 接口与 LoRa 驱动:
# 查看 SPI 设备节点(正常会显示 spidev0.0 等) ls /dev | grep spi # 查看 LoRa 射频模块驱动(正常会显示 sx1302 或 sx1301 驱动) lsmod | grep sx130 - 启动 LoRa Packet Forwarder 服务:
# 设置开机自启 /etc/init.d/lora-packet-forwarder enable # 启动服务 /etc/init.d/lora-packet-forwarder start # 查看服务状态(显示 running 则启动成功) /etc/init.d/lora-packet-forwarder status
六、核心功能配置:LoRaWAN 网关基础设置
6.1 配置 LoRa 射频参数
LoRa Packet Forwarder 核心配置文件为global_conf.json,路径如下:
/etc/lora-packet-forwarder/global_conf.json关键配置项(以 CN470 频段为例,国内 LoRaWAN 常用频段):
json
{ "gateway_ID": "你的网关EUI(16进制8字节,可从开发板串口日志获取)", "server_address": "NS服务器IP(ChirpStack/TTN/阿里云等)", "serv_port_up": 1700, // 上行端口(Semtech UDP 协议默认) "serv_port_down": 1700, // 下行端口 "freq_plan": "CN470", // 频段配置 "tx_power": 27, // 发射功率(工业网关常用27dBm) "channels": [0,1,2,3,4,5,6,7] // 信道配置(CN470 频段 0-7 信道) }配置完成后重启服务:/etc/init.d/lora-packet-forwarder restart。
6.2 配置网络参数(WAN/LAN)
通过 OpenWrt 后台或命令配置网络,确保网关可访问 NS 服务器:
- 后台路径:LuCI → 网络 → 接口;
- WAN 口:设置为 DHCP 或静态 IP(连接外网路由器);
- LAN 口:设置为私有网段(如 192.168.10.1),用于本地设备调试;
- 配置完成后,测试网络连通性:
ping NS服务器IP。
七、常见问题与避坑指南
7.1 编译失败问题
- 报错「missing xxx.h」:
- 原因:依赖包未下载完全;
- 解决:重复执行
make download -j8 V=s下载缺失依赖。
- 多线程编译报错:
- 原因:主机核心数不足,编译冲突;
- 解决:改用单线程编译
make V=s -j1。
- RK3506 适配失败,内核启动报错:
- 原因:DTS 文件与内核版本不匹配;
- 解决:更换与 OpenWrt 23.05.4 兼容的 RK3506 DTS 补丁,重新编译。
7.2 烧录后无法开机
- 原因:固件解压错误、Loader 模式未进入成功;
- 解决:重新解压固件(确保
.img文件完整),再次进入 RECOVERY 模式烧录。
7.3 LoRa 驱动不加载
- 原因:SPI 接口未启用、DTS 引脚配置冲突;
- 解决:重新执行
make kernel_menuconfig开启 SPI,修正 DTS 引脚配置,重新编译。
7.4 Web 后台无法访问
- 原因:LuCI 未编译、网络配置错误;
- 解决:重新执行
make menuconfig勾选 LuCI 模块,检查开发板 IP 与网络连通性。
八、总结与拓展
8.1 本文成果
本文完成了OpenWrt + RK3506环境的完整搭建,实现了以下核心目标:
- 搭建了稳定的 OpenWrt 编译环境,适配 RK3506 芯片架构;
- 编译了包含 LoRa 驱动、Packet Forwarder、LuCI 后台的网关固件;
- 完成了固件烧录、开机验证与核心功能配置,可正常运行 LoRaWAN 网关。
8.2 下一步拓展方向
- 深度定制 Web 后台:开发 LoRa 网关专用管理页面(如射频参数配置、日志查看、NS 管理),参考前文「LoRaWAN 网关 Web 管理页面开发实战」;
- 内置 NS 集成:编译 ChirpStack 微型 NS 至固件,实现本地闭环 LoRaWAN 网络;
- 量产优化:添加 OTA 远程升级、看门狗(防死机)、功耗优化(工业网关低功耗);
- 协议适配:集成私有 LoRa 协议(如轻量化蓝牙 Mesh 协议),适配定制化终端场景。
本文所有步骤均为实战落地流程,可直接复制命令执行,适合嵌入式开发者快速上手 RK3506 网关开发。若需进一步拓展 LoRa 协议开发、Web 后台定制或固件优化,可基于本文环境继续深入开发。