K230 双系统 调试

Viewed 76

问题描述


双系统应该是能最大化发挥系统硬件功能的方式,其他单系统只有一个大核在运行,但目前仍然没有看到 rt-smart 应用 的成熟调试手段,CKLINK 能够连接,后续实操介绍完全缺乏。公司是否对这个系统定位就是 PYTHON应用为主,用于学生快速上手参赛及教学实验?

1 Answers

你好,RTOS可以使用cklink进行调试的。

这个有链接参考吗, RT-SMART 调用应用程序后进入用户态,地址和编译结果有差别,导致无法调试应用程序,是否有处理这个问题教程

纯RT-Smart可以调试内核也可以调试用户态程序:

  1. 如果想要有调试信息,需要编译一个未 strip的版本。
  2. 直接使用hbreak,不要使用 break,如果一定要使用 break,先用 hbreak 在进程入口断下来,保证进程代码已经被 load 进内存且建立了页表映射。
  3. 使用具体的步骤可以参考下面(具体路劲简化,0x200000000 是默认用户态入口地址):
    a. riscv64-unknown-linux-musl-gdb rtthread.elf --tui
    (gdb) target remote ip_addr:port
    (gdb) add-symbol-file app.elf 0x200000000
    (gdb) hbreak *0x200000000
    (gdb) hbreak function
    (gdb) c
    b. 在板端串口终端上执行对应的 app.elf: ./app.elf
    c. 此时应该能看到断点断下来了

PS: rtthread.elf 是内核,app.elf 是你的应用程序

如果是纯Rt-Smart的话,有一点需要注意就是需要将这行屏蔽掉:
diff --git a/kernel/bsp/maix3/app_canmv/main.c b/kernel/bsp/maix3/app_canmv/main.c
index 9ebd486..de930cd 100644
--- a/kernel/bsp/maix3/app_canmv/main.c
+++ b/kernel/bsp/maix3/app_canmv/main.c
@@ -299,7 +299,9 @@ static void auto_exec_trusted_preload(const char *cmd_line)
}

int main(void) {
+#if 0
sysctl_pwr_off(SYSCTL_PD_CPU0);
+#endif
sysctl_pwr_off(SYSCTL_PD_DPU);

rt_kprintf("\n#############SDK VERSION###################################

不然的话,会应为cpu0被关掉了,导致DebugServer 访问cpu0失败,最终连cpu1也不去detect