受这一篇面向Windows的帖子启发:大疆4G模块用于PC上网看我这篇就够了!(保姆级教程)
https://bbs.dji.com/thread-302229-1-1.html
研究了一下如何在Linux下也实现4G模块给电脑上网。效果还可以,随便测了下速度,电信4G 下载 27.84Mbps, 上传 11.85Mbps, 时延 59(+/-9.67)ms。
另外温度还是蛮烫的:持续满负荷使用:59度,不使用:42度,环境温度:29度。
以下步骤在 Debian 11 (5.10 和 6.1 kernel) 中尝试成功。
* 硬件基础情况识别(系统日志)
+ 插上硬件到USB口
+ 在终端窗口运行(下同)
sudo journalctl -kf
# 应能查看到 New USB device found, idVendor=2ca3, idProduct=4006 等字样。
+ 这个终端窗口先不关,用于查看系统日志滚动更新。需要关的话可以 Ctrl+C
* 检查默认驱动情况:
+ 运行命令:
usb-devices | grep -A 9 -B 2 -i 4006
# 输出不为空,并且有5个 Driver=(none) 即为正常[1].
* 检查驱动是否已包含支持:
+ 运行命令:
sudo modinfo option | grep 2C7Cp0125
sudo modinfo qmi_wwan | grep 2C7Cp0125
# 输出类似即为正常: alias: usb:v2C7Cp0125d*dc*dsc ...
* 载入驱动:
+ 运行命令:
# 载入通用驱动,并且连接上设备
sudo modprobe -v usbserial vendor=0x2ca3 product=0x4006
# 系统日志中应能看到 attached to ttyUSB0 等字样
# !记下最后一组设备编号,如"3-1:1.4"(不带引号)
# 让出用于网卡的数据接口(!按上面的设备编号填入echo命令)
echo '3-1:1.4' | sudo tee /sys/bus/usb/drivers/usbserial_generic/unbind
# 系统日志中应能看到类似 3-1:1.4: device disconnected 的字样
# 载入网卡驱动
sudo modprobe -v option # 可选(似乎没用)
sudo modprobe -v qmi_wwan
# 把设备和驱动对接上
echo "2ca3 4006 0 2c7c 0125" | sudo tee /sys/bus/usb/drivers/qmi_wwan/new_id
# 应能看到 wwan0: register 'qmi_wwan' at usb-0000:06:00.4-1 等字样,具体数字可以不同
* 设置网络连接
此时桌面的网络管理器(network-manager,用来选wifi和有线连接的图标)点左键会多出一个"New Mobile Broadband connection..."选项。
点击"New Mobile Broadband connection..."进行相应设置,按照提示一步一步点下去就好了,比如选择网络服务商(如电信 telecom)等,其它基本默认就行。
设置完成后会出现一个新的连接,例如 China Telecom CTNET,点击即可连上。
* 设置完后断开 wifi 或网线连接,就可以专心享用手机卡的流量了。
Long story short
感谢[2]的 Windows 教程,里面提供了一个关键信息,即这个模块的芯片品牌是 Quectel。在 Quectel 的官网[3] 以 LTE&5G 为关键字可以找到相关的的驱动和文档[4]。
对照官方文档[4]和Windows驱动[2]的截图可以确定网卡型号是 EG25-G,进而确定了产品的设备ID:VID: 0x2c7c PID: 0x0125,在 Linux 中是根据 VID 和 PID 载入对应驱动的。
到此有两个思路,一个是自己编译一个驱动,另一个是利用已有驱动。Quectel官网驱动[4]提供到Linux 内核5.3.1版本就没有后续了,经过查找发现原来Linux内核已合并了部分驱动(option和qmi_wwan),只是GobiNet驱动不支持。再加上 Linux 内核的文档提供了一种替换 vendorID, ProductID 的方法[5],即通过写入 /sys/bus/usb/drivers/.../new_id 迫使驱动把不认识的设备识别成已知的设备,这样就形成了以上方法。奇怪的是option驱动似乎没有实际用上。其他更多细节参考官方文档[4]。
Ref.
[1] 若没有 usb-devices 命令,可尝试安装 usbutils 软件包后再运行。或者替换为执行以下命令:
sudo mount -t debugfs none /sys/kernel/debug
sudo cat /sys/kernel/debug/usb/devices | grep -A 23 -B 3 -i 4006
[2] 大疆4G模块用于PC上网看我这篇就够了!(保姆级教程) https://bbs.dji.com/thread-302229-1-1.html
[3] IoT Modules, IoT Antennas and IoT Connectivity | Quectel https://www.quectel.com/
[4] Quectel_LTE&5G_Linux_USB_Driver_V1.0 | Quectel https://www.quectel.com/download/quectel_lte5g_linux_usb_driver_v1-0-2
[5] Linux内核源码文档 https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/tree/ation/ABI/testing/sysfs-bus-usb?h=v6.1.32