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


    一、目的

            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系统

    进入主目录

    1. # make menuconfig
    2. # 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文件

    1. opengt
    2. set com 115200n81
    3. set comecho off
    4. set senddelay 0.02
    5. waitquiet 0.2 0.2
    6. flash 0.1
    7. :start
    8. send "AT+GTUSBMODE=74^m"
    9. waitfor 30 "OK","ERROR"
    10. if % = -1 goto error
    11. if % = 0 goto ready
    12. if % = 1 goto error
    13. :error
    14. print $s," ***setusbmode ERROR***"
    15. exit 1
    16. :ready
    17. print "setusbmode OK\n"
    18. exit 0

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

    1. opengt
    2. set com 115200n81
    3. set comecho off
    4. set senddelay 0.02
    5. waitquiet 0.2 0.2
    6. flash 0.1
    7. :start
    8. send "AT+CPIN?^m"
    9. waitfor 30 "SIM PUK","SIM PIN","READY","ERROR","ERR"
    10. if % = -1 goto error
    11. if % = 0 goto ready
    12. if % = 1 goto error
    13. if % = 2 goto ready
    14. if % = 3 goto error
    15. if % = 4 goto error
    16. :error
    17. print $s," ***SIM ERROR***"
    18. print "Check device port configuration.\nCheck SIM is inserted\nTest SIM in a mobile phone?\n"
    19. exit 1
    20. :ready
    21. print "SIM ready\n"
    22. :waitreg
    23. send "AT+CGREG?^m"
    24. waitfor 2
    25. print $s
    26. :signal
    27. send "AT+CSQ?^m"
    28. get 2 "^m" $s
    29. get 2 "^m" $s
    30. let a=len($s)
    31. let a=a-6
    32. let $s=$right($s,a)
    33. if $s <> "0,0" goto sigcont
    34. if c > 3 goto sigexit
    35. let c=c+1
    36. pause 1
    37. goto signal
    38. :sigexit
    39. print "Signal strength measure 0,0 too low!"
    40. exit 1
    41. :sigcont
    42. print "Signal Quality:",$s,"\n"
    43. :SetGTRNDIS
    44. send "AT+GTRNDIS=1,1^m"
    45. waitfor 3 "OK","ERROR"
    46. print $s
    47. :GetGTRNDIS
    48. send "AT+GTRNDIS?^m"
    49. get 2 "^m" $s
    50. print $s
    51. get 2 "^m" $s
    52. print $s
    53. :OK
    54. print "Set LTE module OK\n"
    55. exit 0

    3.3.2 编辑网络监控守护脚本

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

    详见watch_network.sh文件

    1. #!/bin/sh
    2. #sleep 100
    3. DATE=`date +%Y-%m-%d-%H:%M:%S`
    4. tries=0
    5. HOST_URL="aliyuncs.com"
    6. USB_MODE_CMD="comgt -d /dev/ttyUSB0 -s /root/arm-target/dialog-ecm.gcom"
    7. DIALOG_CMD="comgt -d /dev/ttyUSB0 -s /root/arm-target/dialog.gcom"
    8. KILL_UDHCPC_CMD="ps | grep udhcpc | grep -v grep | awk '{print $1}'|xargs kill -9"
    9. LOG_FILE="/tmp/watch_network.log"
    10. echo $DATE --- watch network start --- >> $LOG_FILE
    11. while [[ $tries -lt 3 ]]
    12. do
    13. if /bin/ping -c 1 $HOST_URL >/dev/null
    14. then
    15. echo $DATE --- exit --- >> $LOG_FILE
    16. echo $DATE OK >> $LOG_FILE
    17. exit 0
    18. fi
    19. tries=$((tries+1))
    20. sleep 5
    21. # echo $DATE tries: $tries >>watch_network.log
    22. done
    23. echo $DATE network restart >> $LOG_FILE
    24. # rerst LTE
    25. gpio setdir 37 1
    26. gpio write 37 1
    27. sleep 1
    28. gpio write 37 0
    29. sleep 5
    30. # set ecmmode
    31. $USB_MODE_CMD
    32. # rerst LTE again
    33. gpio setdir 37 1
    34. gpio write 37 1
    35. sleep 1
    36. gpio write 37 0
    37. sleep 5
    38. # call comgt dialog
    39. $DIALOG_CMD
    40. sleep 3
    41. # udhcpc
    42. # kill udhcpc tiwce
    43. $KILL_UDHCPC_CMD
    44. $KILL_UDHCPC_CMD
    45. echo $DATE start dhcpc >> $LOG_FILE
    46. udhcpc -i eth1 -s /usr/share/udhcpc/default-dns.script
    47. #/etc/init.d/network restart
    48. #echo $DATE reboot >>watch_network.log
    49. #reboot1

    3.3.3 配置udchpc命令对应DNS脚本

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

    # chmod 775 /usr/share/udhcpc/default-dns.script
    1. #!/bin/sh
    2. # udhcpc script edited by Tim Riker
    3. RESOLV_CONF="/etc/resolv.conf"
    4. [ -n "$1" ] || { echo "Error: should be called from udhcpc"; exit 1; }
    5. NETMASK=""
    6. [ -n "$subnet" ] && NETMASK="netmask $subnet"
    7. BROADCAST="broadcast +"
    8. [ -n "$broadcast" ] && BROADCAST="broadcast $broadcast"
    9. case "$1" in
    10. deconfig)
    11. echo "Setting IP address 0.0.0.0 on $interface"
    12. busybox ifconfig $interface 0.0.0.0
    13. ;;
    14. renew|bound)
    15. echo "Setting IP address $ip on $interface"
    16. busybox ifconfig $interface $ip $NETMASK $BROADCAST
    17. if [ -n "$router" ] ; then
    18. echo "Deleting routers"
    19. while busybox route del default gw 0.0.0.0 dev $interface ; do
    20. :
    21. done
    22. metric=0
    23. for i in $router ; do
    24. echo "Adding router $i"
    25. busybox route add default gw $i dev $interface metric $metric
    26. : $(( metric += 1 ))
    27. done
    28. fi
    29. echo "Recreating $RESOLV_CONF"
    30. # If the file is a symlink somewhere (like /etc/resolv.conf
    31. # pointing to /run/resolv.conf), make sure things work.
    32. realconf=$(readlink -f "$RESOLV_CONF" 2>/dev/null || echo "$RESOLV_CONF")
    33. tmpfile="$realconf-$$"
    34. > "$tmpfile"
    35. [ -n "$domain" ] && echo "search $domain" >> "$tmpfile"
    36. for i in $dns ; do
    37. echo " Adding DNS server $i"
    38. echo "nameserver $i" >> "$tmpfile"
    39. done
    40. busybox mv "$tmpfile" "$realconf"
    41. ;;
    42. esac
    43. 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
    1. #!/bin/sh
    2. # /etc/init.d/startAutoDialog
    3. START=95
    4. start()
    5. {
    6. /root/run_dialog.sh &
    7. }
    8. stop()
    9. {
    10. }

    创建链接

    # ln -s /etc/init.d/startAutoDialog /etc/rc.d/S95startAutoDialog
    1. #!/bin/sh
    2. # /root/run_dialog.sh
    3. PROJECT_DIR="/root/"
    4. DATE=`date +%Y-%m-%d-%H:%M:%S`
    5. echo $DATE run dialog > $PROJECT_DIR/auto_dialog.log
    6. # start LTE
    7. cd $PROJECT_DIR/
    8. ./watch_network.sh &

    四、验证

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

    ping 测试网络

    # ping www.baidu.com

  • 相关阅读:
    .net异常处理
    【Matlab代码】基于遗传算法和蚂蚁优化算法的路径优化问题
    开通经营收款码要手续费吗
    SpringBoot开发使用篇(1)—
    【愚公系列】2022年11月 uniapp专题-环境配置
    宏记录器 Macro Recorder 2.0 注册版
    使用阿里云服务器三分钟搭建网站
    go语言基础语法
    dql的执行顺序
    L2-027 名人堂与代金券
  • 原文地址:https://blog.csdn.net/fzhenyu/article/details/126408605