openwrt移植4G CAT1 (L610) ——自动拨号,获取DNS,守护网络实时在线

2 篇文章 0 订阅
2 篇文章 0 订阅

一、目的

        4G模组拨号成功后,发现还是不能正常连接外网。

        这时还需要通过dhcp来获取ip,同时需要修改/etc/resolv.conf配置域名后才能正常上网;另外我们还担心网络是否会出现异常,此时需要守护网络的健康,让网络实时在线。

        这里记录调试过程,并提供编写的可用脚本和配置文件。

        主要包含:

  1. 4G模组自动拨号上网脚本,自动设置DNS等网络操作
  2. 网络守护脚本
  3. 系统工具配置
  4. 计划任务设置
  5. 开机脚本自动运行配置

二、准备

1.移植L610到openwrt下,通过4G CAT1实现ECM拨号上网

        这步骤这里不重复介绍

2.openwrt开发板 MT7628D

        Barrier Breaker 版本号是14.07,linux内核版本3.10.14

3.编译host主机:Ubuntu 14.04.5 LTS

4.L610和 MT726D通过USB连接

三、步骤

3.1 编译openwrt系统

进入主目录

# make menuconfig

# make V=99

编译后的输出目录在builddir目录下

其中固件在bin/ramips/

3.2 修改openwrt配置

因为配置需要用到几个工具,需要配置起来,可以参考如下来设置

3.2.1 编译microcom工具

# make menuconfig

后找到microcom勾选,microcom是一个串口工具,是用于和4G模组的AT命令测试的。非必选,调试用。

3.2.2 编译comgt工具

同样方法找打comgt工具编译,comgt工具可以用来配置拨号脚本

配置好后,保存

# make V=99

系统中要配置到这里完成,重新烧录系统即可。

3.3 编写4G模组自动拨号上网脚本

整体流程如下:

  • 按照模组手册提供的交互流程,配置好gcom脚本,实现自动拨号命令
  • 拨号完成后用dhcp协议获取IP
  • 配置udchpc命令对应DNS脚本
  • 编辑网络监控守护脚本
  • 开机自动拨号

3.3.1 配置comgt的gcom脚本

配置模组模式为ECM,详见dialog-ecm.gcom文件

opengt
 set com 115200n81
 set comecho off
 set senddelay 0.02
 waitquiet 0.2 0.2
 flash 0.1
:start
 send "AT+GTUSBMODE=74^m"
 waitfor 30 "OK","ERROR"
 if % = -1 goto error
 if % = 0 goto ready
 if % = 1 goto error
:error
 print $s," ***setusbmode ERROR***"
 exit 1
:ready
 print "setusbmode OK\n"
 exit 0

配置模组自动拨号,详见dialog.gcom文件

opengt
 set com 115200n81
 set comecho off
 set senddelay 0.02
 waitquiet 0.2 0.2
 flash 0.1
:start
 send "AT+CPIN?^m"
 waitfor 30 "SIM PUK","SIM PIN","READY","ERROR","ERR"
 if % = -1 goto error
 if % = 0 goto ready
 if % = 1 goto error
 if % = 2 goto ready
 if % = 3 goto error
 if % = 4 goto error
:error
 print $s," ***SIM ERROR***"
 print "Check device port configuration.\nCheck SIM is inserted\nTest SIM in a mobile phone?\n"
 exit 1
:ready
 print "SIM ready\n"
:waitreg
 send "AT+CGREG?^m"
 waitfor 2
 print $s
:signal
 send "AT+CSQ?^m"
 get 2 "^m" $s
 get 2 "^m" $s
 let a=len($s)
 let a=a-6
 let $s=$right($s,a)
 if $s <> "0,0" goto sigcont
 if c > 3 goto sigexit
 let c=c+1
 pause 1
 goto signal
:sigexit
 print "Signal strength measure 0,0 too low!"
 exit 1
:sigcont
 print "Signal Quality:",$s,"\n"
:SetGTRNDIS
 send "AT+GTRNDIS=1,1^m"
 waitfor 3 "OK","ERROR"
 print $s
:GetGTRNDIS
 send "AT+GTRNDIS?^m"
 get 2 "^m" $s
 print $s
 get 2 "^m" $s
 print $s
:OK
 print "Set LTE module OK\n" 
 exit 0
 
 

3.3.2 编辑网络监控守护脚本

这里把拨号获取dhcp以及配置dns写到一个脚本中

详见watch_network.sh文件

