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.

[参考译文] 帮助使用 RPMsg 在 Cortex-A72 和 C71x DSP 之间进行 IPC 通信

Guru**** 2419530 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1533051/help-with-ipc-communication-between-cortex-a72-and-c71x-dsp-using-rpmsg

部件号:BEAGL-BONE-AI–64


工具/软件:

您好、

我正在使用“ti-cgt-c7000_5.0.0.LTS “编译器、并使用 remoteproc 和 rpmsg 在 BeagleBone AI-64 上的 Cortex-A72 和 C71x DSP 之间建立 IPC 通信。

我的目标是让 DSP C71x 在从 Cortex-A72 收到“开始“消息时向 Cortex-A72 发送“hello world“消息。 我使用ipc.h" Processor SDK RTOS 中“定义的函数开发了 DSP 代码 (ti-processor-sdk-rtos-j721e-evm-11_00_00_06)、并.out使用随附的 Makefile 成功构建了一个文件。

但是、当将.out 文件发送到 BeagleBone ai 64 并尝试在 DSP 上部署时、会收到以下错误:

Debian@BeagleBone:~$sudo scp dsp_rpmsg_hello.out /lib/firmware
debian 的[sudo]密码:  
Debian@BeagleBone:~$ sudo echo stop >/sys/class/remoteproc/remoteproc14/state
Debian@BeagleBone:~$ sudo echo dsp_rpmsg_hello.out >/sys/class/remoteproc/remoteproc14/firmware
Debian@Beaglebone:~$ cat /sys/class/remoteproc/remoteproc14/firmware
dsp_rpmsg_hello.out
Debian@BeagleBone:~$ sudo echo start >/sys/class/remoteproc/remoteproc14/state
echo:写入错误:参数无效
 

//this is "dsp_hello.c" file which when i make it using the makfile i get "dsp_rpmsg_hello.out"

#include <stdio.h>
#include <stdint.h>
#include <string.h>
#include <c7x.h>
#include <ipc.h>         //ipc.h :ti/drv/ipc/ipc.h
#include "ipc_rsctable.h"
#define BUF_SIZE 128
#define REMOTE_PROC_ID 0  // Linux on A72
#define LOCAL_SERVICE_NAME "dsp_service"

uint8_t recv_buf[BUF_SIZE];
uint8_t send_buf[BUF_SIZE];

int main(void)
{
    RPMessage_Handle handle;
    RPMessage_Params params;
    
    uint32_t myEndPt;
    uint32_t remoteEndPt;
    uint32_t remoteProcId;
    uint16_t recv_len;
    int32_t status;

    // Initialize IPC with default parameters
    Ipc_init(NULL);

    // Initialize RPMessage module
    RPMessageParams_init(&params);
    params.requestedEndpt = 0;  // Let the driver assign an endpoint
    params.numBufs = 16;        // Adjust as needed
    params.bufSize = BUF_SIZE;  // Adjust as needed

    // Create an RPMessage endpoint
    handle = RPMessage_create(&params, &myEndPt);
    if (handle == NULL) {
        return -1;  
    }

    // Announce our endpoint to A72
    status = RPMessage_announce(REMOTE_PROC_ID, myEndPt, LOCAL_SERVICE_NAME);
    if (status != IPC_SOK) {
        return -1;  
    }

    while (1) {
        // Wait for message from A72
        status = RPMessage_recv(handle, recv_buf, &recv_len, &remoteEndPt, &remoteProcId, (uint32_t)-1); //-1: time IPC_WAIT_FOREVER 
        if (status == IPC_SOK) {
            if (strncmp((char *)recv_buf, "start", 5) == 0) {
                strcpy((char *)send_buf, "Hello World from DSP!");
                RPMessage_send(handle, remoteProcId, remoteEndPt, myEndPt, send_buf, strlen((char *)send_buf) + 1);
            }
        } else {
            break;
        }
    }

    return 0;
}
#Makefile
# Compilateur TI pour C71xx
CC = /opt/ti-cgt-c7000_5.0.0.LTS/bin/cl7x
#LD = lnk7x

