- 更新:2022-05-17 16:38:29
- 首发:2022-03-27 20:46:19
- 教程
- 29929
由于无线上网卡驱动的完善,随着内核的更新大部分的4G/5G无线网卡得到免驱支持。
OpenWRT社区包含了大量的无线网卡驱动,其中不乏4G/5G模块,现如今市面上常见的模块型号都得到了支持。
如果在其它Linux发行版使用4G/5G模块,请参考《Linux使用4G/5G无线网卡模块上网》。
识别模块
将4G/5G开发板插入设备,终端输入lsusb
或lspci
,看设备是否识别到4G/5G模块。
$ lsusb
Bus 001 Device 001: ID 05c6:6001 Qualcomm, Inc. Mass Storage Device
以树莓派4(Raspberry4)中安装的OpenWRT为例,上述命令显示设备识别到高通芯片的4G模块(USB无线网卡)。
如果你也在树莓派4中使用4G/5G网卡,还可以参考:《树莓派4使用OTG功能变身有线网卡》。
查看驱动加载情况
OpenWRT对3G/UMTS/4G/LTE/5G/Phone网卡的驱动方式,一共有以下几种:
- QMI
- NCM
- RNDIS
- 串口/专有驱动
查看dmesg
信息,确认模块驱动加载情况。不同的4G/5G网卡,加载的驱动模式可能有差异。通常情况下,4G无线网卡包含两个模式,一个CD存储模式,另一个是Modem模式(调制解调器模式)。5G模块的无线网卡通常走USB Type-C,具有专门的驱动。
$ dmesg
如果usb模式切换正常,通常可以看到输出内容包含:
GSM modem
否则,可能只识别到USB Storage device
或者CD-ROM
。这种情况下,需要安装usb-modeswitch
等库,并设置切换网卡运行模式。
如果只识别到USB设备而没有对应驱动,需要对OpenWRT内核编译选项进行配置。如果看到GSM
相关字眼(跳过内核编译,说明固件已经支持该模块),那么直接执行ifconfig -a
查看是否有wwan0
或usb
之类的网卡名称。
很多情况下一些依赖的相关驱动需要安装后才会出现网卡。
例如执行lsusb
时找到设备为高通4G卡托:
Bus 001 Device 006: ID 05c6:9008 Qualcomm, Inc. Gobi Wireless Modem (QDL mode)
执行RNDIS相关依赖安装:
opkg update
opkg install kmod-usb-net-rndis usb-modeswitch
重启设备。
重启后如果dmesg
输出内容包含RNDIS device
,则说明已经被识别为RNDIS
设备,将匹配为一个安卓手机来进行上网。
这时执行lsusb
就可以看到USB设备已经变为:
Bus 001 Device 006: ID 05c6:902d Android Android
这时USB 4G上网卡托则被识别为安卓设备,同时ifconfig -a
出现usb0
网卡。
内核编译选项
### USB Net Drivers
CONFIG_PACKAGE_kmod-usb-net=y
CONFIG_PACKAGE_kmod-usb-net-asix=y
CONFIG_PACKAGE_kmod-usb-net-asix-ax88179=y
CONFIG_PACKAGE_kmod-usb-net-rtl8152=y
CONFIG_PACKAGE_kmod-usb-net-cdc-eem=y
CONFIG_PACKAGE_kmod-usb-net-cdc-ether=y
CONFIG_PACKAGE_kmod-usb-net-cdc-mbim=y
CONFIG_PACKAGE_kmod-usb-net-cdc-ncm=y
CONFIG_PACKAGE_kmod-usb-net-cdc-subset=y
CONFIG_PACKAGE_kmod-usb-net-dm9601-ether=y
CONFIG_PACKAGE_kmod-usb-net-hso=y
CONFIG_PACKAGE_kmod-usb-net-huawei-cdc-ncm=y
CONFIG_PACKAGE_kmod-usb-net-ipheth=y
CONFIG_PACKAGE_kmod-usb-net-kalmia=y
CONFIG_PACKAGE_kmod-usb-net-kaweth=y
CONFIG_PACKAGE_kmod-usb-net-mcs7830=y
CONFIG_PACKAGE_kmod-usb-net-pegasus=y
CONFIG_PACKAGE_kmod-usb-net-pl=y
CONFIG_PACKAGE_kmod-usb-net-qmi-wwan=y
CONFIG_PACKAGE_kmod-usb-net-rndis=y
CONFIG_PACKAGE_kmod-usb-net-sierrawireless=y
CONFIG_PACKAGE_kmod-usb-net-smsc95xx=y
CONFIG_PACKAGE_kmod-usb-net-sr9700=y
CONFIG_PACKAGE_kmod-usb-net2280=y
### USB Storage Drivers
CONFIG_PACKAGE_kmod-usb-ohci=y
CONFIG_PACKAGE_kmod-usb-ohci-pci=y
CONFIG_PACKAGE_kmod-usb-printer=y
CONFIG_PACKAGE_kmod-usb-storage=y
CONFIG_PACKAGE_kmod-usb-storage-extras=y
CONFIG_PACKAGE_kmod-usb-storage-uas=y
CONFIG_PACKAGE_kmod-usb-uhci=y
CONFIG_PACKAGE_kmod-usb2=y
CONFIG_PACKAGE_kmod-usb2-pci=y
CONFIG_PACKAGE_kmod-usb3=y
# 3G/4G/5G Drivers & Utilities
CONFIG_PACKAGE_comgt-ncm=y
CONFIG_PACKAGE_comgt=y
CONFIG_PACKAGE_kmod-mii=y
CONFIG_PACKAGE_kmod-usb-acm=y
CONFIG_PACKAGE_kmod-usb-serial=y
CONFIG_PACKAGE_kmod-usb-serial-option=y
CONFIG_PACKAGE_kmod-usb-serial-wwan=y
CONFIG_PACKAGE_luci-proto-3g=y
CONFIG_PACKAGE_luci-proto-ncm=y
CONFIG_PACKAGE_luci-proto-qmi=y
CONFIG_PACKAGE_qmi-utils=y
CONFIG_PACKAGE_umbim=y
CONFIG_PACKAGE_uqmi=y
CONFIG_PACKAGE_usb-modeswitch=y
# Mobile Network Sharing
CONFIG_PACKAGE_libimobiledevice-utils=y
CONFIG_PACKAGE_libplist-utils=y
CONFIG_PACKAGE_libudev-fbsd=y
CONFIG_PACKAGE_libusbmuxd-utils=y
CONFIG_PACKAGE_usbmuxd=y
# Kmods
CONFIG_PACKAGE_kmod-rtl8187=y
CONFIG_PACKAGE_kmod-rtl8188eu=y
CONFIG_PACKAGE_kmod-rtl8192c-common=y
CONFIG_PACKAGE_kmod-rtl8192cu=y
CONFIG_PACKAGE_kmod-rtl8192du=y
CONFIG_PACKAGE_kmod-rtl8812au-ac=y
CONFIG_PACKAGE_kmod-rtl8821cu=y
CONFIG_PACKAGE_kmod-rtl88x2bu=y
CONFIG_PACKAGE_kmod-rtlwifi=y
CONFIG_PACKAGE_kmod-rtlwifi-usb=y
CONFIG_PACKAGE_kmod-usb-net-rtl8150=y
CONFIG_PACKAGE_kmod-usb-net-rtl8152=y
上述配置项包含了常见的3G/4G/5G模块所依赖的配置信息。其中最为关键的是usb-modeswitch
模块的配置。
按照上述配置项编译后,即可正常识别上网模块。如果仍然无法识别,需要根据设备ID查找对应驱动,可参考《Linux安装无线网卡驱动通用方法》。
驱动模块
常见的4G模块是通电即能联网,无需手工配置拨号信息。这类模块在ifconfig -a
中直接体现了wwan0
或usb
之类的网卡名称。但由于OpenWRT默认没有对网卡启用DHCP Client
,因此不会看到被分配的IP信息。这种情况下我们只需要在UI管理界面的接口
-新建接口
,输入一个你喜欢的wan口名称,并选择协议为DHCP客户端
,选中对应的网卡,新建后修改
-网卡防火墙
,选择wan
保存。之后就可以看到接口界面该网卡获得了IP地址,客户端即可正常上网。【USB模块里最常见情况】
另外一种情况通常是给开发人员提供的4G/5G模块,是需要依赖一个上位机系统才能完成拨号并正常上网的。这类模块的表现就是直接给模块通电是无法正常上网的,需要配置拨号信息。例如移远等各类开发板使用的LTE模块、GL.iNet的各类LTE模块、给自助设备/嵌入式设备使用的4G模块、大部分的PCIe接口的LTE模块。这种情况需要使用qmi
模块进行拨号上网。
opkg install usb-modeswitch kmod-mii kmod-usb-net kmod-usb-wdm kmod-usb-net-qmi-wwan uqmi luci-proto-qmi
安装上述模块后,进入GUI管理界面,接口
-新建接口
,输入一个你喜欢的wan口名称,并选择协议为QMI 蜂窝
(不同版本翻译的名称不一样,带QMI
即可),新建后修改
-网卡防火墙
,选择wan
保存。修改
,设备地址输入/dev/cdc-wdm0
(通常是这个,看dmesg
输出的结果),APN
根据卡片来(联通 3gnet
、移动 cmnet
、电信ctnet
)。保存后查看是否能成功拨号。
其它特殊模块参考官方文档https://openwrt.org/docs/guide-user/network/wan/wwan/ltedongle。
具体的手动拨号方法参见《OpenWRT使用4G卡托拨号上网》。
暂无内容
感谢回复! 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编译了