This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

TDA4VM-Q1: linux下C66/C7X的启动和应用

Part Number: TDA4VM-Q1

目前我看到再启动过程中,会加载/lib/firmware下的DSP和MCU的固件,这些固件是链接到了/lib/firmware/vision_apps_eaik目录下对应的.out文件,目前有以下几个问题:

1.这些固件是在哪里编译出来的?是不是在vision_apps\platform\j721e\rtos目录下的对应文件编译出来的?

2.这些固件是会启动RTOS的,还是只是DSP或者MCU的APP应用,如果这些只是dsp或者mcu的APP,那么dsp或者MCU的RTOS是什么时候启动的?

3.我在板子的linux命令行下直接执行这些.out文件,发现执行不了,比如执行vx_app_rtos_linux_c6x_1.out,会提示-sh: ./vx_app_rtos_linux_c6x_1.out: Permission denied,实际上是root账号登录的,应该不是权限的问题,这些是如何加载的?

4.如果我要把我的算法放到dsp上去做计算,是不是把算法的代码参考这里的代码流程跑起来就可以了?

  • 您好,您的问题我们升级到英文论坛看下,链接如下:

    e2e.ti.com/.../tda4vm-q1-boot-and-application-for-c66-c7x-under-linux

  • 1.这些固件是在哪里编译出来的?是不是在vision_apps\platform\j721e\rtos目录下的对应文件编译出来的?

    这些固件在我们构建 vision_apps 时进行编译。 您可以在 VISION_APPS/OUT/J7目录中找到它。

    2.这些固件是会启动RTOS的,还是只是DSP或者MCU的APP应用,如果这些只是dsp或者mcu的APP,那么dsp或者MCU的RTOS是什么时候启动的?

    这些 MCU/DSP 固件将启动 RTOS 并执行所有基于 RTOS 的初始化,如 IPC、Memory 等,然后运行任何应用程序(如果有)。 这些通常用作 OpenVX 框架中的目标,特定节点将会在这些内核上运行。 

    3.我在板子的linux命令行下直接执行这些.out文件,发现执行不了,比如执行vx_app_rtos_linux_c6x_1.out,会提示-sh: ./vx_app_rtos_linux_c6x_1.out: Permission denied,实际上是root账号登录的,应该不是权限的问题,这些是如何加载的?

    这是基于引导流程的。 在 SPL 引导流程中,通常 u-boot 会加载这些固件;在 SBL 引导流程中,SBL 会加载这些固件。 

    4.如果我要把我的算法放到dsp上去做计算,是不是把算法的代码参考这里的代码流程跑起来就可以了?

    您是否使用任何 OpenVX 框架来运行算法? 通常在 SDK 中,您会发现要在 DSP 上运行的算法(如加法、减法等)通常采用 OpenVX 节点的形式,这些节点可以在内核上运行。 

    详细答复请见英文论坛。

  • 这些固件在我们构建 vision_apps 时进行编译。 您可以在 VISION_APPS/OUT/J7目录中找到它。

     VISION_APPS/OUT/J7下是编译出来的固件,我想了解一下固件的源码在哪里?

    这些 MCU/DSP 固件将启动 RTOS 并执行所有基于 RTOS 的初始化,如 IPC、Memory 等,然后运行任何应用程序(如果有)。 这些通常用作 OpenVX 框架中的目标,特定节点将会在这些内核上运行。

    所谓的特定节点是指什么意思?能详细说一下么?

  •  VISION_APPS/OUT/J7下是编译出来的固件,我想了解一下固件的源码在哪里?

     源码您可以在这里找到:${PSDKRA}/vision_apps/platform/j721e/rtos/${CORE}/main.c where ${CORE} = mcu1_x, mcu2_x, C7x_1, c66_x etc.

    所谓的特定节点是指什么意思?能详细说一下么?

    指的是这里的 OpenVX 节点。 标准 OpenVX 节点(如加减等)将作为目标在 DSP 上运行(即应用程序将在 A72上运行,而 DSP 操作(加减等) 将发生在 DSP 内核上。

    在 C7x 上,我们使用 TIDL 节点来运行 DL 算法。 我们有许多 SDK demo供用户参考,这些demo可在 vision_apps/apps/dl_demos 中找到。

  • 指的是这里的 OpenVX 节点。 标准 OpenVX 节点(如加减等)将作为目标在 DSP 上运行(即应用程序将在 A72上运行,而 DSP 操作(加减等) 将发生在 DSP 内核上。

    我还是对lib/firmware/下C66,C7X的固件和openvx节点之间的关系感到困惑,我自己的算法是要放到固件上实现,还是放到openvx节点上来实现?这些固件和如何实现和节点或者说是A72实现交互的?

    另外openvx我理解应该是对图像处理的一些算法,我的项目上是准备对ADC采集的数据做运算的算法,是不是用不了openvx或者TIDL?

  • 简单来说,如果您不使用 OpenVX 框架,只是想在 C66/C7x 上实现您的算法,您可以在相应内核的 main.c 中添加一个任务 (i.e, ${PSDKRA}/vision_apps/platform/j721e/rtos/${CORE}/main.c). 

    这是您目前想要实现的吗?

    OpenVX 框架的意思是,可以添加相同的实现作为节点,并在 C66/C7x 上作为目标运行。 它的优势是有一个预定义的框架,可以在内核之间进行缓冲区分配和缓冲区传输。 如果您的usecase与此无关,您就可以自行分配缓冲区,并且不需要将数据传输到另一个内核,或者说您已经有一个机制来实现,那么就不需要使用 OpenVX。 

  • 简单来说,如果您不使用 OpenVX 框架,只是想在 C66/C7x 上实现您的算法,您可以在相应内核的 main.c 中添加一个任务 (i.e, ${PSDKRA}/vision_apps/platform/j721e/rtos/${CORE}/main.c). 

    这种方式就是如果内核之间需要传递数据的话就要走IPC方式来传递数据,OpenVX的框架是基于内核之间有共享的内存缓冲区,可以通过内存缓冲区来传递数去,可以不用IPC的方式,OpenVX的效率会更高是吧?

    openVX里有没有demo是DSP和A72之间实现某种算法并且传输数据的?

  • 这种方式就是如果内核之间需要传递数据的话就要走IPC方式来传递数据,OpenVX的框架是基于内核之间有共享的内存缓冲区,可以通过内存缓冲区来传递数去,可以不用IPC的方式,OpenVX的效率会更高是吧?

    是的,如果数据必须在内核之间共享,OpenVX 会效率会更高,因为框架本身会处理这一问题。

    openVX里有没有demo是DSP和A72之间实现某种算法并且传输数据的?

    您可以参考${PSDKRA}/tiovx/tutorials中提供的教程

    例如,${PSDKRA}/tiovx/tutorial/ch02_image/vx_tutorial_image_color_convert.c, vxColorConvertNode 和 vxChannelExtractNode 是在 C66x 上运行的算法,分别用于转换图像格式和提取图像的通道。 但是图像的存储器分配是发生在共享存储器区域的 A72中,这些分配的图像用于 C66x 中。

    同样,用户可以创建自己的内核来实现其算法,如以下链接:

    https://software-dl.ti.com/jacinto7/esd/processor-sdk-rtos-jacinto7/latest/exports/docs/tiovx/docs/user_guide/TIOVX_TARGET_KERNEL.html