試驗環境:Linux marsboard 3.4.90 #9 SMP PREEMPT Thu Mar 3 18:28:43 CST 2016 armv7l armv7l armv7l GNU/Linux (注:A20核心板)
通訊模塊,加載成ttyUSB*設備;
目標:使用通訊模塊進行3G4G撥號連接互聯網
方法:使用pppd和ppp程序,進行撥號連接
前提:安裝了ppp、pppd兩個程序
摘要:涉及的文件ppp的chat-script撥號腳本(針對不通通訊設備情況需要有所調整,此處不考慮這些情況,大部分都可以使用)、
步驟:
1、創建ppp程序的撥號腳本,內容如下:(有兩個,一個是針對移動、聯通和電信4G的,一個是只針對電信3G的)
# 針對移動、聯通和電信4G的,文件名chat-script
#!/bin/sh
exec chat -v \
TIMEOUT 5 \
ABORT "BUSY" \
ABORT "ERROR" \
ABORT "NO CARRIER" \
'' \rAT \
OK 'AT+CGDCONT=1,"IP","CMNET"' \
OK 'ATDT*99#' \
CONNECT '' \
-----------------不同腳本分割,請存在不通文件中-----------------------------------------
# 針對電信3G的,文件名chat-script-ct3g
#!/bin/sh
exec chat -v \
TIMEOUT 5 \
ABORT "BUSY" \
ABORT "ERROR" \
ABORT "NO CARRIER" \
'' \rAT \
OK 'AT+CGDCONT=1,"IP","CMNET"' \
OK 'ATDT#777' \
CONNECT '' \
2、創建兩個撥號腳本,ppp-on用於撥號連接 ppp-off用戶斷開連接
# 文件 ppp-on
#! /bin/sh
# $1 串口號 $2波特率 $3chat腳本
pppd modem -d -detach lock $1 $2 kdebug 4 file /etc/ppp/options crtscts noipdefault netmask 255.255.255.0 defaultroute connect $3
------------------------------------------------------
# 文件 ppp-off
#!/bin/sh
######################################################################
#
# Determine the device to be terminated.
#
if [ "$1" = "" ]; then
DEVICE=ppp0
else
DEVICE=$1
fi
######################################################################
#
# If the ppp0 pid file is present then the program is running. Stop it.
if [ -r /var/run/$DEVICE.pid ]; then
kill -INT `cat /var/run/$DEVICE.pid`
#
# If the kill did not work then there is no process running for this
# pid. It may also mean that the lock file will be left. You may wish
# to delete the lock file at the same time.
if [ ! "$?" = "0" ]; then
rm -f /var/run/$DEVICE.pid
echo "ERROR: Removed stale pid file"
exit 1
fi
#
# Success. Let pppd clean up its own junk.
echo "PPP link to $DEVICE terminated."
exit 0
fi
#
# The ppp process is not running for ppp0
echo "ERROR: PPP link is not active on $DEVICE"
exit 1
3、使用方法
將以上的四個腳本文件賦予執行權限,並使用root權限執行
./ppp-of /dev/ttyUSB1 115200 chat-script(具體路徑)
使用ifconfig查看撥號的結果
4、附上一個自己寫的腳本,其中調用的以上的撥號腳本
#! /bin/sh
WR="/home/marsboard/pppd-net"
# $1 串口號 $2波特率 $3chat腳本 $4 ppp-on日志
${WR}/ppp-on $1 $2 ${WR}/$3 > ${WR}/$4 &
sleep 8
# 從ppp-on日志中獲取撥號信息
INTERFACENAME="Using interface"
ADDRESSIPNAME="local IP address"
GATEWAYNAME="remote IP address "
INTERFACE=`grep "$INTERFACENAME" ${WR}/$4|awk '{print $3}'`
ADDRESSIP=`grep "$ADDRESSIPNAME" ${WR}/$4|awk '{print $4}'`
GATEWAYIP=`grep "$GATEWAYNAME" ${WR}/$4|awk '{print $4}'`
# 判斷撥號是否成功
for n in `seq 3`
do
ping -c 1 ${ADDRESSIP} -I ${INTERFACE} >/dev/null 2>&1
if [ $? -eq 0 ]
then
echo "ppp Successed!!"
echo "${INTERFACE}, ${ADDRESSIP}, ${GATEWAYIP}"
return
fi
done
echo "ppp Failed!!"