fl2440模块学习——3G拨号上网
来源:互联网 发布:菜鸟网络能上市吗? 编辑:程序博客网 时间:2024/06/04 17:50
本篇学习在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.c1323 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]$ lschat chat.8 chat.c chat.o Makefile Makefile.linux Makefile.sol2[tangbin@localhost chat]$ file chatchat: 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 pppdpppd: 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/messagesdebug#To keep pppd on the terminalnodetachlock#set seriral/dev/ttyUSB3# set baudrate115200user "tangbin"password "tangbin"# set flowratecrtsctsshow-passwordusepeerdnsnoauthnoipdefaultnovjnovjccompnoccp# Accept the peer's idea of our local IP addressipcp-accept-local# ipcp-accept-remoteipcp-accept-remoteconnect '/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''' \rATOK \rATZ#联通3g接入点:3gnetOK \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>: lswcdma 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^MOK -- got itsend (^MATZ^M)expect (OK)^MATZ^M^MOK -- got itsend (^MAT+CGDCONT=1,"IP","3gnet",,0,0^M)expect (OK)^MAT+CGDCONT=1,"IP","3gnet",,0,0^M^MOK -- got itsend (ATDT*99#^M)expect (CONNECT)^MATDT*99#^M^MCONNECT -- got itsend (\d)Script /usr/sbin/chat -s -v -f /etc/ppp/peers/wcdma-chat-connect finished (pid 918), status = 0x0Serial connection established.using channel 1Using interface ppp0Connect: ppp0 <--> /dev/ttyUSB3sent [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 succeededCHAP authentication succeededsent [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 04Unsupported protocol 0x3 receivedsent [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.64local IP address 10.36.97.243remote IP address 10.64.64.64primary DNS address 218.104.111.114secondary DNS address 218.104.111.122
看到分配完IP即为拨号成功,并且ifconfig下会添加ppp0接口。
ping一下DNS:
>: ping 4.2.2.2PING 4.2.2.2 (4.2.2.2): 56 data bytes64 bytes from 4.2.2.2: seq=1 ttl=53 time=1128.902 ms64 bytes from 4.2.2.2: seq=0 ttl=53 time=2247.780 ms64 bytes from 4.2.2.2: seq=2 ttl=53 time=291.597 ms64 bytes from 4.2.2.2: seq=3 ttl=53 time=287.548 ms64 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 lossround-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.comPING www.qq.com (77.67.85.35): 56 data bytes64 bytes from 77.67.85.35: seq=0 ttl=53 time=687.806 ms64 bytes from 77.67.85.35: seq=1 ttl=53 time=650.585 ms64 bytes from 77.67.85.35: seq=2 ttl=53 time=663.609 ms64 bytes from 77.67.85.35: seq=3 ttl=53 time=638.575 ms64 bytes from 77.67.85.35: seq=4 ttl=53 time=661.572 ms64 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 lossround-trip min/avg/max = 638.575/663.620/687.806 ms
(信号较差,感人!!)
如果信号太差,会出现一直拿不到IP和DNS:
这时可以加一根GSM/GPRS天线并拿到室外改善一下质量。
- fl2440模块学习——3G拨号上网
- fl2440-3G拨号上网
- 华为3G模块拨号上网
- 3G模块拨号上网设置
- 3G模块SIM5360E实现拨号上网功能
- fl2440模块学习——添加RT3070实现无线上网
- arm9+linux fl2440 GPRS SIM卡 模块 ppp拨号上网
- fl2440添加SIM5900B GPRS模块,进行拨号上网,打电话。
- 移植——linux下使用3G拨号上网
- 3G拨号上网
- sim900芯片—GPRS模块ppp拨号上网
- sim900芯片—GPRS模块ppp拨号上网
- sim900芯片—GPRS模块ppp拨号上网
- FL2440 3G上网卡拨号上网,并实现mdev自动挂载
- FL2440—独立ADC驱动模块
- 3G模块在WinCE系统上拨号上网配置过程描述
- 3G模块拨号上网设置APN,拨号号码,帐号和密码
- linux下实现3G模块收发短信、拨号上网
- LeetCode 34. Search for a Range
- C# 数据类型
- 操作系统(五)存储模型
- 2017-05-30:Unity5.6.1实现联网模式下控制多玩家在场景中的移动
- TFcaiCH3
- fl2440模块学习——3G拨号上网
- <? extends T>和<? super T>
- SpringBoot应用监控
- Codeforces contest 802 problem G
- 解决用php连接本地数据库慢的问题
- HTTP协议
- webservice接口调用
- DXP的使用过程
- 基于LPC2364的串口转网口专用协议卡的研制