RK3588 4G拨号与SIM卡调试指南
2026/7/11 6:16:30 网站建设 项目流程

RK3588 4G 拨号与 SIM 卡调试指南

本文档记录 RK3588 板子通过 4G 模组(SIM7600CE)上网的完整流程,以及 SIM 卡状态查询、常见问题排查。

适用环境: RK3588 板子(industio),Ubuntu 系统,4G 模组 SIM7600CE。

主方案:USB 网卡方式(QMI/NDIS),基于芯讯通官方 NDIS 驱动调试文档。该方案已实测通过,开机自动拨号 + WireGuard 远程访问全链路稳定。


方案选择说明

SIM7600 上网有两种方式,本指南以USB 网卡方式(wwan0)为主

方式接口说明本指南
USB 网卡方式(推荐)wwan0数据走 USB 网卡接口(Interface 5),协议协商在模组固件内完成,稳定、低 CPU、满速✅ 主方案
PPP 拨号方式ppp0数据走串口(ttyUSB2)+ PPP 协议,依赖 wvdial/pppd,易掉线、易触发风控已弃用,见附录

为什么选 wwan0:PPP 方式在用户态处理 LCP/CHAP/IPCP 协商,每一步都可能失败(exit code 16),且失败重连密集发请求易触发运营商风控封卡。wwan0 方式协议协商全在模组固件完成,板子只管收发 IP 包,断线由模组自动维护,不会疯狂重连。


一、模组与 SIM 卡的关系(必读)

理解三者分层,排查问题时能精准定位是哪一层故障:

┌──────────────────────────────────────────────┐ │ 互联网 │ └──────────────────────▲───────────────────────┘ │ 4G 无线信号 ┌────────┴────────┐ │ 运营商基站 │ ← 网络层 └────────▲────────┘ │ ╔══════════════╧══════════════╗ ║ SIM7600CE 模组 ║ ← 通信层 ║ - 基带处理器(协议栈) ║ 职责:无线调制解调、 ║ - 射频芯片 + 天线 ║ AT 指令响应、 ║ - SIM 卡槽 ║ 协议协商 ║ - USB 接口(5 串口+网卡) ║ ╚══════════════╤══════════════╝ │ USB 总线 ┌───────────────┴───────────────┐ │ RK3588 板子(Ubuntu) │ ← 主机层 │ - 通过 USB 控制模组 │ 职责:发 AT 指令、 │ - udhcpc 拿 IP │ 维护 wwan0 接口、 │ - WireGuard 隧道 │ 跑业务程序 └───────────────────────────────┘
层级硬件职责故障现象
身份层SIM 卡存 IMSI/鉴权密钥,证明有权用运营商网络+CGREG: 0,3注册被拒;手机显示"只能紧急呼叫"
通信层SIM7600CE 模组无线收发、协议栈、AT 指令AT无响应;+CSQ: 99,99无信号
主机层RK3588发 AT、维护接口、跑业务wwan0 不存在;udhcpc 拿不到 IP

关键认知:SIM 卡是身份证,模组是手机,板子是大脑。三者缺一不可:板子发指令 → 模组读 SIM 卡身份去注册 → 运营商核对 SIM 卡 → 放行上网。


二、确认 4G 模组串口与接口

SIM7600 通过 USB 枚举出多个设备。根据官方文档,接口分配为(VID 0x1E0E / PID 0x9001):

Interface设备用途
0ttyUSB0诊断口
1ttyUSB1GPS NMEA
2ttyUSB2AT 指令口(拨号用)
3ttyUSB3Modem 口
4ttyUSB4音频口
5wwan0 + cdc-wdm0USB 网卡接口(数据通道)

2.1 查看已识别的串口

ls/dev/ttyUSB*

输出示例:/dev/ttyUSB0 ... /dev/ttyUSB4

2.2 查看内核识别日志

dmesg|grepttyUSB

2.3 确认 wwan0 和 cdc-wdm0(关键)

wwan0 方式依赖这两个设备:

ls/dev/cdc-wdm0iplinkshow wwan0

必须都存在。wwan0是 USB 网卡,cdc-wdm0是 QMI 控制口。
若驱动未识别 Interface 5,需参考官方文档修改内核 option.c / qmi_wwan.c(本环境厂商内核已处理,无需改动)。


