news 2026/6/13 21:52:47

Jetson Orin Quectel SIMCOM 高通模组 QMI 拨号上网

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Jetson Orin Quectel SIMCOM 高通模组 QMI 拨号上网

huo成功QMI 拨号后,wwan0网卡出现并获取运营商分配的IP

  • 源码获取

也可以用别的机器交叉编译驱动,但是源码一定要对应驱动目标板内核版本

安装编译依赖

sudo apt install -y build-essential bc bison flex libssl-dev libelf-dev dwarves \ kmod wget tar xz-utils zstd libncurses-dev mkdir -p ~/jetson_qmi_driver cd ~/jetson_qmi_driver

下载对应版本的内核源码

jetson@ubuntu:~/jetson_qmi_driver$cat /etc/nv_tegra_release

# R36 (release), REVISION: 5.0, GCID: 43688277, BOARD: generic, EABI: aarch64, DATE: Fri Jan 16 03:50:45 UTC 2026
# KERNEL_VARIANT: oot
TARGET_USERSPACE_LIB_DIR=nvidia
TARGET_USERSPACE_LIB_DIR_PATH=usr/lib/aarch64-linux-gnu/nvidia

jetson@ubuntu:~/jetson_qmi_driver$uname -a
Linux ubuntu 5.15.185-tegra #1 SMP PREEMPT Thu Jan 15 19:24:38 PST 2026 aarch64 aarch64 aarch64 GNU/Linux

wget -c -O public_sources.tbz2 https://developer.nvidia.com/downloads/embedded/l4t/r36_release_v5.0/sources/public_sources.tbz2

或者用 source.sh 脚本一键下载

L4T_MAJOR=$(grep -oP 'R\d+' /etc/nv_tegra_release | head -1 | tr -d 'R') # 36 L4T_MINOR=$(grep -oP 'REVISION:\s*\K[\d.]+' /etc/nv_tegra_release) # 5.0 echo "L4T: R${L4T_MAJOR} v${L4T_MINOR}" URL="https://developer.download.nvidia.com/embedded/L4T/r${L4T_MAJOR}_Release_v${L4T_MINOR}/sources/public_sources.tbz2" echo "Download: $URL" wget -O public_sources.tbz2 "$URL" || { echo "Download failed, trying backup URL..." wget -O public_sources.tbz2 "https://developer.download.nvidia.cn/embedded/L4T/r${L4T_MAJOR}_Release_v${L4T_MINOR}/sources/public_sources.tbz2" }

windows下载也可以
https://developer.download.nvidia.com/embedded/L4T/r36_Release_v5.0/sources/public_sources.tbz2

编译 ko 驱动文件

如果要重置步骤,可以用指令卸载驱动,回到这个位置重新开始配置

# 1. 断开当前连接 sudo qmi-network /dev/cdc-wdm0 stop sudo ip link set wwan0 down # 2. 卸载内核模块(从后往前) sudo rmmod option 2>/dev/null sudo rmmod usb_wwan 2>/dev/null sudo rmmod qmi_wwan 2>/dev/null sudo rmmod cdc_wdm 2>/dev/null sudo rmmod usbnet 2>/dev/null # 3. 清除 QMI 状态文件 sudo rm -f /tmp/qmi-network-state-cdc-wdm0 # 4. 确认干净 lsmod | grep -E "qmi_wwan|cdc_wdm|option" # 应无输出 ls /dev/cdc-wdm0 # 应不存在 # 5. (可选)删除已安装模块 sudo rm -rf /lib/modules/$(uname -r)/extra/qmi/ sudo depmod -a

解压

tar -xvjf public_sources.tbz2

找到 kernel_src.tbz2

find ~/jetson_qmi_driver -name kernel_src.tbz2
cd ~/jetson_qmi_driver/Linux_for_Tegra/source

解压内核源码

tar -xvjf kernel_src.tbz2

进入内核源码目录

cd kernel/kernel-jammy-src

复制当前系统配置

zcat /proc/config.gz > .config

如果提示没有 /proc/config.gz 用这个

cp /boot/config-$(uname -r) .config

打开要编译的驱动为模块 (指令配置比界面方便)

