Air720系列Lua版本异常分析说明(死机、重启、网络、socket)

第一章 死机以及重启异常 1.1如何从设备管理器中的端口判断死机或者重启 如果彻底死机,设备管理器中的端口如下图所示,模块的USB映射出的端口,有且仅有一个...

第一章 死机以及重启异常

1.1如何从设备管理器中的端口判断死机或者重启

如果彻底死机,设备管理器中的端口如下图所示,模块的USB映射出的端口,有且仅有一个


如果设备管理器中的端口一直如下图所示,则表示正常工作

  

如果端口在不断的闪烁,弹出来又消失,则表示模块在不断的重启

1.2如何从日志判断“是否彻底死机”

日志中如果出现类似于下面的死机信息,正常情况下,20多秒后,会自动重启,如果一直不会自动重启,则可以认定程序确实死机了

   EE LOG: LR: 0x6014bbd

   EE LOG: PC: 0x6767cc4

   EE LOG: SP: 0x72adb80

   EE LOG: MSA Disable Sleep

   EE LOG: Wait for DSP L1 Memory dump...

   EE LOG: first entry!

   EE LOG: Software version: NZ_NZ_CP_2.178.000X

   EE LOG: Compilation time: Jun 13 2019 09:17:56

   Ep0: TX 0, RX 0

   AT: TX 0, RX 0, CTRL 0

   DIAG: TX 0, RX 0, CTRL 0

   RNDIS: TX 0, RX 1, CTRL 0

   MassStorage: TX 0, RX 0

   EE LOG: Cancel RNDIS transfer

   EE LOG: Prepare for Sd dump

   EE LOG: eeSDDumpPrepare Enter

   EE LOG: eeSDDumpPrepare Exit

   EE LOG: Prepare for diag transmit

   EE LOG: finalAction:5, eeFatalActionExt:602453d, eeMode:3f

   EE LOG: IPCIIR 0x0, APBC_IPC_CLK 0x4, AIRQ_IPC_ENABLE 0x3d10

只要没有设置ASSERT模式,出现任何异常,理论上都会自动重启

如果遇到“异常后无法自动重启,一直处于死机状态”的问题,首先按照如下步骤确认一下是否设置了ASSERT模式:

1、脚本代码中是否执行了ril.request("AT*EXASSERT=1")语句

2、是否人为通过模块USB口枚举出的ASR MODEM DEVICE AT口发送过AT*EXASSERT=1命令

3、如果有条件重启模块,重启后,通过模块USB口枚举出的ASR MODEM DEVICE AT口发送AT*EXASSERT?命令,查询一下ASSERT状态

注意:模块一旦设置过ASSERT模式,是永远保存在flash中的,只能通过AT*EXASSERT=0关闭ASSERT模式,所以AT*EXASSERT只能在调试问题时使用,而且使用之后,要及时通过AT*EXASSERT=0关闭

如果没有设置ASSERT模式,出现了“异常后无法自动重启,一直处于死机状态”的问题,则肯定是不正常的,需要具体问题具体分析

PSLuat V0017以及之前的版本固件,存在一个bug,可能会导致异常死机而无法自动重启

1.3如何从日志中判断“是否重启,以及重启原因”

日志中搜索poweron reason,可以获取到开机原因值,例如:

            [poweron reason:] 3 SOCKET_LONG_CONNECTION 2.0.0 2.2.1 Luat_V0019_ASR1802_720D

中的3就表示开机原因值

 

开机原因值的意义如下:

0: 按键开机                  1: 充电开机                  2: 闹钟开机                  3: 软件重启开机           4: 其他原因导致的开机  

   6: 异常开机,        8: 看门狗开机,     10: 电池开机       11: 系统使能开机,                 12: USB开机

   13: JIG开机                 14: 开关由OFF拨到ON检测到exton1n,准许开机         15: 外部原因开机,

   255: 未知

 

遇到重启问题时,按照如下步骤分析具体原因:

1.       是否存在脚本运行异常

找到重启前上一次运行的最后日志,确认一下是否有脚本运行异常信息输出,例如

lua /lua/socketTask.lua:75: attempt to perform arithmetic on global 'djkasjdlas' (a nil value)

stack traceback:

/lua/socketTask.lua:75: in function 'cb

/lua/sys.lua:363: in function 'run'

/lua/

如果脚本中使用了errDump功能模块(一定要使用errDump功能模块,此功能模块对“量产投放市场的设备,远程调试初步定位问题”至关重要),直接在日志中搜索errDump,也可以定位出是否发生脚本异常,例如

[E]-[errDump.luaErr] /lua/socketTask.lua:75: attempt to perform arithmetic on global 'djkasjdlas' (a nil value)

stack traceback:

            /lua/socketTask.lua:75: in function 'cb'

            /lua/sys.lua:363: in function 'run'

            /lua/main.lua:59: in main chunk

            [C]: ?

2.       是否存在固件运行异常

如果在第1步存在了脚本运行异常,则可以不用关心这一步的固件运行异常,因为任何脚本运行异常都会触发固件运行异常。

