愿你有清风与烈酒,愿有人是你的归途。
主机操作系统:Centos 6.7
交叉编译器环境:arm-linux-gcc-4.5.4 (可通过命令/opt/buildroot-2012.08/arm920t/usr/bin/arm-linux-gcc -v查询)
开发板平台: fl2440
Linux内核版本: linux-3.0 .54
模块:sim5360e
该模块支持WCDMA/GSM,即联通2G/3G,移动2G。本文用的是联通卡,移动卡因为不支持3G,所以对于本模块来说,在信号较差的地方很难拨号成功。
- 联通2G网络制式是GSM制式,GSM制式是目前全球范围内应用最广的2G制式,超过80%的运营商的2G网络选择GSM制式。
- 联通3G网络制式为WCDMA,WCDMAM制式是目前全球范围内应用最广的3G制式,超过80%的运营商的3G网络选择WCDMA制式。
- 移动的2G网络也是GSM,不过移动的3G网络制式是TD-SCDMA,TD-SCDMA制式的3G网络目前全世界就移动一家运营商在用。
- 电信的2G制式是CDMA,在美洲和日韩地区比较受欢迎,电信的3G制式是CDMA2000,这个制式也是在美洲比较受欢迎。
一、配置内核:
添加USB支持:
Device Drivers --->
[*] USB support --->
<*> USB Serial Converter support --->
<*> USB driver for GSM and CDMA modems
添加PPP相关支持:
Device Drivers --->
[*] Network device support --->
<*> PPP (point-to-point protocol) support
[*]PPP multilink support (EXPERIMENTAL)
[*]PPP filtering
<*>PPP support for async serial ports
<*>PPP support for sync tty ports
<*>PPP Deflate compression
<*>PPP BSD-Compress compression
配置成功后,将内核下载到开发板,插上模块打印如下信息:
二、移植pppd以及chat
1、下载解压软件包,并生成Makefile
[yangni@yangni 3G]$ wget https://coding.net/u/sfantree/p/OSS2/git/raw/master/source/ppp-2.4.5.tar.gz
[yangni@yangni 3G]$ tar zxvf ppp-2.4.5.tar.gz
[yangni@yangni 3G]$ cd ppp-2.4.5
[yangni@yangni ppp-2.4.5]$ ./configure //生成Makefile
2、配置chat:
(1)修改chat.c
[yangni@yangni ppp-2.4.5]$cd chat
[yangni@yangni chat]$ vim chat.c
添加如下两行:
(2)修改Makefile
Makefile的修改只需要添加自己交叉编译器路径就可以了。
[yangni@yangni chat]$ vim Makefile
3、配置PPP
(1)修改auth.c
找到相应的行,把它注释掉:
[yangni@yangni chat]$ cd ../pppd
[yangni@yangni pppd]$ vim auth.c
(2)修改Makefile
同样的只需要将gcc改为交叉编译器的gcc
[yangni@yangni pppd]$ vim Makefile
4、make生成pppd和chat工具:
[yangni@yangni pppd]$ cd ..
[yangni@yangni ppp-2.4.5]$ make
然后将pppd以及chat拷贝到开发板usr/sbin或者/bin目录下。
三、连接开发板并写拨号相关文件:
1、查看接口:
用ls命令可以看到/dev目录下多了五个串口设备分别为ttyUSB0,ttyUSB1,ttyUSB2,ttyUSB3,ttyUSB4。并且可以看到ttyUSB2作为AT命令的接口,所以接下来我们使用AT命令测试3G模块是否正常工作的时候只能监听ttyUSB2。
> ls dev/ttyUSB*
dev/ttyUSB0 dev/ttyUSB1 dev/ttyUSB2 dev/ttyUSB3 dev/ttyUSB4
2、用microcom测试:
首先我们需要先查看我们的卡是否装好以及是否有信号(ttyUSB2是AT命令接口)。
microcom -s 115200 ttyUSB2
信号为2,有点弱。可以试试拨号看看。
其他常用指令:
a 重复上次命令
ate0 关闭回显
ate1 开启回显
at+cgmm 可查看模块名
at+cgmr 可查看模块版本信息
at+cgmi 可查看模块制造商
at+csq 可查看信号强度
at+cpin? 查看SIM卡是否到位
at+creg? 查看SIM卡是否注册上,网络注册的情况。(注册上后才可以拨号)
at+cops? 查看SIM卡运营商
3、ppp拨号获取IP:
在开发板的/etc目录新建/ppp/peers目录并在peers目录下创建如下两个配置文件
(1)创建wcdma文件
>mkdir -p /etc/ppp/peers
>cd /etc/ppp/peers
>vi wcdma
#set debug ,send message to /var/log/messages
debug #输出调试信息
#To keep pppd on the terminal
nodetach #默认为后台运行,禁止后台运行
lock #创建一个锁定文件,其他程序在发现存在这个文件后,就能得知相应的串口已经被使用
#set seriral
/dev/ttyUSB3
# set baudrate
115200
user "yangni" #如果需要chap或pap认证,则输入该用户名和密码
password "qicheng777"
# set flowrate
crtscts #接口带硬件流控
show-password
usepeerdns
noauth #不设置认证
noipdefault #禁用默认IP
novj #禁用TCP压缩
novjccomp
noccp
# Accept the peer's idea of our local IP address
ipcp-accept-local #选定该选项, pppd 将接受拨入方提供的ip地址
# 选定该选项, pppd 将接受拨入方自己的ip地址
ipcp-accept-remote
connect '/usr/sbin/chat -s -v -f /etc/ppp/peers/wcdma-chat-connect'
disconnect '/usr/sbin/chat -s -v -f /etc/ppp/peers/wcdma-chat-disconnect'
如果没有给定本地ip, pppd 将使用主机的第一个ip地址; 如果指定了”noipdefault” 选项, pppd将使用拨入方提供的ip地址
connect 加上参数-v 告诉 chat命令将其所有的输出/入拷贝到系统记录里(通常是 /var/log/messages)。
(2)创建wcdma-chat-connect 脚本:AT指令的发送和接收脚本
>cd /etc/ppp/peers
vi wcdma-chat-connect
ABORT 'NO CARRIER'
ABORT 'ERROR'
ABORT 'NO DIALTONE'
ABORT 'BUSY'
ABORT 'NO ANSWER'
'' \rAT #发送AT命令
OK \rATZ #等待接收OK,接收到OK发送ATZ命令
OK \rAT+CGDCONT=1,"IP","3gnet",,0,0#接收到OK,发送AT+CGDCONT=1...命令
#下面一行是联通的拨号设置,不同的运营商拨号方式有所不同
OK-AT-OK ATDT*99# #拨号
CONNECT \d\c
(3)出错处理wcdma-chat-disconnect 脚本
vi wcdma-chat-disconnect
ABORT "ERROR"
ABORT "NO DIALTONE"
SAY "\nSending break to the modem\n"
'' "\K"
'' "+++ATH"
SAY "\nGoodbay\n"
所以peers该目录下应该有三个文件:
>cd /etc/ppp/peers
>ls
- wcdma-chat-connect
- wcdma
- wcdma-chat-disconnect
四、拨号上网:
>pppd call wcdma&
出现上面原因是因为信号太弱了。然后插上GPRS天线后,信号加强了很多。因为实验室本身这里信号不好,移动卡更是GG,信号有了也不行,所以你要先保证你的卡在当前环境能上网,所以换了张联通的。
换了张联通卡,接上GPRS天线后:
再来一次:
>pppd call wcdma&
看到获取到IP以后就是拨号成功了,然后会在出现一个ppp0的网络接口
>ifconfig
配置好默认网关就可以连网了:
>route add default gw 10.64.64.64 #配置默认网关
ping一下DNS
>ping 114.114.114.114
但现在还不能做域名解析,还要做DNS相关配置。
>vi /etc/resolv.conf
nameserver 114.114.114.114
nameserver 8.8.8.8
> mv /etc/resolv.conf /etc/resolv.conf.bak
> ln -s /etc/ppp/resolv.conf /etc/resolv.conf #建立一个软链接,链接到全局DNS
> ping qq.com #现在可以成功解析出域名了
参考文章:http://blog.csdn.net/edroid1530/article/details/72903229
http://blog.csdn.net/baweiyaoji/article/details/72810410