fl2440添加SIM5900B GPRS模块,进行拨号上网,打电话。
开发板 :fl2440
CPU : s3c2440
linux内核:linux-3.0
开发模块:GPRS(SIM900B)(华为公司)
SIM:移动卡
一,硬件连接打开GPS及测试
我使用的USB转串口线上的芯片是cp210的,所以在内核配置的时候,必须把这个支持选上,否则,开发板不识别。
- make menuconfig
- Device Drivers->
- [*]USB support ->
- [*]USB Serial Converter supportUSB CP210x family of UART Bridge Controllers
make编译之后重新烧录进开发板,或者选择M,进行模块化编译,再在drivers/usb/serial/cp210x.ko下,找到cp210x.ko文件,tftp -gr cp210x.ko (host机ip地址)下载到开发板进行insmod安装,但是此方法每次开机时都需要重新装,比较麻烦,可以修改/etc/init.d/rcs的内容,
再对该文件进行source,使之生效,则可每次开机自动insmod驱动。
安装驱动之后,插上USB转串口设备,开发板上/dev/目录下出现ttyUSB0设备,说明识别成功。
>:ls /dev/ttyUSB*
/dev/ttyUSB0
>:
由于SIM900B出来的信号时RS-232信号,把usb转串口设备拨到RS-232,连接两设备。
2.ppp移植
PPP(点到点协议)是为在同等单元之间传输数据包这样的简单链路设计的链路层协议。这种链路提供全双工操作,并按照顺序传递数据包。
点对点协议(PPP)为在点对点连接上传输多协议数据包提供了一个标准方法。
ppp下载,安装,移植,过程如下:
- [[email protected] tftp]$ cd 3G/
- [[email protected] 3G]$wget https://coding.net/u/sfantree/p/OSS2/git/raw/master/source/ppp-2.4.5.tar.gz
- [[email protected] 3G]$ cd ppp-2.4.5
- [[email protected] ppp-2.4.5]$ ./configure
- [[email protected] ppp-2.4.5]$ cd chat/
- [[email protected] chat]$ vim chat.c
- 1168 if (timeout_next) {
- 1169 timeout_next = 0;
- 1170 s=clean(s,0); /*Add by zy*/
- 1171 timeout = atoi(s);
- 1172 free(s);/*Add by zy*/
- 1173 if (timeout <= 0)
- 1174 timeout = DEFAULT_CHAT_TIMEOUT;
- 1175
- 1176 if (verbose)
- 1177 msgf("timeout set to %d seconds", timeout);
- 1178
- 1179 return;
- 1180 }
-
- 16 INSTALL= install
- 17 CC=/opt/buildroot-2012.08/arm920t/usr/bin/arm-linux-gcc #add by zy
- 18
- 19 all: chat
- 20
- 21 chat: chat.o
- 22 $(CC) -static -o chat chat.o #Add zy
- 23 $(CC) -o chat chat.o
[[email protected] pppd]$ vim auth.c
- 1326 /*Modify by zy */
- 1327 ao->neg_upap = !refuse_pap; //&& (passwd[0] != 0 || get_pap_passwd(NULL));
- 1328 ao->neg_chap = (!refuse_chap || !refuse_mschap || !refuse_mschap_v2)
- 33 CC = /opt/buildroot-2012.08/arm920t/usr/bin/arm-linux-gcc #add by zy
- 46 #MPPE=y #modify by zy
- 51 #FILTER=y #modify by zy
- 56 #HAVE_MULTILINK=y #modify by zy
- 68 #PLUGIN=y #modify by zy
[[email protected] ppp-2.4.5]$ cd chat/
[[email protected] chat]$ ls
chat chat.8
chat.c chat.o Makefile Makefile.linux Makefile.sol2
[[email protected] chat]$ file chat
chat:ELF 32-bit LSB executable, ARM, version 1 (SYSV), dynamically linked (uses shared libs), not stripped
[[email protected] chat]$ cd ../pppd
[[email protected] pppd]$ file pppd
pppd: ELF 32-bit LSB executable, ARM, version 1 (SYSV), dynamically linked (uses shared libs), not stripped
把chat和pppd下载到开发板的/usr/sbin中,并给予777权限
3.编写脚本
开发板上操作:
>: mkdir -p /etc/ppp/peers
>: cd etc/ppp/peers/
>: pwd/etc/ppp/peers
3.1.编写全局配置文件
>: vi wcdma
- #set debug ,send message to /var/log/messages
- debug
- #To keep pppd on the terminal
- nodetach
- lock
- #set serial
- /dev/ttyUSB0
- # set baudrate
- 115200
- user "zhangyan" //拨号时用不上用户名和密码,可有可无
- password "zhangyan"
- # set flowrate
- nocrtscts //流控,SIM900B没有添加流控,因此不可以要crtscts。 流控类似于一种信息发送前的申请机制,开发板向GPRS申请传递AT,GPRS传递允许信息,然后开发板才能再传递信息。我使用的GPRS不含流控,因此运行时会死掉,因为接收不到GPRS传递回的信息,所以不能有流控,这是我的理解。具体信息https://zhidao.baidu.com/question/512829787.html
- show-password
- usepeerdns
- noauth
- noipdefault
- novj
- novjccomp
- noccp
- # Accept the peer's idea of our local IP address
- ipcp-accept-local
- # ipcp-accept-remote
- 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'
3.2.编写拨号脚本:
>: vi wcdma-chat-connect
- ABORT 'NO CARRIER' //这5行是终止信号,当硬件遇到各种原因无法进行时,报这五种错,比如在
- ABORT 'ERROR' //在打电话时做别的操作,可能报busy
- ABORT 'NO DIALTONE'
- ABORT 'BUSY'
- ABORT 'NO ANSWER'
- '' \rAT // 开发板不接受任何信息,直接传递AT,接收到GPRS的OK回来,再发OK
- OK \rATZ //具体写的格式,查询chat 脚本语法
- #移动2g接入点:cmnet //移动接入点
- OK \rAT+CGDCONT=1,"IP","cmnet",,0,0
- #这里要注意是哪个运营商,拨号号码是不同的。如此处的是联通的拨号设置
- OK-AT-OK ATDT*99***1# //上网拨号码
- CONNECT \d\c
>: vi wcdma-chat-disconnect
- ABORT "ERROR"
- ABORT "NO DIALTONE"
- SAY "\nSending break to the modem\n"
- '' "\K"
- '' "+++ATH"
- SAY "\nGoodbay\n"
查看三个文件:
>: pwd/etc/ppp/peers
:ls
wcdmawcdma-chat-connect
wcdma-chat-disconnect
*********************************************************************************************************************
注意:pppd调用chat会话进程接入对端isp,启动对端的pppd,然后本地pppd与对端的pppd一起进行协商网络参数和chap/pap认证,
成功后,再进行ncp层的ip的分配。
***********************************************************************************************************
4.拨号
*****************************************************************************************************************
注意:在拨号之前一定要先检测SIM卡是否准备好,microcom命令串口调试,查看AT命令是否有OK回显。这一步至关重要!!!
查询at命令可以浏览https://wenku.baidu.com/view/55049944b307e87101f69623.html ;http://www.cnblogs.com/yuweifeng/p/5587473.html
********************************************************************************************************************at+cpin?是否有SIM卡,at+csq,检测信号,数字越高越好,at+cops?哪个运营商,(atdt电话号码;)拨号打电话。
拨号命令:>:pppdcall wcdma& (&进入后台执行)
此时拨号成功,生成了一个ppp0网卡就是GPRS网卡
>:
route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
192.168.2.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
192.200.1.21 0.0.0.0 255.255.255.255 UH 0 0 0 ppp0
此时没有网关,没法连接外网。
要把ppp0的ip地址设为网关
>:route add default 192.200.1.21 //添加默认网关
这时候直接上外网是不行的,还没有设置DNS,这就需要设置DNS。
- >:vi /etc/ppp/resolv.conf
- nameserver 4.2.2.2 //改为这两个DNS
- nameserver 114.114.114.114
- >: ln -s /etc/ppp/resolv.conf /etc/resolv.conf
- //建立一个软链接,链接到全局DNS才能访问。