当前位置: 首页 > news >正文

征程 6X VDSP 调试方法

一、日志查看

VDSP FW 的日志默认输出到串口中,用户可直接查看串口。但是 VDSP

FW 日志和 kernel 日志都会输出到串口中,存在相互干扰的问题,用户可通过降低 kernel 日志等级来防止日志干扰:

echo 0 > /proc/sys/kernel/printk

当没有串口可用的情况下,用户可通过 ssh 登录板子,后台默认会启动 hrut_remoteproc_log 服务:

#J6X VDSP0 默认开机执行的启动命令,日志保存路径:/log/dsp0/message

hrut_remoteproc_log -b /sys/class/remoteproc/remoteproc1/log -f /log/dsp0/message -r 2048 -n 200

#J6X VDSP1 默认开机执行的启动命令,日志保存路径:/log/dsp1/message

hrut_remoteproc_log -b /sys/class/remoteproc/remoteproc2/log -f /log/dsp1/message -r 2048 -n 200

VDSP FW 的日志会写入 Share

memory 中,由 CPU 侧 log 服务进程存入文件系统中。因此用户可查看以下路径下的文件查看日志,但是需要注意的是这里的日志并不是实时的。

#J6X VDSP0 的日志路径:

/log/dsp0/message,

/log/dsp0/archive/

#message 是临时文件,存满之后会写入到 archive/目录下,当该目录下的文件达到一定数量后,会被压缩放到 tar_log/目录下

#对应 J6X VDSP1 的日志路径:

/log/dsp1/

二、线程状态查看

通过以下命令可在串口中查看 VDSP 侧的线程状态。需要注意的是以下数据的统计和输出可能会影响 VDSP 的性能。

使用方法:首先需要代码中使能#define THREAD_STACK_CHECK

(1),其次需要在新启动的线程前使能栈跟踪,如下所示:

(void)hb_enable_stack_track(dev_thread_stack, sizeof(dev_thread_stack)/sizeof(dev_thread_stack[0]));

#J6X VDSP0:

echo on > /sys/devices/virtual/misc/vdsp0/vdsp_ctrl/dspthread

echo off > /sys/devices/virtual/misc/vdsp0/vdsp_ctrl/dspthread

#J6X VDSP1:

echo on > /sys/devices/virtual/misc/vdsp1/vdsp_ctrl/dspthread

echo off > /sys/devices/virtual/misc/vdsp1/vdsp_ctrl/dspthread

三、coredump 查看

和 coredump 相关的系统软件初始化主要有两部分:注册异常和使能看门狗。

hb_wdt_on();

hb_enable_coredump();

目前 xos 能够处理的异常类型如下:

/*  EXCCAUSE register values:  */
/*  General Exception causes (Bits 3:0 of EXCCAUSE register)  */
/* No exception */
#define EXCCAUSE_NONE                   UINT32_C(0)
/* Instruction usage */
#define EXCCAUSE_INSTRUCTION            UINT32_C(1)
/* Addressing usage */
#define EXCCAUSE_ADDRESS                UINT32_C(2)
/* External causes */
#define EXCCAUSE_EXTERNAL               UINT32_C(3)
/* Debug exception */
#define EXCCAUSE_DEBUG                  UINT32_C(4)
/* Syscall exception */
#define EXCCAUSE_SYSCALL                UINT32_C(5)
/* Hardware failure */
#define EXCCAUSE_HARDWARE               UINT32_C(6)
/* Memory management */
#define EXCCAUSE_MEMORY                 UINT32_C(7)
/* Coprocessor */
#define EXCCAUSE_CP_DISABLED            UINT32_C(8)
/*  Reserved 9-15  */

不应在 VQ8 上为异常原因 4(调试异常)/5(SYSCALL 异常)/8(协处理器异常)注册异常处理程序,为系统预留使用。

需要注意的是:9-15 为预留类型,也需要略过不注册。

离线调试方法如下:

VDSP 发生 coredump 时,Acore 会把 Vdsp 所有可能使用的 memory 空间(iram/dram0/dram1/reserved

ddr)全部写入指定的文件系统中,路径如下:

#vdsp0

/log/coredump/

#vdsp1

/log/coredump/

新建 restore.script.sh 脚本,4 个 memeory

dump 文件的路径根据实际项目的存放路径设置,把获得到的 CPU 寄存器复制到该脚本对应处,如下所示:

python import thread_aware_rtos
python thread_aware_rtos.k.rtos_support.dump_analysis_mode = True
b main
run
restore vdsp0_ddr_2024-05-06-02-50-03.hex binary 0xf0000000
restore vdsp0_iram_2024-05-06-02-50-03.hex binary 0x08080000
restore vdsp0_dram0_2024-05-06-02-50-03.hex binary 0x08000000
restore vdsp0_dram1_2024-05-06-02-50-03.hex binary 0x08040000
set $ar0 = 0xf00502a8
set $ar1 = 0xf3fdded0
set $ar2 = 0xf3fddd00
set $ar3 = 0x34
set $ar4 = 0x1b
set $ar5 = 0x5d
set $ar6 = 0x53
set $ar7 = 0x58
set $ar8 = 0xf0050192
set $ar9 = 0xf3fddeb0
set $ar10 = 0x4f
set $ar11 = 0xf3fddd00
set $ar12 = 0x0
set $ar13 = 0xf3fddee0
set $ar14 = 0xf3fddce0
set $ar15 = 0xf3fddd1b
set $ar16 = 0xf0065978
set $ar17 = 0xf3fddb60
set $ar18 = 0x4f
set $ar19 = 0xf002bea4
set $ar20 = 0x0
set $ar21 = 0xffffffb1
set $ar22 = 0x4f
set $ar23 = 0xffffffff
set $ar24 = 0x808100f
set $ar25 = 0xf3fddf00
set $ar26 = 0xf3fddf10
set $ar27 = 0x53113
set $ar28 = 0xf0050280
set $ar29 = 0xffffffff
set $ar30 = 0x0
set $ar31 = 0xf3fddf70
set $ps = 0x68
set $wb = 0x40000311
set $pc = 0xf0050057
python thread_aware_rtos.k.rtos_support.XOS_initialized = True

