跳转至

MI LDC DEBUG SOP


REVISION HISTORY

Revision No.
Description
Date
1.00
  • Initial release
  • 2024.2.22

    1. 前言

    本文档旨在介绍遇到MI LDC相关问题时,如何进行初步排查,快速定位问题,以及确定是SGS SDK问题后,需提供哪些信息给RD或者FAE分析。

    2. 矫正效果异常

    • dump输入。

      使用命令 echo dumpinputtask <chnid> 1 1 <file_dump_path> > /proc/mi_modules/mi_ldc/mi_ldc0 保存输入图像,查看输入图像是否异常。

    • 核对参数。

      矫正效果不理想时,请参考Sigdoc中的

    • 核对CalibPloy_new.bin文件。

      LDC需要标定生成的CalibPloy_new.bin,如果该文件和镜头不匹配,矫正效果也有可能会异常。

    如以上都没有问题,请根据其他问题的处理方法,提供完整信息给RD或者FAE分析。

    3. LDC 卡住

    LDC卡住 时,一般会出现掉帧、断流,并刷如下log:

    # 情况1: LDC 处理线程卡住
    [MI WRN] _MI_SYS_Pass_WorkerThreadTimeoutMonitor [mi_sys][5445]: mod23 dev0 pass1 infer timeout for 10 seconds
    # 情况2:output task卡住
    [MI WRN] MI_SYS_Pass_InternalMainWorkerThread [mi_sys][5941]: [ldc0_P1_MAIN]ROOT mod23 pass1 s64CurTimeInNS[1269250035151] s64TimeToSleepInNS[100000000] no wakeup event for more than 5 seconds!
    [MI WRN] _MI_SYS_Pass_TryDequeueOutputTaskNoLock [mi_sys][6066]:  [thread:ldc0_P1_MAIN] mod[23] dev[0] pass[1] chn[0] outputtask's fence is not finished more than 10160ms
    [MI WRN] _MI_SYS_Pass_DebugDumpOutputTaskFence [mi_sys][367]: [0:c17ac600 c06a3e50] fence1
    [MI WRN] _MI_SYS_Pass_DebugDumpOutputTaskFence [mi_sys][367]: [1:c17acb00 c06a3e70] fence2
    # 情况3:input task卡住
    [MI WRN] _MI_SYS_Pass_TryDequeueInputTaskNoLock [mi_sys][3261]:  [thread:ldc0_P1_MAIN] mod[23] dev[0] pass[1] chn[0] inputtask's fence is not finished more than 10520ms
    [MI WRN] _MI_SYS_Pass_DebugDumpInputTaskFence [mi_sys][350]: [0:c069e180 c06a3e40] fence1 pulseindex-1
    [MI WRN] _MI_SYS_Pass_DebugDumpInputTaskFence [mi_sys][350]: [1:c069e240 c06a3e60] fence2 pulseindex-1
    

    请依照以下场景与对应方法,抓信息给RD或者FAE分析。

    # 情况1: LDC处理线程卡住
    cat /proc/kmsg; # 建议新开个telnet抓取kmsg
    echo show_threads > /proc/mi_modules/mi_sys/mi_sys0;
    
    # 情况2:output task卡住
    # 情况3:input task卡住
    /customer/riux32_r 0x1038;
    /customer/riux32_r 0x1b28;
    /customer/riux32_r 0x1b29;
    echo 7 > /proc/mi_modules/mi_ldc/debug_level;
    find /proc/mi_modules/mi_*/mi_* | xargs cat; # 间隔一定时间,执行多次
    

    4. CMDQ Timeout

    LDC 发生 CMDQ Timeout 时,会有如下打印:

    [CMDQ]cmdq(4) ERR: POLLNEQ_TIMEOUT (0x00008100)
    [CMDQ]Cmd data = 0x2000 : 0x0000 : 0x0000 : 0xFFFE
    [CMDQ]Cmd:WAIT, dbg:0, adr:000000, dat:0000, mask:fffe
    [CMDQ]Wait command timeout. Trigger_Bus Bit [0] Event [LDC_FEYE_TRIG0]
    

    请根据以下步骤,抓取信息给 RD或者FAE 分析。

    1. 关闭cmdq reset。

      # 添加"bEnableCmdqReset":false 内容到sys的节点
      vi /config/modparam.json;
      # 重启
      sync;
      reboot;
      
    2. 重新运行app,待问题复现,保留现场。

      请抓取从 app 开始运行到问题复现期间,完整的串口 log 和 kmsg 信息。

    3. 执行如下命令,抓取信息给RD或者FAE分析。

      /customer/riux32_r 0x1038;
      /customer/riux32_r 0x1b28;
      /customer/riux32_r 0x1b29;
      find /proc/mi_modules/mi_ldc/mi_* | xargs cat;
      

    5. 踩内存

    如发现 log 中有如下类似打印,且有Name=LDC字段,则 LDC 发生踩内存。

    [MI WRN] MI_SYS_Mma_MmuCallback [mi_sys][365]: [MI_SYS_Mma_MmuCallback] Status=0x2, PhyAddr=0x41220000, ClientId=0x15,Name=LDC IsWrite=0
    
    [MI WRN] MI_SYS_Mma_MmuCallback [mi_sys][365]: [MI_SYS_Mma_MmuCallback] Status=0x6, PhyAddr=0x413c0000, ClientId=0x15,Name=LDC IsWrite=1
    

    依照以下步骤下配置并抓取信息给RD或者FAE分析。

    1. 开启 mmu debug 选项。

      # 添加"debugMmu":1,"g_bEnableMiuProtect":0 内容到sys的节点
      vi /config/modparam.json;
      # 重启
      sync;
      reboot;
      
    2. 打开mmu的log开关,抓取kmsg信息。

      # enable mmu log
      echo debug_mmu debug_log 1 1 1 23 > /proc/mi_modules/mi_sys/mi_sys0;
      # 抓取app运行时的kmsg,且要有踩内存的log
      cat /proc/kmsg;
      

    6. 其他问题

    对于本文档没有记录的问题,请提供以下信息给RD或者FAE分析。

    • 提供pipline信息,提供背景信息。
    • 抓取日志,高概率的可提高MI_LDC debug level复现抓取。

      echo 7 > /proc/mi_modules/mi_ldc/debug_level;
      
    • 抓取寄存器信息。

      /customer/riux32_r 0x1038;
      /customer/riux32_r 0x1b28;
      /customer/riux32_r 0x1b29;
      
    • 抓取LDC输入、输出和算法bin。

      echo dumpalgobin <chnid> all <file_dump_path> > /proc/mi_modules/mi_ldc/mi_ldc0
      echo dumpinputtask <chnid> 1 1 <file_dump_path> > /proc/mi_modules/mi_ldc/mi_ldc0
      echo dumpoutputtask <chnid> 1 1 <file_dump_path> > /proc/mi_modules/mi_ldc/mi_ldc0
      
    • 提供pipline所有模块的procfs。

      find /proc/mi_modules/mi_*/mi_* | xargs cat