#!/bin/sh
#sleep 100
DATE=`date +%Y-%m-%d-%H:%M:%S`
tries=0
HOST_URL="aliyuncs.com"
USB_MODE_CMD="comgt -d /dev/ttyUSB0 -s /root/arm-target/dialog-ecm.gcom"
DIALOG_CMD="comgt -d /dev/ttyUSB0 -s /root/arm-target/dialog.gcom"
KILL_UDHCPC_CMD="ps | grep udhcpc | grep -v grep |  awk '{print $1}'|xargs kill -9"
LOG_FILE="/tmp/watch_network.log"
echo $DATE --- watch network start --- >> $LOG_FILE
while [[ $tries -lt 3 ]]
do
        if /bin/ping -c 1 $HOST_URL >/dev/null
        then
                echo $DATE --- exit --- >> $LOG_FILE
                echo $DATE OK >> $LOG_FILE
                exit 0
        fi
        tries=$((tries+1))
        sleep 5
#       echo $DATE tries: $tries >>watch_network.log
done
 
echo $DATE network restart >> $LOG_FILE

# rerst LTE
gpio setdir 37 1
gpio write 37 1
sleep 1
gpio write 37 0
sleep 5

# set ecmmode
$USB_MODE_CMD


# rerst LTE again
gpio setdir 37 1
gpio write 37 1
sleep 1
gpio write 37 0
sleep 5

# call comgt dialog
$DIALOG_CMD

sleep 3

# udhcpc
# kill udhcpc tiwce
$KILL_UDHCPC_CMD
$KILL_UDHCPC_CMD
echo $DATE start dhcpc >> $LOG_FILE
udhcpc -i eth1 -s /usr/share/udhcpc/default-dns.script



#/etc/init.d/network restart
#echo $DATE reboot >>watch_network.log
#reboot1

3.3.3 配置udchpc命令对应DNS脚本

上传default-dns.script文件到板子的目录:/usr/share/udhcpc/default-dns.script,并给权限

# chmod 775 /usr/share/udhcpc/default-dns.script
#!/bin/sh
# udhcpc script edited by Tim Riker <Tim@Rikers.org>
 
RESOLV_CONF="/etc/resolv.conf"
 
[ -n "$1" ] || { echo "Error: should be called from udhcpc"; exit 1; }
 
NETMASK=""
[ -n "$subnet" ] && NETMASK="netmask $subnet"
BROADCAST="broadcast +"
[ -n "$broadcast" ] && BROADCAST="broadcast $broadcast"
 
case "$1" in
        deconfig)
                echo "Setting IP address 0.0.0.0 on $interface"
                busybox ifconfig $interface 0.0.0.0
                ;;
 
        renew|bound)
                echo "Setting IP address $ip on $interface"
                busybox ifconfig $interface $ip $NETMASK $BROADCAST
 
                if [ -n "$router" ] ; then
                        echo "Deleting routers"
                        while busybox route del default gw 0.0.0.0 dev $interface ; do
                                :
                        done
 
                        metric=0
                        for i in $router ; do
                                echo "Adding router $i"
                                busybox route add default gw $i dev $interface metric $metric
                                : $(( metric += 1 ))
                        done
                fi
 
                echo "Recreating $RESOLV_CONF"
                # If the file is a symlink somewhere (like /etc/resolv.conf
                # pointing to /run/resolv.conf), make sure things work.
                realconf=$(readlink -f "$RESOLV_CONF" 2>/dev/null || echo "$RESOLV_CONF")
                tmpfile="$realconf-$$"
                > "$tmpfile"
                [ -n "$domain" ] && echo "search $domain" >> "$tmpfile"
                for i in $dns ; do
                        echo " Adding DNS server $i"
                        echo "nameserver $i" >> "$tmpfile"
                done
                busybox mv "$tmpfile" "$realconf"
                ;;
esac
 
exit 0

3.3.4 计划任务

在cron中增加网络监控守护脚本,每5分钟执行一次:

# crontab -e

输入内容:

*/5 * * * * /root/arm-target/watch_network.sh

按ESC后,按: 输入qw

查看任务

# crontab -l

3.3.5 开机自动拨号

开机自动拨号可以在上电初次的时候,增加拨号速度,而不用每次等待网络监控守护脚本的执行周期

上传文件到板子:/etc/init.d/startAutoDialog

给权限

# chmod 775 /etc/init.d/startAutoDialog
#!/bin/sh 
# /etc/init.d/startAutoDialog
START=95
start()
{
/root/run_dialog.sh &
}
stop()
{

}

创建链接

# ln -s /etc/init.d/startAutoDialog /etc/rc.d/S95startAutoDialog
#!/bin/sh 
# /root/run_dialog.sh

PROJECT_DIR="/root/"
DATE=`date +%Y-%m-%d-%H:%M:%S`
echo $DATE run dialog > $PROJECT_DIR/auto_dialog.log

# start LTE
cd $PROJECT_DIR/
./watch_network.sh &

四、验证

以上配置完成后,检查sim卡,天线硬件连接OK后,重启板子。

ping 测试网络

# ping www.baidu.com

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值