轶哥

📚 Having fun with AI Agent. Always learning.

    Linux使用4G/5G无线网卡模块上网
    •   更新:2022-03-27 20:47:03
    •   首发:2021-01-25 00:49:21
    •   教程
    •   14622

    识别模块

    5G模块

    将4G/5G开发板插入设备,终端输入lsusblspci,看设备是否识别到4G/5G模块。

    root@raspberrypi:~ $ lsusb
    Bus 001 Device 001: ID 05c6:1000 Qualcomm, Inc. Mass Storage Device
    

    IMG6477.JPG

    以树莓派(Raspberry)为例,上述命令显示设备识别到高通芯片的4G模块。了解更多详情请阅读《Linux安装无线网卡驱动通用方法》

    需要特别注意的是,部分4G模块(特别是性能较好的高通芯片)是内核免驱,载入成功后直接体现为网卡。使用ifconfig即可直接看到网卡并能上网。这种情况下,USB接口实现的是一个USB网卡端,类似于Raspberry OTG USB上网。参考:《树莓派4使用OTG功能变身有线网卡》

    查看驱动加载情况

    查看dmesg信息,确认模块驱动加载情况。不同的4G/5G网卡,加载的驱动模式可能有差异。通常情况下,4G无线网卡包含两个模式,一个CD存储模式,另一个是Modem模式(调制解调器模式)。5G模块的无线网卡通常走USB Type-C,具有专门的驱动,但是拨号过程大同小异。

    $ dmesg
    

    如果usb模式切换正常,通常可以看到类似如下输出:

     ttyUSB1: GSM modem (1-port) converter now disconnected from ttyUSB1
    

    否则,可能只识别到USB Storage device或者CD-ROM。这种情况下,需要安装usb-modeswitch usb-modeswitch-data等库,并设置切换为modem模式。

    配置wvdial拨号

    sudo apt install wvdial ppp
    

    修改wvdial配置文件/etc/wvdial.conf。我使用的电信手机卡进行测试:

    [Dialer Defaults]
    Init1 = ATZ
    Init2 = ATQ0 V1 E1 S0=0
    Init3 = AT+CGDCONT=1,"IP","ctnet"
    Modem Type = Analog Modem
    Baud = 9600
    New PPPD = yes
    Modem = /dev/ttyUSB1
    ISDN = 0
    Phone = *99#
    Password = card
    Username = card
    Auto DNS = on
    

    相应的,你需要将APN设置的一行Init3内容进行修改,4G模块中移动cmnet、联通3gnet、电信ctnet,相应的物联网卡APN和5G使用的配置数据,根据供应商给到的参数进行设置。Modem一栏即4G模块的USB虚拟串口设备路径或5G模块的TTY接口。

    运行:

    $ wvdial
    

    直接执行wvdial命令,即可看到拨号上网的过程。如果成功,将会看到:

    --> WvDial: Internet dialer version xxx
    --> Initializing modem.
    --> Sending: ATZ
    OK
    --> Sending: ATQ0 V1 E1 S0=0
    OK
    --> Modem initialized.
    --> Sending: ATDT*99#
    --> Waiting for carrier.
    ATDT*99#
    CONNECT 150000000
    --> Carrier detected.  Starting PPP immediately.
    --> Starting pppd at Sun Jan 24 14:45:37 2021
    --> Pid of pppd: 1330
    --> Using interface ppp0
    --> pppd: X/?[01]X/?[01]
    --> local  IP address xxx.xxx.xxx.xxx
    --> pppd: X/?[01]X/?[01]
    --> remote IP address xxx.xxx.xxx.xxx
    --> pppd: X/?[01]X/?[01]
    --> primary   DNS address xxx.xxx.xxx.xxx
    --> pppd: X/?[01]X/?[01]
    --> secondary DNS address xxx.xxx.xxx.xxx
    --> pppd: X/?[01]X/?[01]
    

    可以成功获取local IP地址,基本上就快成功了。其中,remote IP address 10.64.64.64是正常的。

    部分5G模块拨号成功后,数据是不走ppp网卡的。需要根据具体模块文档进行调试。

    检查是否可以上网

    运行:

    $ ifconfig
    

    如果调制解调器正常运行,则可以看到ppp0输入类似内容:

    ppp0: flags=4305<UP,POINTOPOINT,RUNNING,NOARP,MULTICAST>  mtu 1500
            inet xxx.xxx.xxx.xxx  netmask 255.255.255.255  destination 10.64.64.64
            ppp  txqueuelen 3  (Point-to-Point Protocol)
            RX packets 11065  bytes 1348146 (1.2 MiB)
            RX errors 0  dropped 0  overruns 0  frame 0
            TX packets 12168  bytes 1585065 (1.5 MiB)
            TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
    

    每次成功启动后都会分配到一个随机IP地址(也有可能固定,取决于运营商),这就说明4G/5G模块初始化成功。使用IPv6场景的5G模块,还需要针对IPv6进行网卡配置。

    检查路由表:

    $ route -n
    

    得到类似信息:

    root@NanoPi-NEO2:~# route -n
    Kernel IP routing table
    Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
    0.0.0.0         0.0.0.0         0.0.0.0         U     0      0        0 ppp0
    0.0.0.0         10.10.10.252    0.0.0.0         UG    100    0        0 eth0
    10.10.10.0      0.0.0.0         255.255.255.0   U     100    0        0 eth0
    10.64.64.64     0.0.0.0         255.255.255.255 UH    0      0        0 ppp0
    

    在双网卡情况下,如果要使用ppp0上网,可以这么做:

    # 删除第一条路由信息:
    $ sudo route del –net 0.0.0.0 eth0
    # 新增一条ppp0的路由信息:
    $ sudo route add –net 0.0.0.0 ppp0
    

    可以参考文章《MacOS 同时使用内网和外网(双网卡同时联网)》,进行多网卡同时联网的设置。

    确认路由正常后,就可以开始常规的确认网络操作了。例如ping网关ping 114.114.114.114ping www.baidu.com

    查询当前IP地址:

    $ curl cip.cc
    

    创建wvdial服务

    需要在加载完USB调制解调器后自动拨号,可以创建wvdial.service文件。

    $ vim /etc/systemd/system/wvdial.service
    
    [Unit]
    Description=wvdial
    
    [Service]
    ExecStart=/usr/bin/wvdial
    Restart=on-failure
    RestartSec=5
    

    将下述内容添加到99-com.rules文件中。wvdial.service加载USB调制解调器后,它将被自动调用。

    $ vim /etc/udev/rules.d99-com.rules
    
    SUBSYSTEM=="tty", KERNEL=="ttyUSB1", TAG+="systemd", ENV{SYSTEMD_WANTS}+="wvdial.service"
    

    其它Linux常规操作

    # 启动wvdial服务
    systemctl start wvdial
    
    # 关闭wvdial服务
    systemctl stop wvdial
    
    # 查询是否存在wvdial进程
    ps aux|grep wvdial
    
    # 关闭wvdial进程
    killall wvdial
    
    # 查看wvdial服务日志
    journalctl -u wvdial
    
    打赏
    交流区(1)
    轶哥

    也可以使用NetworkManager借助ModemManager实现上网,通用性非常强,兼容高通芯片和其他主流芯片。

    2023年2月4日 14:55回复
    尚未登陆
    发布
      上一篇 (JavaScript练习题)
    下一篇 (NuxtJS中Axios的配置说明)  

    评论回复提醒