./scripts/config --module USB_USBNET ./scripts/config --module USB_NET_QMI_WWAN ./scripts/config --module USB_WDM ./scripts/config --module USB_NET_CDCETHER ./scripts/config --module USB_NET_CDC_NCM ./scripts/config --module USB_NET_CDC_MBIM ./scripts/config --module USB_NET_RNDIS_HOST ./scripts/config --module USB_SERIAL ./scripts/config --module USB_SERIAL_WWAN ./scripts/config --module USB_SERIAL_OPTION ./scripts/config --module PPP ./scripts/config --module PPP_ASYNC ./scripts/config --module PPP_SYNC_TTY ./scripts/config --module SLHC ./scripts/config --set-str LOCALVERSION "-tegra"

生成配置和编译准备

make olddefconfig make prepare make modules_prepare

编译 USB 网络驱动 (qmi_wwan / cdc_mbim / rndis_host / usbnet 网卡驱动)

make -j$(nproc) M=drivers/net/usb modules

编译 cdc-wdm (QMI 和 MBIM 的控制信令通道)

make -j$(nproc) M=drivers/usb/class modules

编译 USB 串口驱动 (ttyUSB* 驱动)

make -j$(nproc) M=drivers/usb/serial modules

编译 PPP 驱动(可选)

make -j$(nproc) M=drivers/net/ppp modules

建立安装目录

sudo mkdir -p /lib/modules/$(uname -r)/extra/qmi

也可以用makefile编译

cd kernel/kernel-jammy-src zcat /proc/config.gz > .config cp /path/to/Makefile.qmi Makefile make MODE=qmi # QMI 模式 make MODE=rndis # RNDIS 模式 make MODE=mbim # MBIM 模式 make MODE=ecm # ECM 模式 make MODE=all # 全编译 sudo make install # 一键安装

复制 ko 文件

sudo cp -f drivers/net/usb/usbnet.ko /lib/modules/$(uname -r)/extra/qmi/ 2>/dev/null || true sudo cp -f drivers/net/usb/qmi_wwan.ko /lib/modules/$(uname -r)/extra/qmi/ 2>/dev/null || true sudo cp -f drivers/net/usb/cdc_ether.ko /lib/modules/$(uname -r)/extra/qmi/ 2>/dev/null || true sudo cp -f drivers/net/usb/cdc_ncm.ko /lib/modules/$(uname -r)/extra/qmi/ 2>/dev/null || true sudo cp -f drivers/net/usb/cdc_mbim.ko /lib/modules/$(uname -r)/extra/qmi/ 2>/dev/null || true sudo cp -f drivers/net/usb/rndis_host.ko /lib/modules/$(uname -r)/extra/qmi/ 2>/dev/null || true sudo cp -f drivers/usb/class/cdc-wdm.ko /lib/modules/$(uname -r)/extra/qmi/ 2>/dev/null || true sudo cp -f drivers/usb/serial/usbserial.ko /lib/modules/$(uname -r)/extra/qmi/ 2>/dev/null || true sudo cp -f drivers/usb/serial/usb_wwan.ko /lib/modules/$(uname -r)/extra/qmi/ 2>/dev/null || true sudo cp -f drivers/usb/serial/option.ko /lib/modules/$(uname -r)/extra/qmi/ 2>/dev/null || true sudo cp -f drivers/net/ppp/ppp_generic.ko /lib/modules/$(uname -r)/extra/qmi/ 2>/dev/null || true sudo cp -f drivers/net/ppp/ppp_async.ko /lib/modules/$(uname -r)/extra/qmi/ 2>/dev/null || true sudo cp -f drivers/net/ppp/ppp_synctty.ko /lib/modules/$(uname -r)/extra/qmi/ 2>/dev/null || true sudo cp -f drivers/net/ppp/slhc.ko /lib/modules/$(uname -r)/extra/qmi/ 2>/dev/null || true

刷新模块依赖

sudo depmod -a
  • 加载驱动到内核

如果内核已经有驱动,可以直接从这个步骤开始

根据需要的驱动加载,比方说这里是QMI拨号,加载qmi_wwan0,不建议同时加载多个驱动,避免网卡冲突,如果要卸载用这个指令 sudo rmmod xxx

sudo modprobe usbnet sudo modprobe cdc_wdm sudo modprobe qmi_wwan sudo modprobe cdc_ether # sudo modprobe cdc_ncm # sudo modprobe cdc_mbim # sudo modprobe rndis_host sudo modprobe usbserial sudo modprobe usb_wwan sudo modprobe option # sudo modprobe ppp_async

