TIOVX自定义节点的开发流程

TIOVX自定义节点的开发流程

一、使用PyTiovx脚本工具生成TIOVX框架

​ TI官方提供的SDK包里面提供了一项比较方便的功能,能够使用Python脚本生成TIOVX相关的框架内容,减少用户手动Coding的步骤。

​ 具体的详细操作步骤,可以查看以下链接:TIOVX User Guide: PyTIOVX User Guide

1.PyTiovx工具的python脚本create_my_tiovx.py,具体代码如下:

import sys
import os
curPath = os.path.abspath(os.path.dirname(__file__))
rootPath = os.path.split(curPath)[0]
sys.path.append(rootPath)
 
from tiovx import *
#以下一行代码设置存储文件夹名称myTiovx
#运行在A72核上,要运行在其他核,可以进入Core类查看其他核的名称
#生成的文件夹保存的路径:CUSTOM_APPLICATION_PATH 第一点导入的内容
code = KernelExportCode("my_tiovx", Core.A72, "CUSTOM_APPLICATION_PATH")
 
#设置Kernel名为myTiovxTest
kernel = Kernel("my_tiovx_test")
 
#设置参与的参数
kernel.setParameter(Type.IMAGE, Direction.INPUT, ParamState.REQUIRED, "INPUT")
kernel.setParameter(Type.IMAGE, Direction.OUTPUT, ParamState.REQUIRED, "OUTPUT")
 
#设置运行的目标核上,要运行在其他目标核上,也可以进入Target类查看
kernel.setTarget(Target.A72_0)
#导出kernel内容
code.export(kernel)

2.导入环境变量,路径根据自己的需要设置,这里选择的是官方SDK 包里面的vision_apps作为存放路径。

export CUSTOM_APPLICATION_PATH="~/ti-processor-sdk-rtos-j721e-evm-08_06_00_12/vision_apps"

3.Python脚本修改成功以后,可以执行此脚本。

python3 ~/py_tiovx/py/create_my_tiovx.py

4.运行完毕后会自动在~/vision_apps/kernels/目录下生成文件,如下图所示,本文先以a72核同时作为host端和target端为例,当其他核为target端时,操作步骤基本一致,不一致的地方会特别说明:
请添加图片描述
其中,在a72文件夹下:

文件名 功能说明
vx_kernels_mytiovx_target.c 用于注册所有的target kernels节点
vx_mytiovxtest_target.c 用于实现target端的处理过程

在host文件夹下:

文件名 功能说明
tivx_mytiovx_node_api.c 用于创建host的node节点
vx_kernels_mytiovx_host.c 用于注册所有的kernel节点
vx_mytiovxtest_host.c 用于实现具体的kernel处理过程

二、自定义节点的使用

1.host端注册

​ 在程序主函数main( )中完成host端的kernel注册:
请添加图片描述
tivxMytiovxLoadKernels( )函数位于~/vision_apps/kernels/mytiovx/host/vx_kernels_mytiovx_host.c文件内

2.target端注册

(1) Target端在A72核心上运行的话,那么同样也是在程序主函数main( )中完成target端的kernel注册:

请添加图片描述
tivxRegisterMytiovxTargetA72Kernels( )函数位于~/vision_apps/kernels/mytiovx/a72/vx_kernels_mytiovx_target.c文件内

(2) 如果是运行在其他内核,如C71或C66等,则在对应的初始化函数里注册,如使用的开发板为j721e,则在~/platform/j721e/rtos/common/app_init.c文件内进行target端注册,如在C66核进注册,如下图所示:
请添加图片描述

3.创建Node,并添加进Graph,然后运行起来

请添加图片描述

​ 执行以上三步,即可完成Host端/Target端的Kernel注册以及完成Node的创建,如上图所示为host端和target端都在A72核上运行。

4.相关库和头文件的链接

(1) 自定义的host和target端编译出来的头文件需要添加到host端A72中。

a.host端生成的头文件添加方法:

​ 在~/vision_apps/apps/concerto_a72_inc.mak中添加

VISION_APPS_KERNELS_IDIRS += $(VISION_APPS_PATH)/kernels/mytiovx/include
IDIRS += $(CUSTOM_APPLICATION_PATH)/kernels/mytiovx/host

