Other Parts Discussed in Thread: SYSBIOS, OMAP-L138
工具/软件:Linux
大家好、我正在尝试创建一个类似于 IPC IPC_3_46_00_02中所示示示示例的设计
我已将资源表文件添加到 DSP 应用、并且能够运行 ex02_MessageQ 示例。
我已经安装了 SDK 4.0.0.4 for Linux、并检查 DTS Filr 以查看 CMA 池的设置为0xc3000000的位置、并且位置有两个缓冲区:
#define RPMSG_VRING0_DA 0xc3000000
#define RPMSG_VRING1_DA 0xc3004000
我遇到的问题如下:
IPC 中的示例 ex02禁用位置0xc3000000的高速缓存、并且整个 DSP 应用程序位于同一堆中。 我想将缓存用于 DSP 应用、并希望仅为 IPC 通信创建一个新堆。
我修改了资源表、如下所示:
#define DATA_DA1 0xc5000000
#ifndef DATA_SIZE
# define DATA_SIZE (SZ_1M * 15)
#endif
结构 my_resource_table{
struct resource_table base;
uint32 offset[4];
/* rpmsg vdev 条目*/
struct fw_RSC_vdev rpmsg_vdev;
struct fw_rsc_vdev_vring rpmsg_vring0;
struct fw_rsc_vdev_vring rpmsg_vring1;
/*数据分割条目*/
struct fw_RSC_carveout data_cout;
/*数据分割条目*/
struct fw_RSC_carveout data_cout1;
/*跟踪条目*/
结构 FW_RSC_TRACE 跟踪;
};
extern char XDC_runtime_sysmin_Module_State_0_outbuf__A;
#define TRACEBUFADDR (UINT32)&XDC_Runtime_SysMIN_Module_State_0_outbuf__A
#define TRACEBUFSIZE 0x8000
#pragma DATA_SECTION (ti_ipc_remoteproc_ResourceTable、".resource_table")
#pragma DATA_ALIGN (ti_ipc_remoteproc_ResourceTable、4096)
struct my_resource_table ti_ipc_remoteproc_ResourceTable ={
1、/*我们是实现此功能的第一个版本*/
4、/*表中的条目数*/
0、0、/*保留、必须为零*/
/*条目的偏移量*/
{
offsetof (struct my_resource_table、rpmsg_vdev)、
offsetof (struct my_resource_table、data_cout)、
offsetof (struct my_resource_table、data_cout1)、
offsetof (struct my_resource_table、trace)、
}、
/* rpmsg vdev 条目*/
{
TYPE_VDEV、virtio_ID_RPMSG、0、
RPMSG_DSP_features、0、0、0、2、 {0、0}、
/*无配置数据*/
}、
/*两个振铃*/
{RPMSG_VRING0_DA、4096、RPMSG_VQ0_SIZE、1、0}、
{RPMSG_VRING1_DA、4096、RPMSG_VQ1_SIZE、2、0}、
{
TYPE_CARVEOUT、DATA_DA、DATA_DA、DATA_SIZE、0、 "DSP_MEM_DATA"、
}、
{
TYPE_CARVEOUT、DATA_DA1、DATA_DA1、DATA_SIZE、0、 0、"DSP_MEM_Data1"、
}、
{
TYPE_TRACE、TRACEBUFADDR、TRACEBUFSIZE、0、"TRACE:DSP"、
}、
};
这添加 了地址 为0xc5000000的额外 TYPE_CARVEOUT
并在 DTS Linux 文件中进行了类似的更改:
保留存储器{
#address-cells =<1>;
大小单元格=<1>;
范围;
DSP_CMA_POOL:DSP_CMA@c3000000{
兼容="共享 dma-pool ";
reg =<0xc3000000 0x1000000>;
可重复使用;
状态="正常";
};
DSP_CMA_pool1:DSP_CMA_IPC@c5000000{
兼容="共享 dma-pool ";
reg =<0xc5000000 0x1000000>;
可重复使用;
状态="正常";
};
};
在 DSP.cfg 中,我还添加了:
VAR Cache = xdc.useModule('ti.sysbios.family.c64p.Cache');
cache.MAR192_223 = 0x00000008;
仅为 DSP 应用启用0xc3000000的缓存、并为 REST 禁用缓存(0xc5000000)。
当尝试从 Remoteproc 引导 DSP 时、我收到以下错误:
root@omapl138-lcdk:/sys/bus/platform/drivers/davinci-rproc echo davinci-rproc.0 > bind
davinci-rproc davi-rproc.0:分配的保留存储器节点 DSP_CMA@c3000000
remoteproc remoteproc0:DSP 可用
root@omapl138-lcdk:/sys/bus/platform/drivers/davinci-rproc remoteproc remoteproc0:为 DSP 加电
remoteproc remoteproc0:引导固件映像 rproc-dSP-FW、大小5604612
davinci-rproc davi-rproc.0:分配 DMA 内存失败:len 0xf00000
Remoteproc Remoteproproc0:无法处理资源:-12
我要做的就是:
*使用 MessageQ 实现一些堆缓冲区、用于在 DSP 和 Linux 之间进行通信。
提前感谢。