到这里已经有 wwan0 网卡

检查驱动是否加载( 可选)

lsmod | egrep "cdc_ether|cdc_ncm|cdc_mbim|cdc_wdm|qmi_wwan|rndis_host|option|usb_wwan|ppp_async"

检查 ko 版本(可选)

modinfo qmi_wwan | grep vermagic modinfo cdc_wdm | grep vermagic modinfo option | grep vermagic uname -r

必须都是

5.15.185-tegra

插入模块后检查设备 (可选)

lsusb dmesg | grep -iE "qmi|cdc-wdm|wwan|ttyUSB|option|2c7c" | tail -80 ls /dev/cdc-wdm* ls /dev/ttyUSB* ip -br link | grep -E "wwan|usb|enx"
  • 开始QMI拨号

方案一 QMI 工具拨号(树莓派推荐,RM520 推荐)

安装 QMI 工具 (拨号关键工具)

sudo apt install -y libqmi-utils udhcpc isc-dhcp-client

写 QMI 配置

sudo tee /etc/qmi-network.conf >/dev/null <<'EOF' APN=CMNET APN_USER= APN_PASS= APN_AUTH=none IP_TYPE=4 PROXY=yes EOF

停止抢占服务(可选)

sudo systemctl stop ModemManager 2>/dev/null || true sudo killall ModemManager 2>/dev/null || true

设置 raw-ip

sudo ip link set wwan0 down echo Y | sudo tee /sys/class/net/wwan0/qmi/raw_ip sudo ip link set wwan0 up

查询模块状态

sudo qmicli -d /dev/cdc-wdm0 --device-open-proxy --dms-get-operating-mode sudo qmicli -d /dev/cdc-wdm0 --device-open-proxy --nas-get-signal-strength sudo qmicli -d /dev/cdc-wdm0 --device-open-proxy --nas-get-serving-system

开始 QMI 拨号,重启网卡是有必要的,两指令都发送

sudo qmi-network /dev/cdc-wdm0 stop sudo qmi-network /dev/cdc-wdm0 start

RM520 换到 SIM7600 后(换不同高通模组后),请一定要把旧 QMI 状态清掉。RM520 和 SIM7600 都是高通基带没错,但/tmp/qmi-network-state-cdc-wdm0里的 CID/PDH 不能跨模块沿用。

sudo pkill -f qmicli sudo pkill -f qmi-proxy sudo rm -f /tmp/qmi-network-state-cdc-wdm0 sudo systemctl stop ModemManager 2>/dev/null sudo qmi-network /dev/cdc-wdm0 start

获取 IP

sudo udhcpc -i wwan0

如果 udhcpc 不成功 用这个

sudo dhclient -v wwan0

设置默认路由

sudo ip route replace default dev wwan0

设置 DNS

echo "nameserver 114.114.114.114" | sudo tee /etc/resolv.conf echo "nameserver 8.8.8.8" | sudo tee -a /etc/resolv.conf

测试

ping -I wwan0 8.8.8.8 -c 4 ping -I wwan0 qq.com -c 4

合并拨号步骤,方便一键复制粘贴:

sudo apt install -y libqmi-utils udhcpc isc-dhcp-client sudo tee /etc/qmi-network.conf >/dev/null <<'EOF' APN=CMNET APN_USER= APN_PASS= APN_AUTH=none IP_TYPE=4 PROXY=yes EOF sudo systemctl stop ModemManager 2>/dev/null || true sudo killall ModemManager 2>/dev/null || true sudo ip link set wwan0 down echo Y | sudo tee /sys/class/net/wwan0/qmi/raw_ip sudo ip link set wwan0 up sudo qmicli -d /dev/cdc-wdm0 --device-open-proxy --dms-get-operating-mode sudo qmicli -d /dev/cdc-wdm0 --device-open-proxy --nas-get-signal-strength sudo qmicli -d /dev/cdc-wdm0 --device-open-proxy --nas-get-serving-system sudo qmi-network /dev/cdc-wdm0 stop sudo qmi-network /dev/cdc-wdm0 start sudo udhcpc -i wwan0 || sudo dhclient -v wwan0 sudo ip route replace default dev wwan0

方案二 nmcli+ModemManager 工具自动拨号 (SIM7600 推荐)

打开ModemManager

