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.

[FAQ] PROCESSOR-SDK-DRA8X-TDA4X: Error with new node in OpenVX

Part Number: PROCESSOR-SDK-DRA8X-TDA4X

When I try to create a new node in OpenVX, I get the following error message on the target CPU:

"tivxTargetKernelInstanceAlloc: kernel <kernel name> has not been registered on this CPU"

I also get the following error message on the host CPU:

38.578923 s: VX_ZONE_ERROR:[ownContextSendCmd:776] Command ack message returned failure cmd_status: -7
38.578937 s: VX_ZONE_ERROR:[ownContextSendCmd:812] tivxEventWait() failed.
38.578943 s: VX_ZONE_ERROR:[ownNodeKernelInit:526] Target kernel, TIVX_CMD_NODE_CREATE failed
38.578949 s: VX_ZONE_ERROR:[ownGraphNodeKernelInit:583] kernel init for node 0, kernel org.khronos.openvx.<my_kernel>... failed !!!
38.578955 s: VX_ZONE_ERROR:[vxVerifyGraph:2010] Node kernel init failed
38.578961 s: VX_ZONE_ERROR:[vxVerifyGraph:2064] Graph verify failed

How do I fix this issue?

  • Each kernel in OpenVX is a part of a "kernel module".  Each kernel module must be loaded on the host CPU side as well as the target CPU which this kernel is executed on.  The reason for loading each kernel module on both host and target CPU's is that each kernel requires both host and target CPU callbacks to be registered with the framework.

    This particular issue is due to the kernel module not being loaded on the target CPU.  Therefore, the kernel module register target callbacks function must be called during init time of the target core.  This API will most likely be called tivxRegister<Target Kernel Name>Kernels. 

    For example, the sample surround view kernels within vision apps are contained within the surround view kernel module.  This kernel module contains target kernels which are executed on both the C66 and A72 cores.  Therefore, the target kernels must be registered on both the C66 and A72 cores during init time for each of these cores.  In order to do so, the tivxRegisterSrvTargetC66Kernels function is called at init time of the C66 core and the tivxRegisterSrvTargetGpuKernels is called at init time of the A72 core.

    If using the vision_apps project, the init function where each of these register functions is located can be found at the path "vision_apps/apps/basic_demos/app_tirtos/common/app_init.c"