fl2440模块学习——3G拨号上网

18 篇文章 1 订阅
7 篇文章 0 订阅

本篇学习在fl2440开发板上添加3G无线拨号上网模块,实现上网。
所使用的3G模块为:SIMCOM的 SIM5360E,可以支持WCDMA/GSM,即联通2G/3G,移动2G。测试用的是联通卡。
先了解一下:
WCDMA 是英文Wideband Code Division Multiple Access(宽带码分多址)的英文简称,是一种第三代无线通讯技术。目前是由国内的联通在做;
GSM(Global System For Mobile Communication)全球移动通信,采用蜂窝网络技术,可以支持移动和联通的2G手机制式;
TD-SCDMA,即:Time Division-Synchronous Code Division Multiple Access(时分同步的码分多址技术),是移动的3G制式。
常见网络制式参考资料:https://wenku.baidu.com/view/f430b28c551810a6f52486a0.html

一、内核配置

1.代码修改:
在内核目录下,进入:drivers/usb/serial/option.c 无线上网卡的驱动代码都在这。
添加下面这段代码,使得能识别我们的3G模块。
637 { USB_DEVICE(QUALCOMM_VENDOR_ID, 0x9000)}, /* add by tangbin ,simCom SIM5218 */
驱动模块是与SIM5218一样的,其中0x9000是设备ID。

2.内核选项:
配置3G模块驱动支持:

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

make之后烧录到开发板,如果3G模块已经插上,此时内核打印信息:
这里写图片描述
同时查看/dev/ttyUSB*:

>: ls dev/ttyUSB*
dev/ttyUSB0  dev/ttyUSB1  dev/ttyUSB2  dev/ttyUSB3  dev/ttyUSB4

此时就说明正确识别了SIM5360E模块并加载成功了。

二、移植ppp

这里是在PC操作:
下载并解压:

