为了方便查看博客,特意申请了一个公众号,附上二维码,有兴趣的朋友可以关注,和我一起讨论学习,一起享受技术,一起成长。
一、实验目的:
实现4G模块sim7100在Linux系统上的拨号上网。
二、实验平台:
开发板:迅为4412精英版;4G模块:SIM7100开发板。SIM7100C带有USB口和串口,考虑速率等问题,采用USB接口与开发板相连接。我的4412开发板运行的是Linux最小系统,我们需要向内核添加4G模块的驱动与PPP协议支持,然后在编译内核下载到开发板。
三、实验流程
1、内核配置:源码目录,通过mkae menuconfig进入配置。
(1)大容量存储驱动
Device Drivers > USB support
make ARCH=arm menuconfig配置USB驱动:
<*> USB Mass Storage support
[*] USB Mass Storage verbose debug
<*> Realtek Card Reader support
[*] Realtek Card Reader autosuspend support
<*> Datafab Compact Flash Reader support
(2)USB驱动
Device Drivers > USB support
<*> Inventra Highspeed Dual Role Controller (TI, ADI, …)
MUSB Mode Selection (Dual Role mode) ---> <*> Platform Glue Layer (TI DSPS platforms) ---> MUSB DMA mode (Disable DMA (always use PIO)) --->
<*> USB Serial Converter support —>
[*] USBGeneric Serial Driver
<*> USBdriver for GSM and CDMA modems
(3)PPP驱动
Device Drivers > Network device support
<*> PPP (point-to-point protocol) support
<*> PPP BSD-Compress compression <*> PPP Deflate compression [*] PPP filtering <*> PPP MPPE compression (encryption) [*] PPP multilink support <*> PPP over Ethernet <*> PPP support for async serial ports <*> PPP support for sync tty ports
<*> SLIP (serial line) support
[*] CSLIP compressed headers
全部添加进入内核后,使用make编译,编译出来的zImage烧写到开发板。(注:zImage目录:源码的arch/arm/boot/目录下)
2、交叉编译libusb
这部分为提供USB支持,这一部分我是参考下面的连接:
[libusb交叉编译] (http://www.linuxidc.com/Linux/2016-03/129581.htm)
编译成功后,将生成的libusb-1.0.20和libusb-compat-0.1.5下的库文件(lib下的文件)复制到ARM板上的linux的/lib下面即可。(我这里是最小系统下的lib下如下图:(可以直接复制过去;也可以通过先放到最小系统的lib下,直接压缩到system.ing文件中,再下载到板子上)
3、交叉编译4G模块驱动:Gobiserial.ko
我觉得这个驱动是很重要的,厂家提供的资料里竟然没有。最终在谷歌上找到了。亲测可用[下载连接]
(http://www.reyax.com/httpdocs/index.files/4G_Module.htm)
具体的操作为:将压缩包复制到ubuntu下,解压,
进入到Gobiserial文件夹,把Makefile文件的源码目录替换为我们自己的(编我直接使用的是编译驱动写的),然后make
就可以得到驱动文件Gobiserial.ko文件
将此.ko文件拷贝到U盘或者开发板上均可。至此驱动方面的工作就完毕了!!!
4、加载驱动
我将Gobiserial.ko文件复制到了开发板的/bin/目录下
通过加载驱动的命令:insmod Gobiserial.ko 将驱动插入到内核中
查看此模块是否成功插入:lsmod
成功插入驱动后;插入4G模块,虚拟出6个ttyUSB,它们分别是:
具体的作用为:
5、交叉编译PPP
这个参考: [PPP编译] (http://www.linuxidc.com/Linux/2016-03/129580.htm)
我下载的是ppp-2.4.7,复制到ubuntu下,解压
编译:
(1)生成Makefile文件(也可直接./configure)
(2)编译(必须使用与开发板一致的编译器,迅为的4412用的是arm-2009q3)
(3)编译命令:
(4)安装:make install (有错,不用管)
(5)将编译出来的脚本复制到ARM开发板上:
按照上面的make好之后,由于make install出错,所以直接在目录中找到如下的四个文件:
chat pppd pppdump pppstats
复制到ARM开发板的/usr/sbin目录下:
(6)建立/etc/ppp目录:
从ppp-2.4.7相应目录中拷贝文件,建立如下目录结构:
注:前两个文件我是从ppp-2.4.7目录下拷贝的,另外的没找到,直接到/etc/ppp目录下复制:
/etc/ppp/chap-secrets
/etc/ppp/pap-secrets
/etc/ppp/ip-up
/etc/ppp/ip-down
/etc/ppp/peers/
拷贝之后放到开发板的对应目录下:如下图所示
至此,ppp编译顺利完成!!!!
(5)拨号脚本设置
(1)a.在/etc/ppp目录下使用 vi gprs-connect-chat 建立文件
内容如下:
#/etc/ppp/gprs-connect-chat
# chat script for China Mobile, used in SIMCOM sim4100 TD module.
TIMEOUT 15
ABORT “DELAYED”
ABORT “BUSY”
ABORT “ERROR”
ABORT “NO DIALTONE”
ABORT “NO CARRIER”
TIMEOUT 40
‘’ \rAT
OK ATS0=0
OK ATE0V1
OK AT+CGDCONT=1,“IP”,“CMNET”
OK AT+CGEQREQ=1,2,128,384,0,
OK ATDT991#
CONNECT
保存之后,退出
(2)进入/etc/ppp/peers/目录:vi gprsdial 建立文件
内容如下:
#/etc/ppp/peers/gprsdial
# This is pppd script for China Mobile, used SIMCOM SIM7100 Module
# Usage: root>pppd call gprs
#Interface which be used is the interface which connects physics interface of SIM7100 Module.
/dev/ttyUSB3
115200
crtscts
modem
#noauth
debug
nodetach
#hide-password
usepeerdns
noipdefault
defaultroute
user “cmnet”
0.0.0.0:0.0.0.0
#ipcp-accept-local
#ipcp-accept-remote
#lcp-echo-failure 12
#lcp-echo-interval 3
#noccp
#novj
#novjccomp
#persist
connect ‘/usr/sbin/chat -s -v -f /etc/ppp/gprs-connect-chat’
#disconnect '/bin/chat -v -f /etc/ppp/gprs-disconnect-chat
拨号的脚本成功完成!!!
*******
(6)进行拨号
超级终端输入:pppd calll gprsdial
现象:出现以下说明拨号成功(未全部列出)
查看模块运行状态:
我们使用:pppd call gprsdial & 将4G模块设置为后台运行,这样的话,有利于我们操作。
输入:ifconfig查看网络:
出现ppp0说明:4G模块确定拨号已经成功了。为了防止与本地的网络冲突,我将开发板上的网线拔掉!!
(7)测试
拨号之后进行测试,通过ping命令来看是否可以ping通IP和域名。
(1)a.ping IP:
出现 “ping: sendto: Network is unreachable”(内心崩溃。。。。。。。。)
解决方法:
[ping 不通ip解决] (http://www.cnblogs.com/embedded-linux/p/5258388.html)
测试是否ping通baidu的IP地址。如果ping不通,需要给本机加条路由,使用如下指令:
#route add default gw 10.212.18.13
注:10.212.18.13:运营商的ip地址,即下图黑色部分。完美解决!
查看IP信息:
(2)ping 域名:
此时可以ping通ip但是无法ping通域名。这需要设置/etc/resolv.conf来添加DNS解析服务器的地址。
解决:
在/etc/resolv.conf 中加入:下面两句,即可成功ping通域名
DNS出现在拨号信息的末尾:
成功ping通百度
至此,4G模块已经成功拨号。。。。。。。。。。。。。。。。。
若要开机自启动拨号:只需设置/etc/init.d/rcS 即可(参照网卡设置)
四、感悟
本人是新手,在移植的过程中遇到了很多的问题,多半是看了网上的文章,然后边学习边弄。如果有不准确的地方,还望大家勿喷,互相学习。从开始学习Linux驱动到现在,也有一段时间了,虽然还很菜,但至少不像开始一样蒙圈了。
五、感谢
在这个过程中,我主要参考了[在ARM Linux上实现4G模块PPP拨号上网] (http://www.linuxidc.com/Linux/2016-03/129581.htm)他的文章,还有一些相关3G模块的移植文章,再次感谢大家!!