MI LDC DEBUG SOP¶
REVISION HISTORY¶
| Revision No. | Description |
Date |
|---|---|---|
| 1.00 | 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 分析。
-
关闭cmdq reset。
# 添加"bEnableCmdqReset":false 内容到sys的节点 vi /config/modparam.json; # 重启 sync; reboot; -
重新运行app,待问题复现,保留现场。
请抓取从 app 开始运行到问题复现期间,完整的串口 log 和 kmsg 信息。
-
执行如下命令,抓取信息给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分析。
-
开启 mmu debug 选项。
# 添加"debugMmu":1,"g_bEnableMiuProtect":0 内容到sys的节点 vi /config/modparam.json; # 重启 sync; reboot; -
打开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