打开 xt-gdb 命令行(xplorer 或者命令行模式均可),按照顺序执行如下操作:

xt-gdb vdsp0 (可执行文件的目标文件)

(xt-gdb) >> source restore.script.sh

(xt-gdb) >> run

ctrl+c //取消运行

(xt-gdb) >> stepi

(xt-gdb) >> info threads

(xt-gdb) >> bt

backtrace 调试信息显示如下:

(xt-gdb) bt
#0  _RMCDump () at /vdsp/bsp_project/coredump/RegDump.S:90
#1  0xf0050192 in Exc_Dump_Regs () at bsp_project/coredump/Exc_Dump_Regs.c:110
#2  0xf00502a8 in dafault_exchandler (frame=0xf3fddf10) at bsp_project/coredump/coredump.c:125
#3  0x0808100f in _GeneralException (cause=..., exccause=...) at ./xos_vectors_xea3_v2.S
#4  0xf00504b8 in hb_platform_init () at bsp_project/driver/devcontrol/devcontrol.c:152
#5  0xf0030306 in main (argc=1, argv=0xf0073704) at main.c:68

四、Stack usage 查看

Stack usage 的说明建议阅读 Xtensa® XOS Reference Manual Reference Manual。

五、MPU 配置

目前部署的 MPU 主要两个作用,一是用来限制 vdsp 访问地址的范围,访问超过 MPU 允许的范围会报 coredump 错误,第二个作用是可以配置地址段的属性,详细介绍请参考 Xtensa®

System Software Reference Manual.

vdsp 地址映射以及 MPU 保护部分如下图所示,访问 MPU 保护地址范围会报 coredump 错误。

Description

报错 log 如下图所示,错误地址为 0x0,表示访问了不允许访问的地址;

Description

目前对于 vdsp 地址的属性配置,主要包括三个部分:

(1)对于 ION 空间的属性配置: XTHAL_MEM_WRITEBACK

(2)对于两个共享内存区域的属性配置:XTHAL_MEM_NON_CACHEABLE

(3)对于除(1)(2)外其他段的属性配置:XTHAL_MEM_WRITEBACK

六、算子开发

算子开发相关参考

七、Cadence 文档路径位置

7251)]

目前对于 vdsp 地址的属性配置,主要包括三个部分:

(1)对于 ION 空间的属性配置: XTHAL_MEM_WRITEBACK

(2)对于两个共享内存区域的属性配置:XTHAL_MEM_NON_CACHEABLE

(3)对于除(1)(2)外其他段的属性配置:XTHAL_MEM_WRITEBACK

六、算子开发

算子开发相关参考

七、Cadence 文档路径位置

安装 Xplorer 后,可通过如下位置 xtensa\XtDevTools\downloads\RI-2023.11\docs 查看已下载的文档路径。

相关文章:

  • macOS 风格番茄计时器:设计与实现详解
  • 4.8.1 利用Spark SQL实现词频统计
  • mp中的密码处理
  • 设计模式-依赖倒转原则
  • 【Bluedriod】蓝牙协议栈 btm_init 源码解析
  • 【生产实践】Kibana控制台暴露风险:Nginx反向代理+权限控制实战方案(附避坑指南)
  • 一种经济实用的尖峰电压防护-PCB放电齿
  • GC1267F单相全波风扇电机预驱动器芯片详解
  • 【ArcGIS Pro微课1000例】0071:将无人机照片生成航线、轨迹点、坐标高程、方位角
  • Spring Boot 启动流程深度解析:从源码到实践
  • 高温炉制造企业Odoo ERP实施规划与深度分析报告
  • 免杀二 内存函数与加密
  • 影响沉金价格的因素如何体现在多层电路板制造上?
  • 智警杯备赛--数据库管理与优化
  • 基于stm32风速风向温湿度和瓦斯检测(仿真+代码)
  • 2025.05.28【读书笔记】|如何用SILVA和RFAM数据库高效去除rRNA污染
  • C++11:系统类型增强
  • Redis keydb dragonfly skytable
  • uni-app开发特殊社交APP
  • 人工智能在智慧物流中的创新应用与未来趋势
  • 怎样下载做网站的软件/小说关键词自动生成器
  • 正规打字赚钱网站/域名申请哪家好
  • 建设部网站示范文本/新营销模式有哪些
  • wordpress 类似博客/seo实战密码电子版
  • 学院网站建设流程/张文宏说上海可能是疫情爆发
  • 手机网站开发标准/济源新站seo关键词排名推广