三、测试串口与 AT 指令

minicom测试 AT 通信(后续脚本用 socat 自动化,但调试时 minicom 最直观)。

3.1 连接串口

sudominicom-D/dev/ttyUSB2-b115200

3.2 测试 AT

输入AT回车,应返回OK。无响应则串口不对,试ttyUSB1/ttyUSB3

3.3 常用 AT 指令速查

指令作用正常返回
AT测试串口OK
AT+CPIN?SIM 卡状态+CPIN: READY
AT+CSQ信号质量+CSQ: 25,99(rssi>15 为好;99,99 为无信号)
AT+COPS?当前运营商+COPS: 0,0,"CMCC",7(7=4G)
AT+CGREG?GPRS 注册状态+CGREG: 0,1(1/5=已注册,3=被拒,0=未注册)
AT+CEREG?EPS(4G) 注册状态+CEREG: 0,1
AT+CIMIIMSI(查运营商)46004...(46004=移动,46001=联通,46011=电信)
AT$QCRMCALL=1,1拨号上网$QCRMCALL: 1, V4+OK
AT$QCRMCALL=0,1挂断OK
AT+CFUN=1,1重启模组走完PB DONE

3.4 退出 minicom

Ctrl+AX→ 回车


四、USB 网卡方式(wwan0)手动拨号

理解原理后再做自动化。手动流程如下(基于官方 NDIS 文档):

4.1 安装工具

sudoaptinstallsocat udhcpc-y

socat用于脚本里可靠发 AT 指令(chat 不可靠,见附录说明)。

4.2 手动拨号四步

# 1. 关闭 wwan0,设 raw_ip(raw_ip 必须在 down 状态设)sudoiplinksetwwan0 downsleep1echo"Y"|sudotee/sys/class/net/wwan0/qmi/raw_ipcat/sys/class/net/wwan0/qmi/raw_ip# 确认是 Y# 2. 用 minicom 拨号(最可靠)sudominicom-D/dev/ttyUSB2-b115200# 进入后输入:AT$QCRMCALL=1,1# 看到 "$QCRMCALL: 1, V4" 后退出(Ctrl+A → X)# 3. 拉起 wwan0 接口sudoiplinksetwwan0 upsleep2# 4. 获取 IPsudoudhcpc-iwwan0-q-t8ipaddr show wwan0|grepinet

4.3 验证联网

ping-Iwwan0-c3223.5.5.5

拿到 IP 且能 ping 通,说明 4G 正常。

4.4 关键说明

  • raw_ip 模式:SIM7600 要求 wwan0 设为 raw_ip,且必须在接口 down 时设置(UP 状态会报Device or resource busy)。
  • AT$QCRMCALL:官方文档第 4.3 节标准拨号指令,激活 RmNet 数据连接,模组内部完成 CHAP/IPCP 协商。
  • udhcpc:嵌入式 Linux 用 udhcpc 从模组获取 IP(PC Linux 用 ifconfig down/up 让 NetworkManager 自动 DHCP)。

五、开机自动拨号(systemd 服务)

将手动流程固化为开机自启服务。核心难点:脚本里如何可靠地自动发 AT 指令——经实测chat不可靠,改用socat

5.1 关于发 AT 的工具选择

工具可靠性说明
minicom✅ 可靠交互式,不能用于脚本
socat✅ 可靠一条命令发+收,无引号转义问题,本方案采用
chat❌ 不可靠引号、$转义、终端回显干扰,多次验证失败
printf+stty⚠️stty 常报unable to perform all requested operations

验证 socat 可用:

echo-e"AT\r"|sudosocat - /dev/ttyUSB2,b115200,raw,echo=0,cr2>&1# 应返回 AT / OK

5.2 创建拨号脚本

sudonano/usr/local/bin/qmi-connect.sh

写入:

