
RK3588 4G 拨号与 SIM 卡调试指南本文档记录 RK3588 板子通过 4G 模组SIM7600CE上网的完整流程以及 SIM 卡状态查询、常见问题排查。适用环境 RK3588 板子industioUbuntu 系统4G 模组 SIM7600CE。主方案USB 网卡方式QMI/NDIS基于芯讯通官方 NDIS 驱动调试文档。该方案已实测通过开机自动拨号 WireGuard 远程访问全链路稳定。方案选择说明SIM7600 上网有两种方式本指南以USB 网卡方式wwan0为主方式接口说明本指南USB 网卡方式推荐wwan0数据走 USB 网卡接口Interface 5协议协商在模组固件内完成稳定、低 CPU、满速✅ 主方案PPP 拨号方式ppp0数据走串口ttyUSB2 PPP 协议依赖 wvdial/pppd易掉线、易触发风控已弃用见附录为什么选 wwan0PPP 方式在用户态处理 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 0x9001Interface设备用途0ttyUSB0诊断口1ttyUSB1GPS NMEA2ttyUSB2AT 指令口拨号用3ttyUSB3Modem 口4ttyUSB4音频口5wwan0 cdc-wdm0USB 网卡接口数据通道2.1 查看已识别的串口ls/dev/ttyUSB*输出示例/dev/ttyUSB0 ... /dev/ttyUSB42.2 查看内核识别日志dmesg|grepttyUSB2.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-b1152003.2 测试 AT输入AT回车应返回OK。无响应则串口不对试ttyUSB1/ttyUSB3。3.3 常用 AT 指令速查指令作用正常返回AT测试串口OKATCPIN?SIM 卡状态CPIN: READYATCSQ信号质量CSQ: 25,99rssi15 为好99,99 为无信号ATCOPS?当前运营商COPS: 0,0,CMCC,774GATCGREG?GPRS 注册状态CGREG: 0,11/5已注册3被拒0未注册ATCEREG?EPS(4G) 注册状态CEREG: 0,1ATCIMIIMSI查运营商46004...46004移动46001联通46011电信AT$QCRMCALL1,1拨号上网$QCRMCALL: 1, V4OKAT$QCRMCALL0,1挂断OKATCFUN1,1重启模组走完PB DONE3.4 退出 minicomCtrlA→X→ 回车四、USB 网卡方式wwan0手动拨号理解原理后再做自动化。手动流程如下基于官方 NDIS 文档4.1 安装工具sudoaptinstallsocat udhcpc-ysocat用于脚本里可靠发 AT 指令chat 不可靠见附录说明。4.2 手动拨号四步# 1. 关闭 wwan0设 raw_ipraw_ip 必须在 down 状态设sudoiplinksetwwan0 downsleep1echoY|sudotee/sys/class/net/wwan0/qmi/raw_ipcat/sys/class/net/wwan0/qmi/raw_ip# 确认是 Y# 2. 用 minicom 拨号最可靠sudominicom-D/dev/ttyUSB2-b115200# 进入后输入AT$QCRMCALL1,1# 看到 $QCRMCALL: 1, V4 后退出CtrlA → X# 3. 拉起 wwan0 接口sudoiplinksetwwan0 upsleep2# 4. 获取 IPsudoudhcpc-iwwan0-q-t8ipaddr show wwan0|grepinet4.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 从模组获取 IPPC Linux 用 ifconfig down/up 让 NetworkManager 自动 DHCP。五、开机自动拨号systemd 服务将手动流程固化为开机自启服务。核心难点脚本里如何可靠地自动发 AT 指令——经实测chat不可靠改用socat。5.1 关于发 AT 的工具选择工具可靠性说明minicom✅ 可靠交互式不能用于脚本socat✅ 可靠一条命令发收无引号转义问题本方案采用chat❌ 不可靠引号、$转义、终端回显干扰多次验证失败printfstty⚠️stty 常报unable to perform all requested operations验证 socat 可用echo-eAT\r|sudosocat - /dev/ttyUSB2,b115200,raw,echo0,cr21# 应返回 AT / OK5.2 创建拨号脚本sudonano/usr/local/bin/qmi-connect.sh写入#!/bin/bashexportPATH/usr/sbin:/usr/bin:/bin:$PATH# SIM7600 QMI/NDIS 4G 自动拨号脚本# 方式raw_ip AT$QCRMCALL1,1 udhcpc基于官方 NDIS 文档# 用 socat 发 AT避免 chat 的引号/转义/回显问题PORT/dev/ttyUSB2IFACEwwan0LOG/var/log/qmi-4g.log# 同时输出到日志和控制台log(){echo$(date%F %T)$1|tee-a$LOG;}send_at(){echo-e$1\r|socat -$PORT,b115200,raw,echo0,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/nullsleep2echoY/sys/class/net/$IFACE/qmi/raw_ip2/dev/null log[进行中] raw_ip 模式:$(cat/sys/class/net/$IFACE/qmi/raw_ip2/dev/null)# 4. 挂断可能残留的连接send_atAT$QCRMCALL0,1/dev/nullsleep2# 5. 拨号AT$QCRMCALL1,1官方方式延时 2 秒后继续log[进行中] 执行 AT\$QCRMCALL1,1 拨号...send_atAT$QCRMCALL1,1/dev/nullsleep2# 6. 拉起 wwan0 接口iplinkset$IFACEupsleep2# 7. 获取 IPlog[进行中] udhcpc 获取 IP...udhcpc-i$IFACE-q-t8-n21|tail-2$LOG# 8. 验证 4G 是否拿到 IPifipaddr show$IFACE2/dev/null|grep-qinet ;thenIP$(ipaddr show $IFACE|grep-oinet [0-9.]*|awk{print $2})log[成功] 4G 网络已就绪IP:$IPiprouteadddefault dev$IFACEmetric1002/dev/nullelselog[失败] 4G 未获取到 IPexit1fi# 9. 检测 4G 联网log[检测中] 测试 4G 联网ping 223.5.5.5...ifping-I$IFACE-c2-W3223.5.5.5/dev/null21;thenlog[成功] 4G 联网正常elselog[警告] 4G 联网测试失败但已获取 IPfi# 10. 检测 WireGuardSSH 远程访问依赖它log[检测中] 等待 WireGuard 隧道建立...WG_OK0foriin$(seq112);doifiplinkshow wg02/dev/null|grep-qUP;thenifwg show2/dev/null|grep-qlatest handshake;thenlog[成功] WireGuard 隧道已建立SSH 可远程连接loglog 4G 已就绪SSH 远程访问已就绪log 远程访问: ssh 用户名10.88.0.4logWG_OK1breakfifisleep5done[$WG_OK-eq0]log[警告] WireGuard 未就绪SSH 可能暂时无法远程连接exit05.3 创建断开脚本sudonano/usr/local/bin/qmi-disconnect.sh#!/bin/bashexportPATH/usr/sbin:/usr/bin:/bin:$PATHPORT/dev/ttyUSB2IFACEwwan0echo-eAT\$QCRMCALL0,1\r|socat -$PORT,b115200,raw,echo0,cr2/dev/nulliplinkset$IFACEdown2/dev/nullecho$(date%F %T): QMI 已断开/var/log/qmi-4g.logexit05.4 赋予权限 修换行符sudochmodx /usr/local/bin/qmi-connect.sh /usr/local/bin/qmi-disconnect.shsudosed-is/\r$///usr/local/bin/qmi-connect.sh /usr/local/bin/qmi-disconnect.sh修换行符很关键从 Windows 端编辑的脚本带 CRLFLinux 解析时报203/EXECsystemd 无法执行。5.5 创建 systemd 服务sudotee/etc/systemd/system/qmi-4g.service/dev/nullEOF [Unit] DescriptionSIM7600 QMI/NDIS 4G Connection Afternetwork-online.target Wantsnetwork-online.target [Service] Typeoneshot RemainAfterExityes ExecStartPre/bin/sh -c sleep 15 ExecStart/usr/local/bin/qmi-connect.sh ExecStop/usr/local/bin/qmi-disconnect.sh Restarton-failure RestartSec30 [Install] WantedBymulti-user.target EOF5.6 启用并测试sudosystemctl daemon-reloadsudosystemctlenableqmi-4gsudosystemctl start qmi-4g# 实时看进度tail-f/var/log/qmi-4g.log5.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-Elatest|endpoint5.8 启动进度提示说明脚本会逐步打印状态同时进日志 控制台便于判断 4G 何时 OK、SSH 何时可连[时间] 启动 QMI 连接 [时间] [进行中] 等待模组上电与注册30秒... [时间] [进行中] raw_ip 模式: Y [时间] [进行中] 执行 AT$QCRMCALL1,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 卡 / 模组状态用mmcliModemManager或 AT 指令查询。注意wwan0 方式不依赖 ModemManager但 mmcli 仍可用来查状态。6.1 mmcli 查询mmcli-m0关键字段字段含义正常值state连接状态connectedaccess tech接入技术lte4Gsignal quality信号强度30%registration网络注册home归属或roaming漫游packet service state数据业务attachedoperator name运营商CMCC/中国联通/中国电信ports端口分配ttyUSB2 (at)确认 AT 口6.2 AT 指令查询推荐wwan0 方式下更直接# 用 socat 发 AT脚本化echo-eATCGREG?\r|sudosocat - /dev/ttyUSB2,b115200,raw,echo0,cr或用 minicom 交互式查询见第三章。七、常见问题排查7.1 排障流程图4G 拨号失败 / 拿不到 IP │ ▼ AT 指令有响应吗echo AT\r | socat ... ├── 无响应 ──► 串口被占用 / 模组挂了 │ → pkill 占用进程、rm lock 文件、ATCFUN1,1 重启模组 └── 有响应 ──► 继续往下 │ ▼ ATCGREG? 返回什么 ├── 0,3注册被拒──► SIM 卡被运营商停机 │ → 插手机验证只能紧急呼叫卡被停 │ → 联系供应商查卡状态/解封 ├── 0,0 / 0,4 ──► 未注册等久一点或查信号/频段 └── 0,1 / 0,5 ──► 已注册继续往下 │ ▼ AT$QCRMCALL1,1 返回什么用 minicom 看 ├── $QCRMCALL: 1, V4 ──► 拨号成功问题在拿 IPraw_ip/udhcpc ├── ERROR ──► 挂断残留 AT$QCRMCALL0,1 后重试或 ATCFUN1,1 复位 └── 无响应 ──► chat 不可靠改用 socat │ ▼ udhcpc 拿到 IP 了吗 ├── no lease ──► raw_ip 没设成功接口没 up模组没真拨通 └── 拿到 IP ──► 成功7.2 常见问题对照表现象原因解决方法udhcpc: no lease, failingchat 发 AT 没真正拨通模组换 socat 发 AT见 5.1stty: unable to perform all requested operations串口被占用pkill占用进程、rmlock 文件systemd: 203/EXEC脚本无执行权限或 CRLF 换行符chmod xsed -i s/\r$//Cannot change a running deviceraw_ip 在接口 UP 状态设置先ip link set wwan0 down再设CGREG: 0,3注册被拒SIM 卡被运营商停机插手机验证联系供应商解封手机显示只能紧急呼叫SIM 卡停机/欠费/未实名联系供应商查卡状态CSQ: 99,99无信号天线/射频问题检查天线接触、是否接 MAIN 口ATCOPS?返回空搜不到运营商天线、频段、或 SIM 卡注册被拒exit code 16PPP 方式CHAP 成功后模组挂断改用 wwan0 方式见附录重启后 4G 不通脚本启动太早 / chat 不可靠加大 sleep、换 socatsudo: unable to resolve host/etc/hosts 缺主机名映射echo 127.0.0.1 主机名 /etc/hosts7.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 指令用 socatecho-eATCGREG?\r|sudosocat - /dev/ttyUSB2,b115200,raw,echo0,crecho-eAT\$QCRMCALL?\r|sudosocat - /dev/ttyUSB2,b115200,raw,echo0,cr# 查 wwan0 接口和路由ipaddr show wwan0cat/sys/class/net/wwan0/qmi/raw_ipiproute7.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$QCRMCALL1,1看到 $QCRMCALL: 1, V4 后退出CtrlA → X# 3. 拿 IPsudoiplinksetwwan0 downsleep1echoY|sudotee/sys/class/net/wwan0/qmi/raw_ipsudoiplinksetwwan0 upsudoudhcpc-iwwan0-q-t8ping-Iwwan0-c3223.5.5.5八、避免 SIM 卡被运营商封禁板子频繁重启 PPP 方式密集重连易触发运营商风控封卡。wwan0 方式已大幅降低此风险模组自动维护连接不疯狂重连但仍需注意拨号前确认 SIM 已注册ATCGREG?返回0,1—— 没注册就拨号浪费请求失败退避重试—— 脚本RestartSec30不密集重连调试时用网线就关 4G——systemctl stop qmi-4g减少不必要拨号物联卡注意APN 可能是cmiot而非cmnet异常使用频繁断连会被运营商临时封停卡被封的症状CGREG: 0,3 手机显示只能紧急呼叫 → 联系供应商解封附录 APPP 拨号方式已弃用仅供参考本方案已改用 wwan0。PPP 方式仅作历史记录和应急备用。PPP 方式用 wvdial pppd 通过串口走 PPP 协议拨号生成 ppp0 接口。配置文件/etc/wvdial.conf[Dialer Defaults] Modem /dev/ttyUSB2 Baud 115200 Init1 ATZ Init2 ATCGDCONT1,IP,cmnet Phone *99# Username cmnet Password cmnet Stupid Mode 1 Dial Command ATDT运营商 APN移动cmnet、联通3gnet、电信ctnet、物联卡可能为cmiot。为什么弃用 PPPexit code 16CHAP 认证成功后模组立即挂断难以根治易触发风控失败后 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,echo0,cr本方案采用chat❌ 不可靠chat -t 3 -s AT OK /dev/ttyUSB2引号、$转义、终端回显干扰printfstty⚠️stty配串口后printf /dev/ttyUSB2stty 常报unable to perform all requested operationssocat 优势一条命令完成发送接收raw 模式直接读写二进制无引号转义问题。cr选项处理换行符echo0关闭回显避免干扰。socat 发 AT 示例# 发 AT 测试echo-eAT\r|socat - /dev/ttyUSB2,b115200,raw,echo0,cr# 发拨号指令$ 需转义echo-eAT\$QCRMCALL1,1\r|socat - /dev/ttyUSB2,b115200,raw,echo0,cr# 封装成函数send_at(){echo-e$1\r|socat - /dev/ttyUSB2,b115200,raw,echo0,cr2/dev/null}send_atATCGREG?附录 C关键参数记录参数值模组型号SIM7600CEVID 0x1E0E / PID 0x9001固件版本LE11B08SIM7600M21AT 串口/dev/ttyUSB2Interface 2数据接口wwan0Interface 5QMI 控制口/dev/cdc-wdm0波特率115200拨号指令AT$QCRMCALL1,1挂断指令AT$QCRMCALL0,1raw_ip 设置echo Y /sys/class/net/wwan0/qmi/raw_ip须接口 down 时设运营商中国移动IMSI 46004WireGuard 隧道 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 方式优于 PPPsocat 优于 chat 发 ATSIM 卡被拒CGREG0,3需联系运营商而非折腾设备。