sudo apt install -y modemmanager network-manager sudo systemctl enable --now ModemManager sudo systemctl enable --now NetworkManager

创建蜂窝连接,获取IP

sudo nmcli radio wwan on sudo nmcli connection add type gsm ifname '*' con-name sim7600-qmi apn CMNET sudo nmcli connection up sim7600-qmi

FAQ

如果有 /dev/cdc-wdm0 但没有 wwan0


执行这个绑定,先看 PID

lsusb

比如看到 2c7c 0801 就执行

echo "2c7c 0801" | sudo tee /sys/bus/usb/drivers/qmi_wwan/new_id echo "2c7c 0801" | sudo tee /sys/bus/usb-serial/drivers/option1/new_id

再检查

dmesg | tail -80 ls /dev/cdc-wdm* ip -br link | grep wwan

如果一直无法获取ip和上网


可以去掉用不到的网卡驱动,重启下再重新拨号

如果要完全关闭QMI拨号


sudo qmi-network /dev/cdc-wdm0 stop 2>/dev/null || true

sudo pkill -f qmicli 2>/dev/null || true
sudo pkill -f qmi-proxy 2>/dev/null || true

sudo dhclient -r wwan0 2>/dev/null || true
sudo pkill -f "dhclient.*wwan0" 2>/dev/null || true
sudo pkill -f "udhcpc.*wwan0" 2>/dev/null || true

sudo ip route del default dev wwan0 2>/dev/null || true
sudo ip addr flush dev wwan0 2>/dev/null || true
sudo ip link set wwan0 down 2>/dev/null || true

sudo rm -f /tmp/qmi-network-state-cdc-wdm0
sudo rm -f /var/run/qmi-network-state-cdc-wdm0

sudo systemctl restart ModemManager 2>/dev/null || true

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/13 21:49:53

X-Plane 11 UDP数据包解析全攻略:从抓包到LabVIEW解码(避坑指南)

X-Plane 11 UDP数据解析实战&#xff1a;从协议破解到LabVIEW可视化在飞行仿真开发领域&#xff0c;X-Plane 11凭借其精准的飞行动力学模型和开放的接口生态&#xff0c;成为众多航空仿真项目的首选平台。但当你第一次看到从X-Plane接收到的UDP数据流时&#xff0c;那串看似随机…

作者头像 李华
网站建设 2026/6/13 21:43:52

如何用nhentai-cross打造全平台漫画阅读体验:从入门到精通

如何用nhentai-cross打造全平台漫画阅读体验&#xff1a;从入门到精通 【免费下载链接】nhentai-cross A nhentai client 项目地址: https://gitcode.com/gh_mirrors/nh/nhentai-cross 还在为在不同设备上阅读漫画而烦恼吗&#xff1f;nhentai-cross正是你需要的跨平台…

作者头像 李华
网站建设 2026/6/13 21:41:51

[C++] 深入理解红黑树与代码实现

1. 红黑树的概念 红黑树是一颗二叉搜索树&#xff0c;具备二叉搜索树的所有性质。可以跳转至这篇文章了解二叉搜索树&#xff1a; C&#xff1a;深入理解二叉搜索树与代码实现 红黑树在二叉搜索树的基础上还具有以下性质&#xff1a; 只有红色和黑色两种节点根节点为黑色任何…

作者头像 李华
网站建设 2026/6/13 21:38:59

Redis 从入门到精通:分片之道 —— Redis Cluster

IT策士 10余年一线大厂经验&#xff0c;专注 IT 思维、架构、职场进阶。我会在各个平台持续发布最新文章&#xff0c;助你少走弯路。 通过主从复制和 Sentinel 哨兵&#xff0c;我们解决了数据冗余、读写分离和自动故障转移。但所有这些架构中&#xff0c;写入操作始终只能由一…

作者头像 李华
网站建设 2026/6/13 21:35:02

I2C总线协议与i.MX23实战:从两线制原理到DMA高效编程

1. I2C总线协议&#xff1a;嵌入式世界的“电话会议”系统如果你玩过嵌入式开发&#xff0c;尤其是单片机或者像i.MX23这样的应用处理器&#xff0c;那你肯定绕不开I2C。这东西就像设备之间开“电话会议”的规则手册。想象一下&#xff0c;在一个电路板上&#xff0c;有十几个“…

作者头像 李华