4G模块SIMCOM7100 LTE在ARM Linux下使用PPPD上网

尝试了网上其他人的方法,没有成功,最终自己看文档搞定了,希望写下来方便其他人,节省时间。

材料

  1. 4G硬件: SIM7100-PCIE-EVB_V1.01
  2. HostPC: Linux hexiongjun-pc 3.13.0-86-generic #131~precise1-Ubuntu SMP Fri May 13 19:43:06 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux
  3. ARM Linux版本: Linux 4.5.3
  4. ARM SoC: TI AM335X Cortex-A8 与 Freescale i.MX6 Cortex-A9


内核配置

因为是自己和同事一起移植内核所以选择了最新的稳定版Linux 4.5.3,内核中已经支持,只需要选择对应的配置选项即可。

然后插上就可以看到设备了:

Bus 002 Device 011: ID 1e0e:9001 Qualcomm / Option
同时生成了多个ttyUSB设备:

$ ls /dev/ttyUSB* -l
crw-rw---- 1 root dialout 188, 0 May 21 22:59 /dev/ttyUSB0
crw-rw---- 1 root dialout 188, 1 May 22 11:48 /dev/ttyUSB1
crw-rw---- 1 root dialout 188, 2 May 22 11:48 /dev/ttyUSB2
crw-rw---- 1 root dialout 188, 3 May 22 11:48 /dev/ttyUSB3
crw-rw---- 1 root dialout 188, 4 May 22 11:48 /dev/ttyUSB4
crw-rw---- 1 root dialout 188, 5 May 22 11:48 /dev/ttyUSB5

需要特别注意的是,要将USB转串口的USB_SERIAL 模块干掉,否则会有冲突。

用户态准备

编译PPPD,并安装到ARM Linux下面,关于如何编译PPPD可以查看我的Yocto Tips系列专栏,使用Build System快速解决。

PPPD配置

PPPD的配置其实就是告诉PPPD如何去发AT命令与4G模块交互,然后根据4G模块的回应,虚拟出一个网络设备,然后就可以按照访问普通设备网卡设备一样使用了。

连接

PPPD去操控硬件模块的第一步是让4G模块与GSM运营商Connection

这一步的配置内容如下:

#Chat script for China Mobile, used SIMCOM sim7100 LTE module.
TIMEOUT 15
ABORT "DELAYED"
ABORT "BUSY"
ABORT "ERROR"
ABORT "NO DIALTONE"
ABORT "NO CARRIER"
TIMEOUT 40
'' \rAT
OK at+cpin?
OK at+csq
OK at+cops?
OK at+cgatt?
OK AT+cgdcont=1,"IP","CMNET"
OK ATD*99***1#
CONNECT

我稍微解释一下,这个配置分为三个部分:

1. 配置异常退出与Timeout参数

这部分完成的是基本的设置,让PPPD知道当4G模块返回哪些string value的时候abort

2. 使用AT命令一步步完成连接

例如”OK at+cpin?“这一句的意思是,如果上一句AT命令发送出去后得到的值是OK,那么我们继续发送"at+cpin?"这个字符串,如果TIMEOUT(40S)了,那么就退出。

3. 完成连接

如果最后收到了CONNECT,那么就表示连接完成。


将这个配置命名为gprs-connect-chat,然后放置到/etc/ppp下面即可。


配置拨号与AT端口

我们前面有了该发送哪些AT命令到4G模块,但是还需要告诉PPPD使用哪个端口去发送,使用上面波特率等信息,即硬件接口,这个我们如下配置:

/dev/ttyUSB2
115200
crtscts
modem
debug
nodetach
usepeerdns
noipdefault
defaultroute
user "cmnet"
0.0.0.0:0.0.0.0
connect '/usr/sbin/chat -s -v -f /etc/ppp/gprs-connect-chat'


显然这里面用到了ttyUSB2,设置拨号连接时候的各种硬件参数,以及user,最后指定了前面的与AT配置文件。

我们将这个文件命名为gprsdial放在/etc/ppp中即可。

拨号上网

直接使用pppd file /etc/ppp/gprsdial 即可拨号上网了。
但是会有DNS问题,网上几乎都是使用手动配置DNS的方式,这个显然不好,以后博客中再说明一下如何自动解决这个问题。

问题

这个模块带有GPS功能,然后可以完成AGPS与SGPS,同时使用PPPD来拨号上网其实并不好,如果系统中有多种网络设备,并需要设定优先级与短线检测的话,以后再说明一些这些问题的解决。

你可能感兴趣的:(EmbeddedSystem)