#!/bin/bashexportPATH=/usr/sbin:/usr/bin:/bin:$PATH# SIM7600 QMI/NDIS 4G 自动拨号脚本# 方式:raw_ip + AT$QCRMCALL=1,1 + udhcpc(基于官方 NDIS 文档)# 用 socat 发 AT,避免 chat 的引号/转义/回显问题PORT=/dev/ttyUSB2IFACE=wwan0LOG=/var/log/qmi-4g.log# 同时输出到日志和控制台log(){echo"$(date'+%F %T')$1"|tee-a$LOG;}send_at(){echo-e"$1\r"|socat -$PORT,b115200,raw,echo=0,cr2>/dev/null}log"===== 启动 QMI 连接 ====="# 1. 等待 AT 口就绪foriin$(seq130);do[-c"$PORT"]&&breaksleep1done[!-c"$PORT"]&&{log"[失败] AT 口不存在,4G 无法启动";exit1;}chmod666$PORT2>/dev/null# 2. 等待模组上电与注册(开机后约需 30 秒)log"[进行中] 等待模组上电与注册(30秒)..."sleep30# 3. 关闭 wwan0,设 raw_ip(必须在 down 状态设)iplinkset$IFACEdown2>/dev/nullsleep2echo"Y">/sys/class/net/$IFACE/qmi/raw_ip2>/dev/null log"[进行中] raw_ip 模式:$(cat/sys/class/net/$IFACE/qmi/raw_ip2>/dev/null)"# 4. 挂断可能残留的连接send_at'AT$QCRMCALL=0,1'>/dev/nullsleep2# 5. 拨号(AT$QCRMCALL=1,1,官方方式),延时 2 秒后继续log"[进行中] 执行 AT\$QCRMCALL=1,1 拨号..."send_at'AT$QCRMCALL=1,1'>/dev/nullsleep2# 6. 拉起 wwan0 接口iplinkset$IFACEupsleep2# 7. 获取 IPlog"[进行中] udhcpc 获取 IP..."udhcpc-i$IFACE-q-t8-n2>&1|tail-2>>$LOG# 8. 验证 4G 是否拿到 IPifipaddr show$IFACE2>/dev/null|grep-q"inet ";thenIP=$(ipaddr show $IFACE|grep-o'inet [0-9.]*'|awk'{print $2}')log"[成功] 4G 网络已就绪,IP:$IP"iprouteadddefault dev$IFACEmetric1002>/dev/nullelselog"[失败] 4G 未获取到 IP"exit1fi# 9. 检测 4G 联网log"[检测中] 测试 4G 联网(ping 223.5.5.5)..."ifping-I$IFACE-c2-W3223.5.5.5>/dev/null2>&1;thenlog"[成功] 4G 联网正常"elselog"[警告] 4G 联网测试失败,但已获取 IP"fi# 10. 检测 WireGuard(SSH 远程访问依赖它)log"[检测中] 等待 WireGuard 隧道建立..."WG_OK=0foriin$(seq112);doifiplinkshow wg02>/dev/null|grep-q"UP";thenifwg show2>/dev/null|grep-q"latest handshake";thenlog"[成功] WireGuard 隧道已建立,SSH 可远程连接"log"========================================"log" 4G 已就绪,SSH 远程访问已就绪"log" 远程访问: ssh 用户名@10.88.0.4"log"========================================"WG_OK=1breakfifisleep5done["$WG_OK"-eq0]&&log"[警告] WireGuard 未就绪,SSH 可能暂时无法远程连接"exit0

5.3 创建断开脚本

sudonano/usr/local/bin/qmi-disconnect.sh
#!/bin/bashexportPATH=/usr/sbin:/usr/bin:/bin:$PATHPORT=/dev/ttyUSB2IFACE=wwan0echo-e"AT\$QCRMCALL=0,1\r"|socat -$PORT,b115200,raw,echo=0,cr2>/dev/nulliplinkset$IFACEdown2>/dev/nullecho"$(date'+%F %T'): QMI 已断开">>/var/log/qmi-4g.logexit0

5.4 赋予权限 + 修换行符

sudochmod+x /usr/local/bin/qmi-connect.sh /usr/local/bin/qmi-disconnect.shsudosed-i's/\r$//'/usr/local/bin/qmi-connect.sh /usr/local/bin/qmi-disconnect.sh

修换行符很关键:从 Windows 端编辑的脚本带 CRLF,Linux 解析时报203/EXEC,systemd 无法执行。

5.5 创建 systemd 服务