[tangbin@localhost 3g]$ wget https://coding.net/u/sfantree/p/OSS2/git/raw/master/source/ppp-2.4.5.tar.gz
[tangbin@localhost 3g]$ tar zxvf ppp-2.4.5.tar.gz
[tangbin@localhost 3g]$ cd ppp-2.4.5
[tangbin@localhost ppp-2.4.5]$ ./configure
[tangbin@localhost ppp-2.4.5]$ cd chat/
[tangbin@localhost chat]$ vim chat.c
…… ……
1168     if (timeout_next) {
1169     timeout_next = 0;
1170     s = clean(s, 0); /* Add by tangbin */
1171     timeout = atoi(s);
1172     free(s); /* Add by tangbin  */
1173 
1174     if (timeout <= 0)
1175         timeout = DEFAULT_CHAT_TIMEOUT;
…… ……
[tangbin@localhost chat]$ vim Makefile
 16 INSTALL= install
 17 CC=/opt/buildroot-2012.08/arm920t/usr/bin/arm-linux-gcc     #add by tangbin
 18 
 19 all:    chat
 20 
 21 chat:   chat.o
 22     $(CC) -static -o chat chat.o    #add by tangbin
 23     $(CC) -o chat chat.o
[tangbin@localhost chat]$ cd ../pppd
[tangbin@localhost pppd]$ vim auth.c
1323     int hadchap;
1324 
1325     hadchap = -1;
1326     /* Modify by tangbin */
1327     ao->neg_upap = !refuse_pap; // && (passwd[0] != 0 || get_pap_passwd(NULL));
1328     ao->neg_chap = (!refuse_chap || !refuse_mschap || !refuse_mschap_v2)
1329     && (passwd[0] != 0 ||
1330         (hadchap = have_chap_secret(user, (explicit_remote? remote_name:
1331                            NULL), 0, NULL)));

找到对应或相近的行数:

[tangbin@localhost pppd]$ vim Makefile
 33 CC = /opt/buildroot-2012.08/arm920t/usr/bin/arm-linux-gcc  #add by tangbin
 46 #MPPE=y   #modify by tangbin
 51 #FILTER=y   #modify by tangbin
 56 #HAVE_MULTILINK=y   #modify by tangbin
 68 #PLUGIN=y   #modify by tangbin

[tangbin@localhost pppd]$ cd ..
[tangbin@localhost ppp-2.4.5]$ make
[tangbin@localhost ppp-2.4.5]$ cd chat/
[tangbin@localhost chat]$ ls
chat  chat.8  chat.c  chat.o  Makefile  Makefile.linux  Makefile.sol2
[tangbin@localhost chat]$ file chat
chat: ELF 32-bit LSB executable, ARM, version 1 (SYSV), dynamically linked (uses shared libs), not stripped
[tangbin@localhost chat]$ cd ../pppd
[tangbin@localhost 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权限。

三、编写脚本

这里是在开发板上操作:
在此之前请先确认所使用的串口是正常的,使用microcom命令检测 AT是否正常返回ok。

>: mkdir -p /etc/ppp/peers
>: cd etc/ppp/peers/
>: pwd
/etc/ppp/peers
编写全局配置文件,它的作用是给pppd进程提供配置参数:
>: vi wcdma
#Copyright (c) 2017 tangbin
#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 "tangbin"
password "tangbin"
# set flowrate
crtscts
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'
编写拨号脚本:
>: vi wcdma-chat-connect 
ABORT 'NO CARRIER'
ABORT 'ERROR'
ABORT 'NO DIALTONE'
ABORT 'BUSY'
ABORT 'NO ANSWER'
'' \rAT
OK \rATZ
#联通3g接入点:3gnet
OK \rAT+CGDCONT=1,"IP","3gnet",,0,0
#这里要注意是哪个运营商,拨号号码是不同的。如此处的是联通的拨号设置
OK-AT-OK ATDT*99#
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
wcdma                  wcdma-chat-connect     wcdma-chat-disconnect

关于pppd更多的信息可以查看帮助手册:man pppd。

pppd调用chat会话进程接入对端isp,启动对端的pppd,然后本地pppd与对端的pppd一起进行协商网络参数和chap/pap认证,成功后,再进行ncp层的ip的分配。

四、拨号

>: pppd call wcdma& 

(加上&符号主要是因为拨号成功后,程序会一直执行不退出,所以采用后台运行的方式执行,假如有多个3G卡可能就会产生多个ttyUSB*的设备文件,同时会需要多个wcdma文件此时可以采用pppd call wcdma1来为3G模块1进行ppp拨号),pppd call wcdma是作用是建立协议,并生成网络接口ppp0。)

拨号成功会打印:

abort on (NO CARRIER)
abort on (ERROR)
abort on (NO DIALTONE)
abort on (BUSY)
abort on (NO ANSWER)
send (^MAT^M)
expect (OK)
AT^M^M
OK
 -- got it

send (^MATZ^M)
expect (OK)
^M
ATZ^M^M
OK
 -- got it

send (^MAT+CGDCONT=1,"IP","3gnet",,0,0^M)
expect (OK)
^M
AT+CGDCONT=1,"IP","3gnet",,0,0^M^M
OK
 -- got it

send (ATDT*99#^M)
expect (CONNECT)
^M
ATDT*99#^M^M
CONNECT
 -- got it

send (\d)
Script /usr/sbin/chat -s -v -f /etc/ppp/peers/wcdma-chat-connect finished (pid 918), status = 0x0
Serial connection established.
using channel 1
Using interface ppp0
Connect: ppp0 <--> /dev/ttyUSB3
sent [LCP ConfReq id=0x1 <asyncmap 0x0> <magic 0xc5a5dfac> <pcomp> <accomp>]
rcvd [LCP ConfReq id=0x0 <asyncmap 0x0> <auth chap MD5> <magic 0x2e5e272> <pcomp> <accomp>]
sent [LCP ConfAck id=0x0 <asyncmap 0x0> <auth chap MD5> <magic 0x2e5e272> <pcomp> <accomp>]
rcvd [LCP ConfAck id=0x1 <asyncmap 0x0> <magic 0xc5a5dfac> <pcomp> <accomp>]
rcvd [LCP DiscReq id=0x1 magic=0x2e5e272]
rcvd [CHAP Challenge id=0x1 <5abe4df380830c7588848d88c242f802>, name = "UMTS_CHAP_SRVR"]
sent [CHAP Response id=0x1 <9051a8d35324d9b659159d1f004cfa23>, name = "card"]
rcvd [CHAP Success id=0x1 ""]
CHAP authentication succeeded
CHAP authentication succeeded
sent [IPCP ConfReq id=0x1 <addr 0.0.0.0> <ms-dns1 0.0.0.0> <ms-dns2 0.0.0.0>]
rcvd [proto=0x3] 01 00 04
Unsupported protocol 0x3 received
sent [LCP ProtRej id=0x2 00 03 01 00 04]
sent [IPCP ConfReq id=0x1 <addr 0.0.0.0> <ms-dns1 0.0.0.0> <ms-dns2 0.0.0.0>]
rcvd [IPCP ConfReq id=0x0]
sent [IPCP ConfNak id=0x0 <addr 0.0.0.0>]
rcvd [IPCP ConfNak id=0x1 <addr 10.36.97.243> <ms-dns1 218.104.111.114> <ms-dns2 218.104.111.122>]
sent [IPCP ConfReq id=0x2 <addr 10.36.97.243> <ms-dns1 218.104.111.114> <ms-dns2 218.104.111.122>]
rcvd [IPCP ConfReq id=0x1]
sent [IPCP ConfAck id=0x1]
rcvd [IPCP ConfAck id=0x2 <addr 10.36.97.243> <ms-dns1 218.104.111.114> <ms-dns2 218.104.111.122>]
Could not determine remote IP address: defaulting to 10.64.64.64
local  IP address 10.36.97.243
remote IP address 10.64.64.64
primary   DNS address 218.104.111.114
secondary DNS address 218.104.111.122

看到分配完IP即为拨号成功,并且ifconfig下会添加ppp0接口。
ping一下DNS:

>:  ping 4.2.2.2
PING 4.2.2.2 (4.2.2.2): 56 data bytes
64 bytes from 4.2.2.2: seq=1 ttl=53 time=1128.902 ms
64 bytes from 4.2.2.2: seq=0 ttl=53 time=2247.780 ms
64 bytes from 4.2.2.2: seq=2 ttl=53 time=291.597 ms
64 bytes from 4.2.2.2: seq=3 ttl=53 time=287.548 ms
64 bytes from 4.2.2.2: seq=4 ttl=53 time=261.569 ms

--- 4.2.2.2 ping statistics ---
5 packets transmitted, 5 packets received, 0% packet loss
round-trip min/avg/max = 261.569/843.479/2247.780 ms

接下来还要设置一下DNS,否则ping不到外网:

>:vi /etc/resolv.conf 
nameserver 4.2.2.2 
nameserver 8.8.8.8
>: mv /etc/resolv.conf /etc/resolv.conf.bak
>: ln -s /etc/ppp/resolv.conf /etc/resolv.conf
//建立一个软链接,链接到全局DNS才能访问。

添加默认网关:route add default gw 10.64.64.64
ping测试:

>: ping www.qq.com
PING www.qq.com (77.67.85.35): 56 data bytes
64 bytes from 77.67.85.35: seq=0 ttl=53 time=687.806 ms
64 bytes from 77.67.85.35: seq=1 ttl=53 time=650.585 ms
64 bytes from 77.67.85.35: seq=2 ttl=53 time=663.609 ms
64 bytes from 77.67.85.35: seq=3 ttl=53 time=638.575 ms
64 bytes from 77.67.85.35: seq=4 ttl=53 time=661.572 ms
64 bytes from 77.67.85.35: seq=5 ttl=53 time=679.573 ms

--- www.qq.com ping statistics ---
6 packets transmitted, 6 packets received, 0% packet loss
round-trip min/avg/max = 638.575/663.620/687.806 ms

(信号较差,感人!!)
如果信号太差,会出现一直拿不到IP和DNS:
这里写图片描述
这时可以加一根GSM/GPRS天线并拿到室外改善一下质量。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值