找到重启前上一次运行的最后日志,确认一下是否有固件运行异常信息输出,例如

               EE LOG: LR: 0x6014bbd

               EE LOG: PC: 0x6767cc4

               EE LOG: SP: 0x72adb80

               EE LOG: MSA Disable Sleep

               EE LOG: Wait for DSP L1 Memory dump...

               EE LOG: first entry!

               EE LOG: Software version: NZ_NZ_CP_2.178.000X

               EE LOG: Compilation time: Jun 13 2019 09:17:56

               Ep0: TX 0, RX 0

               AT: TX 0, RX 0, CTRL 0

               DIAG: TX 0, RX 0, CTRL 0

               RNDIS: TX 0, RX 1, CTRL 0

               MassStorage: TX 0, RX 0

               EE LOG: Cancel RNDIS transfer

               EE LOG: Prepare for Sd dump

               EE LOG: eeSDDumpPrepare Enter

               EE LOG: eeSDDumpPrepare Exit

               EE LOG: Prepare for diag transmit

               EE LOG: finalAction:5, eeFatalActionExt:602453d, eeMode:3f

EE LOG: IPCIIR 0x0, APBC_IPC_CLK 0x4, AIRQ_IPC_ENABLE 0x3d10

如果脚本中使用了errDump功能模块(core0019以及以后的版本,script2.2.0以及以后的版本)(一定要使用errDump功能模块,此功能模块对“量产投放市场的设备,远程调试初步定位问题”至关重要),直接在日志中搜索errDump,也可以定位出是否发生固件异常,例如

[E]-[errDump.firmwareAssertErr] desc=FALSE,file=platform_main.cline=506,LR:0x6015025,PC:0x67688e4,SP:0x72adb80


3.       如果不存在前2种情况,确认一下是否为供电不稳引起的重启


第二章 网络异常

  此章节介绍如何搜索日志,一步步排查是否出现网络异常

1.       搜索CGSN,确认一下日志中的IMEI是否与标签上的IMEI一致,如果不一致,则可能生产过程出错

2.       搜索ATWMFT,如果返回ERR,表示模块没有校准,可能会导致各种网络问题,基本上可以确定是生产过程出错导致的,必须返厂维修;如果返回SUCCESS,表示正常

 

注意:如果通过AT+CFUN=0进入飞行模式,以下几步的查询结果都是异常状态

 

3.       搜索CPIN,如果返回的不是READY,则SIM卡异常

4.       搜索CSQ,查询信号强度,信号强度最大值为31,如果查询出来的信号值小于10,可以认为信号较弱,如果环境本身的信号不差,则需要分析硬件射频是否存在问题

5.       搜索CREGCGREGCEREG,查询网络状态,如果状态不是1或者5,则表示网络未成功注册

6.       搜索^MODE,查询当前使用的网络模式,2G3G还是4G,此模式仅作为分析问题时补充信息使用

7.       搜索CGDCONT,查询PDP是否已经激活,如果返回的查询结果中有APN以及本地IP,则表示正常


第三章 socket应用异常

  此章节介绍如何搜索日志,一步步排查是否出现socket应用异常

  注意:如果通过AT+CFUN=0进入飞行模式,以下几步的查询结果都是异常状态

1.       搜索socket,如果出现socket:connect: core sock conn error或者socket:connect: connect fail,则表示socket连接失败

2.       搜索socket,如果出现send fail则表示发送失败

3.       搜索socket,如果出现socket.rtos.MSG_SOCK_CLOSE_IND则表示socket'被动关闭


第四章 errDump功能说明

errDump功能模块对“量产投放市场的设备,远程调试初步定位问题”至关重要 强烈建议客户一定要使用此功能,加载此功能模块后,具备如下功能:

1.       可以上报死机以及重启异常到调试服务器

2.       如果打开了errDump. setNetworkLog(true)开关,可以上报网络和socket应用异常到调试服务器

 

 

第五章 总结

如果无法输出日志,则根据设备管理器中的端口判断模块是否死机或者一直在反复重启

如果有日志输出,正则搜索如下信息,判断是否存在网络和socket应用异常

    EE LOG|traceback|\[E\]|errDump|CGSN|ATWMFT|CFUN|CPIN|CREG|CGREG|CEREG|CSQ|\^MODE|CGDCONT|conn error|send fail|MSG_SOCK_CLOSE_IND

    注意:以上字符串中的\notepad++中使用的转义字符,不同编辑器可能不同,根据使用的编辑器自行修改

  • 发表于 2019-08-01 16:58
  • 阅读 ( 4842 )
  • 分类:默认分类

你可能感兴趣的文章

相关问题

0 条评论

请先 登录 后评论
不写代码的码农
朱天华

软件工程师

19 篇文章

作家榜 »

  1. 技术销售Delectate 43 文章
  2. 陈夏 26 文章
  3. 国梁 24 文章
  4. miuser 21 文章
  5. 晨旭 20 文章
  6. 朱天华 19 文章
  7. 金艺 19 文章
  8. 杨奉武 18 文章