sudotee/etc/systemd/system/qmi-4g.service>/dev/null<<'EOF' [Unit] Description=SIM7600 QMI/NDIS 4G Connection After=network-online.target Wants=network-online.target [Service] Type=oneshot RemainAfterExit=yes ExecStartPre=/bin/sh -c "sleep 15" ExecStart=/usr/local/bin/qmi-connect.sh ExecStop=/usr/local/bin/qmi-disconnect.sh Restart=on-failure RestartSec=30 [Install] WantedBy=multi-user.target EOF

5.6 启用并测试

sudosystemctl daemon-reloadsudosystemctlenableqmi-4gsudosystemctl start qmi-4g# 实时看进度tail-f/var/log/qmi-4g.log

5.7 重启验证开机自启

sudoreboot

重启后等约 2 分钟(开机 + sleep 15 + 等模组 30 秒 + 拨号 + WireGuard 握手),验证:

systemctl status qmi-4g --no-pager|grepActiveipaddr show wwan0|grepinetping-Iwwan0-c3223.5.5.5cat/var/log/qmi-4g.log|tail-15sudowg show|grep-E"latest|endpoint"

5.8 启动进度提示说明

脚本会逐步打印状态(同时进日志 + 控制台),便于判断 4G 何时 OK、SSH 何时可连:

[时间] ===== 启动 QMI 连接 ===== [时间] [进行中] 等待模组上电与注册(30秒)... [时间] [进行中] raw_ip 模式: Y [时间] [进行中] 执行 AT$QCRMCALL=1,1 拨号... [时间] [进行中] udhcpc 获取 IP... [时间] [成功] 4G 网络已就绪,IP: 10.x.x.x ← 4G OK 的时刻 [时间] [检测中] 测试 4G 联网(ping 223.5.5.5)... [时间] [成功] 4G 联网正常 [时间] [检测中] 等待 WireGuard 隧道建立... [时间] [成功] WireGuard 隧道已建立,SSH 可远程连接 ← SSH 可连的时刻 [时间] ======================================== [时间] 4G 已就绪,SSH 远程访问已就绪 [时间] 远程访问: ssh 用户名@10.88.0.4 [时间] ========================================

查看提示:

  • cat /var/log/qmi-4g.log—— 随时查
  • tail -f /var/log/qmi-4g.log—— 实时看
  • journalctl -u qmi-4g—— systemd 日志

关于 SSH 何时可连:板子侧能准确知道 4G 何时通(拿到 IP)。SSH 能否连还取决于 WireGuard 握手成功——脚本用wg show | grep "latest handshake"检测,握手成功即代表隧道建立,SSH 可远程连接(前提是 Windows 端 WireGuard 也已激活)。


六、查询 SIM 卡 / 模组状态

mmcli(ModemManager)或 AT 指令查询。注意:wwan0 方式不依赖 ModemManager,但 mmcli 仍可用来查状态。

6.1 mmcli 查询

mmcli-m0

关键字段:

字段含义正常值
state连接状态connected
access tech接入技术lte(4G)
signal quality信号强度>30%
registration网络注册home(归属)或roaming(漫游)
packet service state数据业务attached
operator name运营商CMCC/中国联通/中国电信
ports端口分配ttyUSB2 (at)确认 AT 口

6.2 AT 指令查询(推荐,wwan0 方式下更直接)

# 用 socat 发 AT(脚本化)echo-e"AT+CGREG?\r"|sudosocat - /dev/ttyUSB2,b115200,raw,echo=0,cr

或用 minicom 交互式查询(见第三章)。


七、常见问题排查

7.1 排障流程图

4G 拨号失败 / 拿不到 IP │ ▼ AT 指令有响应吗?(echo "AT\r" | socat ...) ├── 无响应 ──► 串口被占用 / 模组挂了 │ → pkill 占用进程、rm lock 文件、AT+CFUN=1,1 重启模组 └── 有响应 ──► 继续往下 │ ▼ AT+CGREG? 返回什么? ├── 0,3(注册被拒)──► SIM 卡被运营商停机! │ → 插手机验证("只能紧急呼叫"=卡被停) │ → 联系供应商查卡状态/解封 ├── 0,0 / 0,4 ──► 未注册,等久一点或查信号/频段 └── 0,1 / 0,5 ──► 已注册,继续往下 │ ▼ AT$QCRMCALL=1,1 返回什么?(用 minicom 看) ├── $QCRMCALL: 1, V4 ──► 拨号成功,问题在拿 IP(raw_ip/udhcpc) ├── ERROR ──► 挂断残留 AT$QCRMCALL=0,1 后重试,或 AT+CFUN=1,1 复位 └── 无响应 ──► chat 不可靠,改用 socat │ ▼ udhcpc 拿到 IP 了吗? ├── no lease ──► raw_ip 没设成功?接口没 up?模组没真拨通? └── 拿到 IP ──► 成功