​ 需将新生成的tivx_myc7xtiovx_kernels.h和tivx_myc7xtiovx_nodes.h放到~/tiovx/include/TI下,并在主程序中添加头文件

#include "mytiovx/include/TI/tivx_mytiovx.h"
#include "mytiovx/host/tivx_mytiovx_kernels_priv.h"

b.target端生成的头文件添加方法:

​ 将~/vision_apps/kernels/mytiovx/host/tivx_mytiovx_kernels_priv.h放到/vision_apps/platform/j721e/rtos/common目录下,并在app_init.c文件中添加头文件

#include "tivx_mytiovx_kernels_priv.h"

​ 在~/vision_apps/platform/j721e/rtos/concerto_c7x_inc.mak中添加

IDIRS += $(VISION_APPS_PATH)/kernels/myc7xtiovx/include
(2) 自定义的host和target端编译出来的库需要链接到对应的固件里。

a.host端生成的库链接:

​ host端对应A72核,则在~/vision_apps/apps/concerto_a72_inc.mak文件中链接上新生成的库

请添加图片描述

b.target端生成的库链接:

​ 如果target端为A72核,则将新生成的~/vision_apps/kernels/mytiovx/a72/vx_kernels_mytiovx_target.c和 vx_mytiovxtest_target.c放到主程序目录下,并在conerto.mak文件中链接上target端的注册函数

TARGET      := vx_app_test

CSOURCES    := main.c vx_kernels_mytiovx_target.c vx_mytiovxtest_target.c

如果target端是其他内核,如C66,则在~/vision_apps/platform/j721e/rtos/concerto_c6x_inc.mak文件中链接上新生成的库,c7x也类似
请添加图片描述

5.验证是否添加成功

​ 除了将交叉编译生成的程序vx_app_test.out放到开发板上,还需要将编译生成的libtivision_apps.so和libtivision_apps.so.8.6.0(对应sdk版本的库)替换开发板上/usr/lib/的libtivision_apps.so和libtivision_apps.so.8.6.0。

​ 除了a72核外,如果target端是在其他内核运行,则需要替换对应的固件,如C6x核,则将生成的~/vision_apps/out/J7/C66/

FREERTOS/release/vx_app_rtos_linux_c6x_1.out替换开发板上的/lib/firmware/vision_apps_evm/vx_app_rtos_linux_c6x_1.out,如c7x核,则将~/vision_apps/out/J7/C71/FREERTOS/release/vx_app_rtos_linux_c7x_1.out替换换开发板上的/lib/firmware/vision_apps_evm/vx_app_rtos_linux_c7x_1.out,替换完对应的固件,重启开发板即可运行新增的自定义节点。

验证方法:

(1) 在host端对用于实现具体的kernel处理过程函数vx_mytiovxtest_host.c中添加打印信息:

​ 在tivxAddKernelMytiovxtestValidate( )函数中添加打印信息。注意加上头文件#include <stdio.h>

请添加图片描述

运行结果如下:

请添加图片描述

(2) 在target端对用于实现具体的target处理过程函数vx_mytiovxtest_target.c中添加打印信息:

​ 修改target端的内容后,即可在运行Host端主进程后,自动调用Target的Kernel参与运行,Target端有四个回调函数,tivxMytiovxtestProcess是每执行一次Host端的Graph,都会执行一次。修改tivxMytiovxtestProcess,添加一个打印函数,如下图所示,注意如果要查看其他核的log信息,需要先执行source /opt/vision_apps/vision_apps_init.sh

请添加图片描述

请添加图片描述

target端的目标核为A72的运行结果如下:

请添加图片描述

target端的目标核为C66的运行结果如下:

请添加图片描述

target端的目标核为C7x的运行结果如下:

请添加图片描述

​ 验证成功后那么在之后的tiovx开发中就可以将自己编写的算法放到target端中的vx_mytiovxtest_target.c文件中的tivxMytiovxtestProcess( )函数中,将其封装成一个节点,方便后续的调用。

参考资料
[TI TDA4 J721E]TIOVX OpenVX框架下的Python脚本使用
[TI TDA4 J721E]TIOVX OpenVX 框架下Kernel注册/Node使用

猜你喜欢

转载自blog.csdn.net/j000007/article/details/132780122