0

Linux使用4G/5G无线网卡模块上网

 1 year ago
source link: https://www.wyr.me/post/656
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
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 getip.icu

创建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

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK