openwrt移植4G CAT1 (L610) ——自动拨号,获取DNS,守护网络实时在线
一、目的
4G模组拨号成功后,发现还是不能正常连接外网。
这时还需要通过dhcp来获取ip,同时需要修改/etc/resolv.conf配置域名后才能正常上网;另外我们还担心网络是否会出现异常,此时需要守护网络的健康,让网络实时在线。
这里记录调试过程,并提供编写的可用脚本和配置文件。
主要包含:
- 4G模组自动拨号上网脚本,自动设置DNS等网络操作
- 网络守护脚本
- 系统工具配置
- 计划任务设置
- 开机脚本自动运行配置
二、准备
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文件
opengtset com 115200n81set comecho offset senddelay 0.02waitquiet 0.2 0.2flash 0.1
:startsend "AT+GTUSBMODE=74^m"waitfor 30 "OK","ERROR"if % = -1 goto errorif % = 0 goto readyif % = 1 goto error
:errorprint $s," ***setusbmode ERROR***"exit 1
:readyprint "setusbmode OK\n"exit 0
配置模组自动拨号,详见dialog.gcom文件
opengtset com 115200n81set comecho offset senddelay 0.02waitquiet 0.2 0.2flash 0.1
:startsend "AT+CPIN?^m"waitfor 30 "SIM PUK","SIM PIN","READY","ERROR","ERR"if % = -1 goto errorif % = 0 goto readyif % = 1 goto errorif % = 2 goto readyif % = 3 goto errorif % = 4 goto error
:errorprint $s," ***SIM ERROR***"print "Check device port configuration.\nCheck SIM is inserted\nTest SIM in a mobile phone?\n"exit 1
:readyprint "SIM ready\n"
:waitregsend "AT+CGREG?^m"waitfor 2print $s
:signalsend "AT+CSQ?^m"get 2 "^m" $sget 2 "^m" $slet a=len($s)let a=a-6let $s=$right($s,a)if $s <> "0,0" goto sigcontif c > 3 goto sigexitlet c=c+1pause 1goto signal
:sigexitprint "Signal strength measure 0,0 too low!"exit 1
:sigcontprint "Signal Quality:",$s,"\n"
:SetGTRNDISsend "AT+GTRNDIS=1,1^m"waitfor 3 "OK","ERROR"print $s
:GetGTRNDISsend "AT+GTRNDIS?^m"get 2 "^m" $sprint $sget 2 "^m" $sprint $s
:OKprint "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 ]]
doif /bin/ping -c 1 $HOST_URL >/dev/nullthenecho $DATE --- exit --- >> $LOG_FILEecho $DATE OK >> $LOG_FILEexit 0fitries=$((tries+1))sleep 5
# echo $DATE tries: $tries >>watch_network.log
doneecho $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_CMDsleep 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 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" indeconfig)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 $BROADCASTif [ -n "$router" ] ; thenecho "Deleting routers"while busybox route del default gw 0.0.0.0 dev $interface ; do:donemetric=0for i in $router ; doecho "Adding router $i"busybox route add default gw $i dev $interface metric $metric: $(( metric += 1 ))donefiecho "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 ; doecho " Adding DNS server $i"echo "nameserver $i" >> "$tmpfile"donebusybox mv "$tmpfile" "$realconf";;
esacexit 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.shPROJECT_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

本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
