初步实现使用pppd连接GPRS上网

转载地址:https://blog.csdn.net/hybruce/article/details/40619843

(写这篇博客的目的为了以后能自己翻阅,也方便大家学习,提出改进意见)

 

背景:先说说移植这玩意的背景吧!公司需要做关于GPRS和S3C2416之间的驱动,便想到了使用现在成熟的PPP协议。目前用的GPRS为四频的SIM900,通过COM1与S3C2416连接,COM0为S3C2416的调试接口。设计硬件时需要注意的是SIM900为LVTTL电平,而S3C2416为TTL电平,通过串口连接时两者之间串连一个510欧姆的电阻即可。

         在接触2416之前,做的毕业设计是利用SIM900A+STM32实现GPRS功能的,所以对GPRS调试有了一定的了解,发现用AT指令来调试GPRS还是有一定的鸡肋,使用成熟的上层协议会事半功倍。

 

基础:首先熟悉Linux基础知识是必须的,其次要对网络知识有一定的了解,不然在涉及到网络编程时很容易遇到基本的问题,DNS,IP,公网,内网等等。我研究过一段时间的网络知识,考了全网网工四级,所以网络方面还是有一定的概念的。在大三到大四期间,也学过很长时间的Linux基础知识,虽说那时候效率很低,但是慢慢摸索也懂得了一些。

 

硬件连接: S3C2416核心板为君益兴的Helper2416核心板  2416与SIM900通过COM1连接

    

好了,开始进入正题:

 

PPP移植步骤

 

①修改Linux内核,让其支持PPP(Linux内核需在2.6以上)

   (1) 在linux源代码根目录下查看自己的linux内核版本。

   (2) 进入图形界面模式:        make menuconfig ARCH=arm

 

②下载并编译PPP套件,将所需文件放入嵌入式根文件系统对应目录。
    (1) PPP套件下载链接地址   ftp://ftp.samba.org/pub/ppp  (笔者下载的是ppp-2.4.7)

   (2) 将ppp-2.4.7解压   tar zxvf ppp-2.4.7.tar.gz

   (3) 进入解压目录,配置交叉编译PPP套件。

 
  1. #.configure

  2. #make CC=/Software/arm-jyxtec-linux-gnueabi/bin/arm-linux-gcc(指定交叉编译路径)

    (4) 编译成功后,将PPP套件安装至嵌入式系统中。

 
  1. cp $(ppp-2.4.7)/chat/chat /home/roofs/bin

  2. cp $(ppp-2.4.7)/pppd/pppd /home/roofs/bin

  3. cp $(ppp-2.4.7)/pppdump/pppdump /home/roofs/bin

  4. cp $(ppp-2.4.7)/pppstats/pppstats /home/roofs/bin 

(/home/roofs/bin为笔者的嵌入式根文件系统共享的NFS所在位置的bin目录)

  (5) 在嵌入式文件系统的etc目录下创建ppp文件夹,并拷贝相关文件至此。

 
  1. (/home/bruce/samba_share/etc)#mkdir ppp

  2. (/home/bruce/samba_share/etc)#cp $(ppp-2.4.7)/etc.ppp/* /home/roofs/etc/ppp


③ 相关脚本准备
 

  (1) GPRS启动脚本

        文件名:dial-on.sh

        存放位置:/home/roofs/bin

 
  1. #!/bin/sh

  2.  
  3.  
  4. #define dial_on function

  5.  
  6. dial_on()

  7. {

  8. #test if pppd is running

  9. pppd_stat=`ifconfig|grep ppp|wc -l|cut -b 7-7`

  10. if [ $pppd_stat -gt 0 ]

  11. then

  12. echo "ppp connection's already started."

  13. else

  14. #close ethernet interface

  15. ifconfig eth0 down

  16.  
  17. #ppp start

  18. pppd modem /dev/ttySAC1 115200 nocrtscts lock connect "chat -v -f /etc/ppp/gprs-connect" user "" noauth debug defaultroute

  19. # pppd配置说明:

  20. # ttyS1:连接GPRS模块SIM900的串口

  21. # 115200:GPRS的拨号速率

  22. # nocrtscts:无流控

  23. # lock:锁定设备

  24. # connect “chat ???? ???? /etc/ppp/gprs-connect”:GPRS连接脚本文件

  25. # user “”:用户名,这里是无

  26. # noauth:无需认证

  27. # debug:输出调试信息

  28. # defaultroute:此拨号连接作为默认路由

  29. echo "ppp is starting"

  30. fi

  31. }

  32.  
  33. #dial on gprs

  34. dial_on

  35.  
  36. #wait for ppp's init

  37. sleep 5

  38.  
  39. pppd_stat=`ifconfig|grep ppp|wc -l|cut -b 7-7`

  40. if [ $pppd_stat -eq 0 ]

  41. then

  42. echo "trying 2nd time to call ppp"

  43. dial_on

  44.  
  45. sleep 5

  46. fi

  47.  
  48. pppd_stat=`ifconfig|grep ppp|wc -l|cut -b 7-7`

  49. if [ $pppd_stat -eq 0 ]

  50. then

  51. echo "pppd error!"

  52. echo "please check pppd's config files"

  53. fi

  54.  
  55. #open ethernet interface

  56. ifconfig eth0 up

  57.  
  58. #end


        
   (2) GPRS连接配置文件 (关于配置拨号脚本可参考SIM900官方指导手册,内有详细介绍拨号设置)

        文件名:gprs-connect

         存放位置:/home/roofs/etc/ppp     

 
  1. TIMEOUT 30

  2. ABORT "BUSY"

  3. ABORT "ERROR"

  4. ABORT "NO CARRIER"

  5.  
  6. '' AT

  7. OK ATS0=0

  8. OK ATE0V1

  9. OK AT+CGDCONT=1,"IP","CMNET"

  10. OK ATD*99***1#

  11. CONNECT ''

  12.  


   (3) 其实到这里为止,一个简单的PPP协议栈就搭建完成了,当然最重要的就是调试过程,要调试成可行的的确是很不容易的,笔者自己也摸索了很久,所以各位要有耐心,做Linux的研究就是这样,探索+前人的总结。直接运行dial-on.sh,查看是否已经连接上PPP,尝试ping某个可ping通的IP地址。如下图所示:

  

   (4) 其实现在如果去Ping域名的话,是ping不通的,返回bad address。那么需要修改/etc/resolv.conf,添加域名解析器的服务地址。比如我用的是浙江嘉兴的移动号,就去找浙江嘉兴移动的DNS,改掉保存再去ping就可以了。

 

 

 

 

  (5) 接下来会去研究关于PPP登录方式和PPP断线检测自动拨号的问题。期待大家一起讨论!

你可能感兴趣的:(pppd)