准备环境

4G模块技术规格及文档

基于海思芯片, 同类比较 SIM7600CE (Qualcomm MDM9206)

主天线M口

开始使用

Windows上使用该4G模块需要手动安装驱动,驱动连接

Ubuntu下可以使用modemmanager管理4G模块

树莓派下使用教程如下。

lsusb

# output:
Bus 001 Device 004: ID 12d1:15c1 Huawei Technologies Co., Ltd. 
Bus 001 Device 003: ID 0424:ec00 Standard Microsystems Corp. SMSC9512/9514 Fast Ethernet Adapter
Bus 001 Device 002: ID 0424:9514 Standard Microsystems Corp. SMC9514 Hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
sudo apt-get update
sudo apt-get install ppp usb-modeswitch wvdial
sudo wvdialconf /etc/wvdial.conf
[Dialer Defaults]
Init1 = ATZ
Init2 = ATQ0 V1 E1 S0=0
Init3 = AT+CGDCONT=1,"IP", "cmnet"
Modem Type = Analog Modem
Baud = 9600
New PPPD = yes
Modem = /dev/ttyUSB0
ISDN = 0
Phone = *99***1#
Password = { }
Username = { }
Auto DNS = on

APN和拨号设置参考

国内运营商APN拨号
移动at+cgdcont=1,“ip”,“cmnet”*99***1#*98*1#
联通at+cgdcont=1,“ip”,“3gnet”*99#
电信at+cgdcont=1,“ip”,“ctnet”#777
pi@raspberrypi:~ $ sudo wvdial
--> WvDial: Internet dialer version 1.61
--> Initializing modem.
--> Sending: ATZ
^S
+23806F8RE
2C
,
^2/
ATZ
OK
--> Sending: ATQ0 V1 E1 S0=0
ATQ0 V1 E1 S0=0
OK
--> Sending: AT+CGDCONT=1,"IP", "cmnet"
AT+CGDCONT=1,"IP", "cmnet"
OK
--> Modem initialized.
--> Sending: ATDT*99***1#
--> Waiting for carrier.
ATDT*99***1#
CONNECT 150000000
--> Carrier detected.  Waiting for prompt.
--> Don't know what to do!  Starting pppd and hoping for the best.
--> Starting pppd at Tue Nov 27 22:14:54 2018
--> Pid of pppd: 1690
--> Using interface ppp0
--> pppd: �`�[01]�W�[01]
--> pppd: �`�[01]�W�[01]
--> pppd: �`�[01]�W�[01]
--> pppd: �`�[01]�W�[01]
--> pppd: �`�[01]�W�[01]
--> local  IP address 10.50.126.214
--> pppd: �`�[01]�W�[01]
--> remote IP address 10.64.64.64
--> pppd: �`�[01]�W�[01]
--> primary   DNS address 221.179.38.7
--> pppd: �`�[01]�W�[01]
--> secondary DNS address 120.196.165.7
--> pppd: �`�[01]�W�[01]
curl https://www.raspberrypi.org/
cat /dev/ttyUSB0 &  echo -e "AT+CSQ\r\n" > /dev/ttyUSB0

AT+CSQ语法

命令解释:检查网络信号强度
命令格式:AT+CSQ<CR>
命令返回:+CSQ:  **, ##           

其中:
**应在 0 到 31 之间(99表示无信号),数值越大表明信号质量越好;
##为误码率,值在 0 到 99 之间。否则应检查天线或 SIM 卡是否正确安装

计算公式:信号强度 = -113dBm + (rssi * 2)

测试结果:

AT+CSQ<CR>
+CSQ: 31, 99

优化配置

解决等待输入命令的问题 --> Carrier detected. Waiting for prompt.

Systemd Service Unit文件

[Unit]
Description=4G LTE Modem daemon
After=multi-user.target

[Service]
ExecStart=/usr/bin/wvdial --config /etc/wvdial.conf
PIDFile=/var/run/lte-modem.pid
KillMode=process
Restart=on-failure
RestartSec=10

[Install]
WantedBy=multi-user.target

/etc/wvdial.conf中加入Stupid Mode = on选项,参考这里

AP和以太网路由设置

AP参考之前的文章,这里主要说以太网路由 (LTE -> 以太网接口)

方式1:

设置静态IP

# vim /etc/network/interfaces.d/eth0
auto eth0
allow hot-plug eth0
iface eth0 inet static
    address 172.24.1.1
    netmask 255.255.255.0
    gateway 172.24.1.1

修改dhcpcd管理eth0

echo "denyinterfaces eth0" >> /etc/dhcpcd.conf

方式2:(动态配置,推荐)

sudo ifconfig eth0 172.24.1.1 netmask 255.255.255.0 broadcast 172.24.1.1
# vim /etc/dnsmasq.d/dnsmasq-eth0.conf
interface=eth0
listen-address=172.24.1.1
bind-interfaces
server=8.8.8.8
domain-needed
bogus-priv
dhcp-range=172.24.1.2,172.24.1.50,12h

动态配置

dnsmasq --interface=eth0 --except-interface=wlan0 --bind-interfaces --conf-file=/dev/null --dhcp-range=172.24.1.2,172.24.1.100,12h
# 增加
#iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE                            
iptables -A FORWARD -i ppp0 -o eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT  
iptables -A FORWARD -i eth0 -o ppp0 -j ACCEPT

便携式4G LTE

几年前入手了一个4G modem, 外观同这个 http://vonger.cn/?p=14785

在openwrt上没有成功,USB设备驱动无法被识别, 在笔记本 Ubuntu上成功使用,脚本(参考了这里https://github.com/gartfr/QualcommLTE)

使用如下脚本启动成功

#!/bin/bash

if [ ! "$(lsusb -d '161c:f010')" ]; then printf "usb not plugged\n" ; fi

# switch from mass storage to modem devices
sudo usb_modeswitch -v 161c -p f010 -W -M 55534243123456780000000000000606f50402527000000000000000000000

sudo modprobe qmi_wwan
sudo bash -c 'echo "161c f101" > /sys/bus/usb/drivers/qmi_wwan/new_id'

sleep 2

BUS_ID=$(lsusb -d '161c:f101' | cut -d ' ' -f2 | tr -d 0)

export FIRST_PORT_ID=$(ls  /sys/bus/usb/drivers/qmi_wwan/ | grep "${BUS_ID}-*.0")
export SECOND_PORT_ID=$(ls  /sys/bus/usb/drivers/qmi_wwan/ | grep "${BUS_ID}-*.1")
    
# 这里usb ID通过dmesg或`lsusb -t`查看, 先禁用在启用1.1是因为默认无法正确加载驱动
sudo bash -c "echo '${FIRST_PORT_ID}' > /sys/bus/usb/drivers/qmi_wwan/unbind"
sudo bash -c "echo '${SECOND_PORT_ID}' > /sys/bus/usb/drivers/qmi_wwan/unbind"

sleep 1
sudo bash -c "echo '${SECOND_PORT_ID}' > /sys/bus/usb/drivers/qmi_wwan/bind"

sleep 1

sudo modprobe option
sudo bash -c "echo '161c f101' > /sys/bus/usb-serial/drivers/option1/new_id"

# mmcli --list-modems

# sudo ip route delete default
# sudo ip route add default dev ppp0

该类型设备一般自带windows驱动程序,插上自动安装就可以使用。但是在linux下需要适配驱动,也需要将usb设备从cd-rom模式切换为LTE。 拆开后,发现4G通信模块芯片为Qualcomm MDM9215。通过windows下驱动设备的状态可以识别到切换为LTE的product id 为f101

谷歌搜索后获取到这个设备的modem切换信息 https://github.com/NetworkManager/usb_modeswitch-data/blob/master/usb_modeswitch.d/1c9e:f010 (message信息从这里获取的)

然后尝试使用qmi_wwan驱动后,成功了。

注意,启动失败后需要清理环境。杀死所有子进程,否则再次启动拨号会失败。

参考