嵌入式Linux下通过PPP拨号上网(上)

2019-07-12 20:36发布

这里记录在嵌入式Linux环境下,通过PPP拨号,先GPRS上网,后面再写3G上网。
    一般的过程,先参考了【1】。本人使用FriendlyARM开发板(miniARM2440)与GPRS模块(其实只要有GPRS功能的上网卡或者其它模块都行。本人采用移动cmnet 连接,Linux内核是2.6.32的),PPP的拨号上网,方法如下: 1.首先得让内核支持PPP,进入Linux 内核目录(kernel-2.6 或 以上内核版本),执行 #make menuconfig
添加如下内核选项:(这一步一般是不用做的,因为mini2440其实已经添加了此功能了)
Device Drivers ---> Network device support ---> <*> PPP (point-to-point protocol) support [*]   PPP multilink support <*> PPP support for async serial ports <*> PPP support for sync tty ports <*> SLIP (serial line) support [*]   CSLIP compressed headers 添加完成后保存并退出,执行# make zImage
编译完成以后,在内核目录的arch/arm/boot 目录下便会生成一个 zImage 内核文件,烧到开发板中,这样开发板内核就支持了PPP了。 2.下载ppp-2.4.4.tar.gz 或其他版本PPP 拨号程序源码,可以上网搜索
进入ppp-2.4.4.tar.gz的目录执行解压命令 #tar zxf ppp-2.4.4.tar.gz
解压后出现 ppp-2.4.4 文件夹,进入该目录( #cd ppp-2.4.4 ),执行配置命令 #./configure
然后执行 #make CC=/usr/local/arm/3.4.1/bin/arm-linux-gcc   (后面的CC表示你的交叉编译器目录,要是你添加PATH路径,直接CC=arm-linux-gcc)
编译完成后,进入下一步。 3.修改相关拨号脚本
进入 ppp-2.4.4 目录下的 script 目录,可以找到 ppp-on 、ppp-off 、ppp-dial-on 等多个脚本文件
执行#vi ppp-on
内容如下,修改一下里面的内容
TELEPHONE=555-1212 改为 TELEPHONE=*99***1#
exec /usr/sbin/pppd debug lock modem crtscts /dev/ttyS0 38400 /
        asyncmap 20A0000 escape FF kdebug 0 $LOCAL_IP:$REMOTE_IP /
        noipdefault netmask $NETMASK defaultroute connect $DIALER_SCRIPT 改为 exec /bin/pppd debug lock modem nocrtscts 你的串口设备 你的波特率 /
        asyncmap 20A0000 escape FF kdebug 0 $LOCAL_IP:$REMOTE_IP /
        noipdefault netmask $NETMASK defaultroute connect $DIALER_SCRIPT
ppp-on 修改完成后执行 ESC 和 :wq! 强制保存。
然后修改ppp-on-dialer
执行#vi ppp-on-dialer
删除最后两行关于 拨号帐户密码的。
到此修改结束 4 复制相关文件到开发板 以下$(PPP)为 计算机上ppp-2.4.4 的目录 ,$(EMB_BIN)代表 开发板中的 /bin 目录,$(EMB_ETC)代表开发板中的 /etc 目录
#cp $(PPP)/chat/chat $(EMB_BIN)#cp $(PPP)/pppd/pppd $(EMB_BIN)
#cp $(PPP)/pppdump/pppdump $(EMB_BIN)#cp $(PPP)/pppstats/pppstats $(EMB_BIN)             
#mkdir $(EMB_ETC)/ppp             
#cp $(PPP)/etc.ppp/* $(EMB_ETC)/ppp
#cp $(PPP)/scripts/ppp-on   $(EMB_BIN)
#cp $(PPP)/scripts/ppp-off   $(EMB_BIN)
#cp $(PPP)/scripts/ppp-on-dialer   $(EMB_ETC)/ppp 复制完成(其实放到相应的/usr/sbin目录也是可以的,只要你仔细看ppp-on的脚本)
此后,连接好ARM与GPRS模块后,便可以输入命令 #ppp-on 执行拨号了!
执行上面的ppp-on 命令以后 等一会,你可以看见GPRS模块上面的指示灯快速而稳定地闪烁,表明拨号成功了
这时候你可以在开发板上执行#ifconfig 命令,可以看见新建了一个 ppp0 的设备 ,上面还有IP地址等信息呢!
经过这部后,还要修改DNS服务器地址 #vi /etc/resolv.conf 添加 nameserver 202.116.160.33 (这要视乎你本地的移动DNS服务器地址)
西安 中国移动CMNET (网上可以搜索到)
primary   DNS address 211.137.130.3
secondary DNS address 211.137.130.19 保存退出
尝试一下 ping www.baidu.com 看看能够ping出什么东西来?,如果ping不通,使用#ifconfig发现有ppp0设备,也有eth设备,可以先关掉eth设备试下#ifconfig eth0 down   (根据显示的eth名) 如果这样就搞定了,我想我也不用写了,呵呵!当发现还是不成功,而且看上去还是有很多不明白的时候可以再接着上面的步骤继续如下操作。 首先是ppp-on,ppp-off,ppp-on-dialer只是一些写好的脚本,自己可以查看,不是很难。下面主要参考了【2】以及其中提到的HOWTO文档等等。 主要步骤是先在板子的/etc/ppp/peers目录下建立文件gprs(gprs也可以是其它名字),写入拨号参数。接着在/etc/ppp目录下建立gprs-connect-chat(拨号命令)、chap-secret(用户名等),最后调用#pppd call gprs(前提是你已经在前面的步骤中把pppd等文件复制指定目录下了),可以通过#tail -f /var/log/messages命令查看日志。最后关闭掉eth设备,即可通过ppp0设备上网了。下面给出各个文件的内容
1.
#/etc/ppp/peers/gprs
# This is pppd script for China Mobile, used GPRS Module
# Usage:   root>pppd call gprs
/dev/ttyUSB0    #自己的设备文件名,首先最后在ppp拨号上网前保证你的模块能正确接收和返回AT命令吧
115200          #波特率
nocrtscts       #无硬件流控的
modem
#noauth         #想让ppp在后台运行可以去掉注释
debug
#nodetach
#hide-password
usepeerdns
noipdefault
defaultroute
user "cmnet"   #你的用户名,最好随便起个,不加双引号也可以的
0.0.0.0:0.0.0.0 #从远端分配ip地址等
ipcp-accept-local
#ipcp-accept-remote
#lcp-echo-failure  12
#lcp-echo-interval 3
#noccp
#novj
#novjccomp
#persist
#connect '/usr/sbin/chat -s -v -f /etc/ppp/gprs-connect-chat'
connect '/usr/sbin/chat -v -s -f /etc/ppp/gprs-connect-chat'
#disconnect '/bin/chat -v -f /etc/ppp/gprs-disconnect-chat' 具体内容解释可以查看【3】中的HOWTO,大部分还是中文的。可以根据自己的需要和文件存放的位置修改,切忌直接复制啊!
2.
#/etc/ppp/gprs-connect-chat
# chat script for China Mobile, used GPRS module.
TIMEOUT         15
ABORT           "DELAYED"
ABORT           "BUSY"
ABORT           "ERROR"
ABORT           "NO DIALTONE"
ABORT           "NO CARRIER"
TIMEOUT         40
''              AT
OK              AT+CFUN=1 #都是标准的AT命令,如果采用的3G网卡的话需要这个命令,不是则应该删除
OK                ATS0=0
OK              ATE0V1
OK              AT+CGDCONT=1,"IP","CMNET" #中移动的
OK              ATDT*99***1#
CONNECT         '' 3.
#/etc/ppp/chap-secrets
#client    server secret IP address
"cmnet"    *     "cmnet"    *
现在一般都采用chap认证,也有pap认证的。具体意义参看【3】了啊。 最后想关闭ppp了,那么可以用上面的ppp-off,也可以直接ps下,再kill了啊!呵呵! 参考:
【1】http://hi.baidu.com/alexin163/blog/item/73c7c1018737440f1d9583cc.html
【2】http://blog.chinaunix.net/u3/90973/showart_1998886.html
【3】http://man.chinaunix.net/linux/how/PPP-HOWTO.html