7.2 常见问题对照表

现象原因解决方法
udhcpc: no lease, failingchat 发 AT 没真正拨通模组换 socat 发 AT(见 5.1)
stty: unable to perform all requested operations串口被占用pkill占用进程、rmlock 文件
systemd: 203/EXEC脚本无执行权限或 CRLF 换行符chmod +x+sed -i 's/\r$//'
Cannot change a running deviceraw_ip 在接口 UP 状态设置ip link set wwan0 down再设
+CGREG: 0,3注册被拒SIM 卡被运营商停机插手机验证,联系供应商解封
手机显示"只能紧急呼叫"SIM 卡停机/欠费/未实名联系供应商查卡状态
+CSQ: 99,99无信号天线/射频问题检查天线接触、是否接 MAIN 口
AT+COPS=?返回空搜不到运营商天线、频段、或 SIM 卡注册被拒
exit code = 16(PPP 方式)CHAP 成功后模组挂断改用 wwan0 方式(见附录)
重启后 4G 不通脚本启动太早 / chat 不可靠加大 sleep、换 socat
sudo: unable to resolve host/etc/hosts 缺主机名映射echo "127.0.0.1 主机名" >> /etc/hosts

7.3 常用排查命令

# 串口是否被占用sudofuser/dev/ttyUSB2sudolsof/dev/ttyUSB2# 清理串口占用sudopkill-9minicom udhcpc chat socat2>/dev/nullsudorm-f/var/lock/LCK..ttyUSB2 /run/lock/LCK..ttyUSB2# 查 4G 服务状态和日志systemctl status qmi-4g --no-pagercat/var/log/qmi-4g.log journalctl-uqmi-4g --no-pager|tail-30# 查模组状态(AT 指令,用 socat)echo-e"AT+CGREG?\r"|sudosocat - /dev/ttyUSB2,b115200,raw,echo=0,crecho-e"AT\$QCRMCALL?\r"|sudosocat - /dev/ttyUSB2,b115200,raw,echo=0,cr# 查 wwan0 接口和路由ipaddr show wwan0cat/sys/class/net/wwan0/qmi/raw_ipiproute

7.4 应急手动恢复 4G

自启失败时,手动恢复:

# 1. 停服务,清理串口sudosystemctl stop qmi-4gsudopkill-9socat chat udhcpc2>/dev/nullsudorm-f/var/lock/LCK..ttyUSB22>/dev/null# 2. 用 minicom 手动拨号(最可靠)sudominicom-D/dev/ttyUSB2-b115200# 输入 AT$QCRMCALL=1,1,看到 $QCRMCALL: 1, V4 后退出(Ctrl+A → X)# 3. 拿 IPsudoiplinksetwwan0 downsleep1echo"Y"|sudotee/sys/class/net/wwan0/qmi/raw_ipsudoiplinksetwwan0 upsudoudhcpc-iwwan0-q-t8ping-Iwwan0-c3223.5.5.5

八、避免 SIM 卡被运营商封禁

板子频繁重启 + PPP 方式密集重连,易触发运营商风控封卡。wwan0 方式已大幅降低此风险(模组自动维护连接,不疯狂重连),但仍需注意:

  1. 拨号前确认 SIM 已注册AT+CGREG?返回0,1)—— 没注册就拨号浪费请求
  2. 失败退避重试—— 脚本RestartSec=30,不密集重连
  3. 调试时用网线就关 4G——systemctl stop qmi-4g减少不必要拨号
  4. 物联卡注意:APN 可能是cmiot而非cmnet;异常使用(频繁断连)会被运营商临时封停
  5. 卡被封的症状+CGREG: 0,3+ 手机显示"只能紧急呼叫" → 联系供应商解封

附录 A:PPP 拨号方式(已弃用,仅供参考)

