- 首发:2022-05-09 13:35:14
- 教程
- 11689
之前轶哥介绍过《OpenWRT使用4G/5G无线网卡模块上网》的方法,文中对拨号上网部分描述不是很详细。本文我们就专门针对拨号上网的设置方法详细说明。
测试环境
- GL-MT300N-V2最新OpenWRT官方固件:https://openwrt.org/toh/hwdata/gl.inet/gl.inet_gl-mt300n_v2
- 高通05c6:6001上网卡托(中沃ZM50 USB 4G网卡,支持电信/联通 4G/3G)。
安装依赖和驱动
在编译固件的时候安装4G模块相关组件或者选择有官方维护的内核版本安装相关组件。
opkg update
opkg install usb-modeswitch kmod-mii kmod-usb-net kmod-usb-wdm kmod-usb-net-qmi-wwan uqmi
不仅上述组件,我把相关的都装了:
kernel - 5.4.188-1-464fe1de21fd0be55bce8609c115ce6d
comgt - 0.32-33
comgt-ncm - 0.32-33
kmod-ppp - 5.4.188-1
kmod-pppoe - 5.4.188-1
kmod-pppox - 5.4.188-1
kmod-sched-connmark - 5.4.188-1
kmod-sched-core - 5.4.188-1
kmod-scsi-core - 5.4.188-1
kmod-slhc - 5.4.188-1
kmod-usb-acm - 5.4.188-1
kmod-usb-core - 5.4.188-1
kmod-usb-ehci - 5.4.188-1
kmod-usb-net - 5.4.188-1
kmod-usb-net-asix - 5.4.188-1
kmod-usb-net-cdc-eem - 5.4.188-1
kmod-usb-net-cdc-ether - 5.4.188-1
kmod-usb-net-cdc-mbim - 5.4.188-1
kmod-usb-net-cdc-ncm - 5.4.188-1
kmod-usb-net-cdc-subset - 5.4.188-1
kmod-usb-net-dm9601-ether - 5.4.188-1
kmod-usb-net-hso - 5.4.188-1
kmod-usb-net-huawei-cdc-ncm - 5.4.188-1
kmod-usb-net-ipheth - 5.4.188-1
kmod-usb-net-kalmia - 5.4.188-1
kmod-usb-net-kaweth - 5.4.188-1
kmod-usb-net-mcs7830 - 5.4.188-1
kmod-usb-net-pegasus - 5.4.188-1
kmod-usb-net-qmi-wwan - 5.4.188-1
kmod-usb-net-rndis - 5.4.188-1
kmod-usb-net-sierrawireless - 5.4.188-1
kmod-usb-net-smsc95xx - 5.4.188-1
kmod-usb-ohci - 5.4.188-1
kmod-usb-ohci-pci - 5.4.188-1
kmod-usb-serial - 5.4.188-1
kmod-usb-serial-ark3116 - 5.4.188-1
kmod-usb-serial-belkin - 5.4.188-1
kmod-usb-serial-ch341 - 5.4.188-1
kmod-usb-serial-cp210x - 5.4.188-1
kmod-usb-serial-cypress-m8 - 5.4.188-1
kmod-usb-serial-ftdi - 5.4.188-1
kmod-usb-serial-ipw - 5.4.188-1
kmod-usb-serial-keyspan - 5.4.188-1
kmod-usb-serial-mct - 5.4.188-1
kmod-usb-serial-mos7720 - 5.4.188-1
kmod-usb-serial-option - 5.4.188-1
kmod-usb-serial-oti6858 - 5.4.188-1
kmod-usb-serial-pl2303 - 5.4.188-1
kmod-usb-serial-qualcomm - 5.4.188-1
kmod-usb-serial-sierrawireless - 5.4.188-1
kmod-usb-serial-ti-usb - 5.4.188-1
kmod-usb-serial-visor - 5.4.188-1
kmod-usb-serial-wwan - 5.4.188-1
kmod-usb-storage - 5.4.188-1
kmod-usb-storage-extras - 5.4.188-1
kmod-usb-storage-uas - 5.4.188-1
kmod-usb-uhci - 5.4.188-1
kmod-usb-wdm - 5.4.188-1
kmod-usb2 - 5.4.188-1
kmod-usb2-pci - 5.4.188-1
kmod-usb3 - 5.4.188-1
libmbim - 1.24.8-1
libqmi - 1.28.8-1
libusb-1.0-0 - 1.0.24-4
libusbmuxd - 2.0.2-1
luci-proto-3g - git-22.046.84868-a7b0fe1
luci-proto-ncm - git-22.046.84868-a7b0fe1
luci-proto-ppp - git-21.163.64918-6c6559a
luci-proto-qmi - git-22.046.84868-a7b0fe1
picocom - 3.1-5
ppp - 2.4.8.git-2020-10-03-3
ppp-mod-pppoe - 2.4.8.git-2020-10-03-3
qmi-utils - 1.28.8-1
umbim - 2019-09-11-184b707d-1
uqmi - 2020-11-22-0a19b5b7-3
usb-modeswitch - 2017-12-19-f40f84c2-2
usbids - 0.359-1
usbmuxd - 1.1.1-1
usbutils - 013-2
wireless-regdb - 2021.08.28-1
wwan - 2019-04-29-5
执行lsusb
查看型号:
root@OpenWrt:~# lsusb
Bus 001 Device 003: ID 05c6:6001 USB Modem USB Modem
注意: 未安装驱动或未载入驱动前查看到的信息可能是这样的:
Bus 001 Device 001: ID 05c6:6001 Qualcomm, Inc.
因为识别到了Modem模块而标识为USB Modem
。
验证您是否已通过内核配置或依赖安装为USB蜂窝模块QMI
接口,判断是否正常连接Linux内核qmi_wwan驱动程序,执行lsusb -t
可以看到驱动识别情况:
root@OpenWrt:~# lsusb -t
/: Bus 01.Port 1: Dev 1, Class=root_hub, Driver=ehci-platform/1p, 480M
|__ Port 1: Dev 3, If 3, Class=, Driver=qmi_wwan, 480M
|__ Port 1: Dev 3, If 4, Class=, Driver=usb-storage, 480M
可以看到识别到了qmi_wwan
和usb-storage
。前者是QMI
接口的驱动,用于上网,后者就是Win下我的电脑
里面的光驱,用于win平台展现驱动文件的CD-ROM,USBModem Disk。
执行dmesg
查看内核信息:
[ 23.484954] qmi_wwan 1-1:1.3: cdc-wdm0: USB WDM device
[ 23.491347] qmi_wwan 1-1:1.3 wwan0: register 'qmi_wwan' at usb-101c0000.ehci-1, WWAN/QMI device, 02:1e:6c:eb:92:57
[ 23.502274] usbcore: registered new interface driver qmi_wwan
[ 23.608183] usbcore: registered new interface driver rndis_host
[ 23.639271] usbcore: registered new interface driver sierra
[ 23.645120] usbserial: USB Serial support registered for Sierra USB modem
[ 23.688208] usbcore: registered new interface driver sierra_net
[ 23.769029] usbcore: registered new interface driver smsc95xx
[ 23.868062] usbcore: registered new interface driver ti_usb_3410_5052
[ 23.874814] usbserial: USB Serial support registered for TI USB 3410 1 port adapter
[ 23.882722] usbserial: USB Serial support registered for TI USB 5052 2 port adapter
[ 23.999218] usbcore: registered new interface driver cdc_mbim
[ 24.032262] usbcore: registered new interface driver ipw
[ 24.037856] usbserial: USB Serial support registered for IPWireless converter
[ 24.259600] usbcore: registered new interface driver option
[ 24.265437] usbserial: USB Serial support registered for GSM modem (1-port)
[ 24.273163] option 1-1:1.0: GSM modem (1-port) converter detected
[ 24.279722] usb 1-1: GSM modem (1-port) converter now attached to ttyUSB0
[ 24.287127] option 1-1:1.1: GSM modem (1-port) converter detected
[ 24.293719] usb 1-1: GSM modem (1-port) converter now attached to ttyUSB1
[ 24.301097] option 1-1:1.2: GSM modem (1-port) converter detected
[ 24.307680] usb 1-1: GSM modem (1-port) converter now attached to ttyUSB2
[ 24.434175] usbcore: registered new interface driver qcserial
[ 24.440204] usbserial: USB Serial support registered for Qualcomm USB modem
可以看到使用到了ttyUSB0
、ttyUSB1
、ttyUSB2
,分别有执行AT
指令和回传串口信息等作用。
执行ifconfig wwan0
查看wwan0
信息:
wwan0 Link encap:Ethernet HWaddr 02:1E:6C:XX:XX:XX
BROADCAST MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
此时该网卡处于未分配到IP地址的状态。
判断使用什么方式驱动网卡
在大多数情况下,ModemManager
与NetworkManager
相结合将自动检测4G蜂窝模块。
之前在《OpenWRT使用4G/5G无线网卡模块上网》一文中有提到过,直接新建wan
口并选择wwan0
作为DHCP客户端即可上网。但这类方法只适用于可以支持Raw-IP模式的QMI接口。
基于高通芯片组的蜂窝模块实现了高通MSM(QMI)接口。有一个支持此接口的开源Linux内核驱动程序,它称为qmi_wwan
。此驱动程序可以与ModemManager
和NetworkManager
一起使用,以自动建立连接并作为连接管理器。
ModemManager
使用的库libqmi
也可以用于通过QMI
接口与蜂窝设备更直接地通信,并逐步进行必要的配置并触发通过蜂窝网络进行数据连接。
简单来说,可以分三步进行测试:
- 直接按照《OpenWRT使用4G/5G无线网卡模块上网》中说的方法新建
DHCP客户端
看是否能上网; - 如果方法1无法获得IP地址,则尝试按照文中最后的方法以
QMI蜂窝
的方式创建接口; - 如果上面两个方法都无法上网,则尝试
UMTS/GPRS/EV-DO
方式手动拨号上网(即本文介绍的方法)。
手动拨号上网
libqmi
提供一个命令qmicli
,可用于QMI接口与4G模块通信。借此我们也可以进一步判断QMI接口是否支持Raw-IP
模式。
QMI控制通道相关网络接口的名称可以通过以下命令获取:
qmicli --device=/dev/cdc-wdm0 --device-open-proxy --get-wwan-iface
这里得到的wwan0
即QMI
对应的网卡。
检查主机系统配置的IP模式:
qmicli --device=/dev/cdc-wdm0 --get-expected-data-format
检查蜂窝模块需要的IP模式:
qmicli --device=/dev/cdc-wdm0 --device-open-proxy --wda-get-data-format
如果第一个命令返回802-3
且第二个命令提示RAW IP
相关内容,则我们可以强制使能RAW-IP
。
echo Y > /sys/class/net/wwan0/qmi/raw_ip
重启该网络接口:
ip link set dev wwan0 down
ip link set dev wwan0 up
如果一切顺利,则按照方法一进行上网即可。
可如果执行qmicli --device=/dev/cdc-wdm0 --device-open-proxy --wda-get-data-format
得到错误:
root@OpenWrt:~# qmicli --device=/dev/cdc-wdm0 --device-open-proxy --wda-get-data-format
error: couldn't create client for the 'wda' service: QMI protocol error (31): 'InvalidServiceType'
则说明无法使用RAW IP
方式上网。也就是无法直接充当DHCP Client
获得蜂窝模块分配的IP地址。这种情况下,需要尝试手动拨号。
进入OpenWRT后台,选择网络
-接口
-添加新接口
,取个名并选择UMTS/GPRS/EV-DO
协议。
创建完成后选择防火墙为wan
。编辑该接口参数。
调制解调器设备选择/dev/ttyUSB1
(看dmesg
输出的结果,如果不知道可以挨个试试),服务类型选择UMTS/GPRS
,APN
根据卡片来(联通3gnet
、移动cmnet
、电信ctnet
),拨号号码:*99#
。
保存并应用后即可成功拨号。
拨号成功后,得到的IP地址可能是一个运营商内网的IPv4
地址,正常的话,到这里设备就有数据链接了。
使用蜂窝网络接口将ping发送到远程服务器可以证明这一点:
ping -I wwan0 1.2.4.8
需要注意的是,手动拨号上网会导致4g卡托自身的wifi功能无法上网,只能有线用于拨号设备的上网,蜂窝模块(卡托)现在类似于是光猫的桥接模式。
其它有用的命令
获取模块Model:
qmicli --device=/dev/cdc-wdm0 --device-open-proxy --dms-get-model
获取固件版本:
qmicli --device=/dev/cdc-wdm0 --device-open-proxy --dms-get-revision
获取模块ID(IMEI等):
qmicli --device=/dev/cdc-wdm0 --device-open-proxy --dms-get-ids
获取SIM卡状态:
qmicli --device=/dev/cdc-wdm0 --device-open-proxy --uim-get-card-status
获取模块制造商:
qmicli --device=/dev/cdc-wdm0 --device-open-proxy --dms-get-manufacturer
暂无内容
感谢回复! Clang 在生成时沿用了 GCC 的版本号标识,我是不是可以理解为Clang 18.1.4生成时使用的就是GCC4.8,所以我后续使用gcc 9.4
gcov
就会有不兼容的问题抱歉,这块我也不太清楚,尝试寻求AI的帮助吧。
我在这个过程中遇到了各种问题- -,现在在UDC core: g_serial: couldn't find an available UDC卡住了,请问大佬有什么解决方案吗,还是说我前置的设置就错了呢,> 这个需求很特殊。是可以的,但是比较困难,需要修改驱动配置。
好思路呀!!
关于hex编辑器,网上没找到特别好用的(小白没办法),最后在vscode上扩展一搜hex,第一个安装一下就可以用vscode进行hex编译了