在linux shell脚本文件中调用minicom工具实现AT拨号的方法

目录

背景:

网上的方案:

(1)如使用echo命令直接往/dev/ttyUSB1设备中写AT指令:

(2)如使用gnome-terminal命令重新开个终端:

(3)如使用atnout命令:

可行的方案:echo命令和minicom同时使用


背景:

        ubuntu电路板外接usb口的4G模块,模块厂家提供的拨号方式是ECM。内核源码中添加的VID和PID,让系统在dev命令下生成ttyUSB0~ttyUSB3四个虚拟串口,其中ttyUSB1供AT命令调试使用。

ECM拨号的流程是:先通过AT指令拨号再使用udhcpc命令学习ip地址。一般使用minicom或者busybox mircocom工具执行AT指令。这两个指令均会从终端命令行跳入另一个编辑界面。

我现在需要在shell脚本中实现自动拨号上网

网上的方案:

度娘有很多种解决方案,但是在我的环境中,没有一个是可行的:

(1)如使用echo命令直接往/dev/ttyUSB1设备中写AT指令:

        使用echo命令往ttyUSB1/2写at命令时,同一条命令反复执行,并且只有第一个条目是正确的,其他都是错误:

AT+CPIN?
+CPIN: READY
OK
AT+C^M^J+AT+C^M^JC^M^C^M^C^M^C^M^C^M^C^M^C^M^C^M^C^M^C^M^C^M^C^M^C^M^C^M^C^M^C^M^C^M^C^M^C^M^C^M^C^M^C^M^C^M^C^M^C^M^C^M^C^M^C^M^C^M^C^M^C^M^C^M^C^M^C^M^C^M^C^M^C^M^C^M^C^M^C^M^C^M^C^M^C^M^C^M^C^M^C^M^C^M^C^M^C^M^C^M^C^M^C^M^C^M^C^M^C^M^C^M^C^M^C^M^C^M^C^M^C^M^C^M^C^M^C^M^C^M^C^M^C^M^C^M^C^M^C^M^C^M^C^M^C^M^C^M^C^M^C^M^C^M^C^M^C^M^C^M^C^M^C^M^C^M^C^M^C^M^C^M^C^M^C^M^C^M^C^M^C^M^C^M^C^M^C^M^C^M^C^M^C^M^C^M^C^M^C^M^C^M^C^M^C^M^C^M^C^M^C^M^C^M^C^M^C^M^C^M^C^M^C^M^C^M^C^M^C^M^C^M^C^M^C^M^C^M^C^M^C^M^C^M^C^M^C^M^C^M^C^M^C^M^C^M^C^M^C^M^C^M^C^M^C^M^C^M^C^M^C^M^C^M^C^M^C^M^C^M^C^M^C^M^C^M^C^M^C^M^C^M^C^M^C^M^C^M^C^M^C^M^C^M^C^

网上还说使用stty命令配置该节点波特率,但是此法无效。对于虚拟出来的tty设备,命令字符有丢失,命令反复执行都是有可能的。可能的原因是echo下发的命令是多个字符,而设备节点必须一个字符一个字符地解析,而且两次解析直接保持在0.1ms左右,不然便会丢失字符。

(2)如使用gnome-terminal命令重新开个终端:

        arm板子安装gnome环境太费内存和性能,放弃!!!

(3)如使用atnout命令:

        这是安卓下的atnout库,在ubuntu下没有呀。放弃!!!

可行的方案:echo命令和minicom同时使用

如:

echo -e "ATI\r\n" | minicom  -b 9600 -D /dev/ttyUSB1

-e表示转义解析命令,如将\r解析为回车。

\r\n是我手动加的,根据各自环境自行决定,一般情况下是需要的,用于区分前后相邻的两个命令。

minicom的-b表示指定9600的波特率,一般可以不指定,minicom工具会自适应。

 -D指定设备节点,一般情况下是需要的,不然minicom工具会访问某个默认的节点。

注意:如果命令中有$符号,记得加转义斜杠\ :

如:

echo -e "at+\$mysysinfo\r\n" | minicom  -D /dev/ttyUSB1

在我们的.sh脚本中,多次使用类似上述命令,便可实现不同的AT指令调试虚拟设备节点。

注意

对于常用的4G模块,如移远的EC20,使用echo写at命令到设备节点是可行的,但是对于某些模块,如有方的n720,便会出现本文中的丢字符或者命令被反复执行的情况。我认为是模块厂家本身的设计缺陷造成的。

你可能感兴趣的:(驱动和内核,linux,linux,ubuntu,minicom)