本方案已改用 wwan0。PPP 方式仅作历史记录和应急备用。

PPP 方式用 wvdial + pppd 通过串口走 PPP 协议拨号,生成 ppp0 接口。

配置文件/etc/wvdial.conf

[Dialer Defaults] Modem = /dev/ttyUSB2 Baud = 115200 Init1 = ATZ Init2 = AT+CGDCONT=1,"IP","cmnet" Phone = *99# Username = cmnet Password = cmnet Stupid Mode = 1 Dial Command = ATDT

运营商 APN:移动cmnet、联通3gnet、电信ctnet、物联卡可能为cmiot

为什么弃用 PPP

  • exit code 16:CHAP 认证成功后模组立即挂断,难以根治
  • 易触发风控:失败后 wvdial 自动 5 秒重连,密集请求导致 SIM 卡被封
  • CPU 占用高:PPP 协议在用户态处理
  • 速度受限:串口带宽限制

PPP 方式被弃用的转折

实测中,SIM 卡因 PPP 反复重连被封禁(+CGREG: 0,3),解封后改用 wwan0 方式,未再出现封卡问题。


附录 B:发 AT 指令的工具对比

脚本里自动发 AT 是关键,工具选择直接决定可靠性:

工具可靠性用法问题
minicom✅ 最可靠交互式不能用于脚本自动化
socat✅ 可靠echo -e "AT\r" | socat - /dev/ttyUSB2,b115200,raw,echo=0,cr本方案采用
chat❌ 不可靠chat -t 3 -s "" "AT" "OK" /dev/ttyUSB2引号、$转义、终端回显干扰
printf+stty⚠️stty配串口后printf > /dev/ttyUSB2stty 常报unable to perform all requested operations

socat 优势:一条命令完成发送+接收,raw 模式直接读写二进制,无引号转义问题。cr选项处理换行符,echo=0关闭回显避免干扰。

socat 发 AT 示例

# 发 AT 测试echo-e"AT\r"|socat - /dev/ttyUSB2,b115200,raw,echo=0,cr# 发拨号指令($ 需转义)echo-e"AT\$QCRMCALL=1,1\r"|socat - /dev/ttyUSB2,b115200,raw,echo=0,cr# 封装成函数send_at(){echo-e"$1\r"|socat - /dev/ttyUSB2,b115200,raw,echo=0,cr2>/dev/null}send_at'AT+CGREG?'

附录 C:关键参数记录

参数
模组型号SIM7600CE(VID 0x1E0E / PID 0x9001)
固件版本LE11B08SIM7600M21
AT 串口/dev/ttyUSB2(Interface 2)
数据接口wwan0(Interface 5)
QMI 控制口/dev/cdc-wdm0
波特率115200
拨号指令AT$QCRMCALL=1,1
挂断指令AT$QCRMCALL=0,1
raw_ip 设置echo Y > /sys/class/net/wwan0/qmi/raw_ip(须接口 down 时设)
运营商中国移动(IMSI 46004)
WireGuard 隧道 IP10.88.0.4
远程访问ssh 用户名@10.88.0.4

附录 D:相关文档

  • WireGuard搭建指南.md — WireGuard 隧道完整搭建流程(4G 作为板子出口通道,隧道建立其上)
  • 《SIM7500_SIM7600系列_Linux NDIS驱动调试文档_V2.00.pdf》 — 芯讯通官方 NDIS 驱动调试文档,本方案的理论依据

4G + WireGuard 联动关系

板子上电 → qmi-4g 服务自动拨号 → wwan0 拿到运营商 IP → WireGuard 主动连阿里云公网 8.156.73.219:51820 → Windows 通过隧道 ssh 用户名@10.88.0.4 访问板子

4G 是板子的出口通道,WireGuard 隧道建立其上。4G 拨号成功是 WireGuard 正常工作的前提。qmi-connect.sh 脚本末尾会检测 WireGuard 握手状态,握手成功即提示"SSH 可远程连接"。


文档说明:本指南基于真实环境( RK3588 + SIM7600CE + 移动物联卡 + 阿里云 ECS)踩坑验证整理。核心经验:wwan0 方式优于 PPP;socat 优于 chat 发 AT;SIM 卡被拒(CGREG=0,3)需联系运营商而非折腾设备。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询