CFLAGS = --c11 -mv7120 --opt_level=3 -g --define=SOC_J721E --define=CORE_DSP_C7_1 \
         --include_path=./ \
         --include_path=/opt/ti-cgt-c7000_5.0.0.LTS/include \
         --include_path=/home/chaima/ti/j7/ti-processor-sdk-rtos-j721e-evm-11_00_00_06/pdk_jacinto_11_00_00_21/packages/ti/drv/ipc \
         --include_path=/home/chaima/ti/j7/ti-processor-sdk-rtos-j721e-evm-11_00_00_06/pdk_jacinto_11_00_00_21/packages/ 
  
LDFLAGS = -z --entry_point=main --heap_size=0x800 --stack_size=0x800
INCLUDES = -I/opt/ti-cgt-c7000_5.0.0.LTS/include/
LIB_DIR = /opt/ti-cgt-c7000_5.0.0.LTS/lib/
      
# Fichiers sources
SRCS = dsp_hello.c 
OBJS = $(SRCS:.c=.obj)
OUT = dsp_rpmsg_hello.out

# Cible par défaut
all: $(OUT)

# Règle de compilation
%.obj: %.c
	$(CC) $(CFLAGS) -c $< -o $@ 

# Édition des liens
$(OUT): $(OBJS)
	$(CC) $(CFLAGS) $(LDFLAGS) $(OBJS) -o $@ \
    -l /home/chaima/ti/j7/ti-processor-sdk-rtos-j721e-evm-11_00_00_06/pdk_jacinto_11_00_00_21/packages/ti/drv/ipc/lib/j721e/c7x_1/release/ipc.ae71 \
	-l /home/chaima/ti/j7/ti-processor-sdk-rtos-j721e-evm-11_00_00_06/pdk_jacinto_11_00_00_21/packages/ti/csl/lib/j721e/c7x/release/ti.csl.init.ae71 \
	-l /home/chaima/ti/j7/ti-processor-sdk-rtos-j721e-evm-11_00_00_06/pdk_jacinto_11_00_00_21/packages/ti/csl/lib/j721e/c7x/release/ti.csl.init.ae71 \
	-l /home/chaima/ti/j7/ti-processor-sdk-rtos-j721e-evm-11_00_00_06/pdk_jacinto_11_00_00_21/packages/ti/osal/lib/nonos/j721e/c7x/release/ti.osal.ae71 \
	-l /home/chaima/ti/j7/ti-processor-sdk-rtos-j721e-evm-11_00_00_06/pdk_jacinto_11_00_00_21/packages/ti/drv/sciclient/lib/j721e/c7x_1/release/sciclient.ae71 \
	-l /home/chaima/ti/j7/ti-processor-sdk-rtos-j721e-evm-11_00_00_06/pdk_jacinto_11_00_00_21/packages/ti/board/lib/j721e_evm/c7x/release/ti.board.ae71 \
	-l /opt/ti-cgt-c7000_5.0.0.LTS/lib/rts7120_le.lib 
# Nettoyage
clean:
	rm -f $(OBJS) $(OUT)

您能否帮助我了解此错误的原因以及如何解决? 我们非常感谢为帮助我实现预期目标而提供的任何指导或资源。

此致、
Chaima Ben Fredj

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、  

    指定的专家目前已离职、7 月 1 日返回。 请预计回复会延迟。

    此致、

    Josiitaa

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好:

    我们支持为 SDK 和 EVM 板编写的软件。

    您正在使用 SDK 吗?  

    您应加入 BeagleBoard Discord 来跟随当前为 EdgeAI 提供支持的工作。

    此致

    Tarun Mukesh

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我正在使用的器件  sdk-rtos-j721e-evm-11_00_00_06

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、

    了解这方面的内容、但 TI 不提供 Beagle Board 的软件支持、它在器件本身中突出显示

    此致

    Tarun Mukesh