工具/软件:Linux
你好!
我目前正在测试 AM57xx SOC 上 Linux 和 C66x DSP 协处理器之间的 IPC。
我需要有关 Linux 内核中的 Remoteproc 子系统的一些建议:
下面是 rsc_table_vayu_dsp.h 文件的代码片段、我将使用该代码片段进行测试:
{ TYPE_CARVEOUT、 DSP_MEM_TEXT、0、 DSP_MEM_TEXT_SIZE、0、0、"DSP_MEM_TEXT"、 }、 { TYPE_CARVEOUT、 DSP_MEM_DATA、0、 DSP_MEM_DATA_SIZE、0、0、"DSP_MEM_DATA"、 }、 { TYPE_CARVEOUT、 DSP_MEM_HEAP、0、 DSP_MEM_heap_size、0、0、"DSP_MEM_heap"、 }、
如果我理解正确、则使用 DSP MMU 将 DSP 生成的整个代码映射到 AM57xx SOC 的主存储器。 是这样吗?
linker.cmd 文件确认这一点、因为所有段都映射到某种虚拟地址、而不是 映射到位于0x800000处的内部存储器:
内存
{
L2SRAM (rwx):org = 0x800000,len = 0x40000
OCMC_RAM1 (RWX):org = 0x40300000,len = 0x80000
OCMC_RAM2 (RWX):org = 0x40400000,len = 0x100000
OCMC_RAM3 (rwx):org = 0x4050000,len = 0x100000
EXT_code (rwx):org = 0x95000000,len = 0x100000
EXT_DATA (RW):org = 0x95100000,len = 0x100000
EXT_HEAP (RW):org = 0x95200000,len = 0x300000
trace_BUF (RW):org = 0x9f000000,len = 0x60000
EXC_DATA (RW):org = 0x9f060000,len = 0x10000
PM_DATA (rwx):org = 0x9f070000,len = 0x20000
}
段
{
.text:load >> EXT_code
.ti.decompress: load > EXT_code
.stack:加载> EXT_DATA
组:加载> EXT_DATA
{
.bss:
.neardata:
.rodata:
}
.cinit:加载> EXT_DATA
.pinit:加载>> EXT_DATA
init_array:load > EXT_data
.const:load >> EXT_DATA
.data:load >> EXT_DATA
.fardata:load >> EXT_DATA
.switch:load >> EXT_DATA
.sysmem:加载> EXT_DATA
far:load >> EXT_DATA
.args:load > EXT_DATA align = 0x4、fill = 0{_argsize = 0x64;}
.cio:加载>> EXT_DATA
.ti.handler_table:load > EXT_data
.c6xabi.exidx:加载> EXT_DATA
.c6xabi.extab:load >> EXT_DATA
tracebuf:load > trace_BUF
errorbuf:"加载">" EXC_DATA "
vecs:load > EXT_code
.resource_table:load >0x95000000、type = NOINIT
xdc.meta:加载> EXT_DATA、类型= COPY
}
现在、问题是:如果我想按原样使用 IPC 示例、但使用 DSP 的专用内部存储器、我需要做什么?
我想我需要修改 linker.cmd 文件来将所有段映射到 L2SRAM、然后从资源表中删除所有 DSP_MEM_text、DSP_MEM_DATA 和 DSP_MEM_HEAP。 是这样吗?
出于好奇:如果我将 linker.cmd 文件更改为使用内部 L2SRAM 并在资源表中将 L2SRAM 地址添加为分割区、会发生什么情况?
从 Remoteproc 驱动程序的角度来看、elf Loader 似乎会将 DSP 固件放置在正确的物理 L2SRAM 位置、但 MMU 也会被配置为将地址 0x800000映射到主存储器。 那么、会出现什么行为? MMU 是否可以将地址 0x800000映射到主存储器?
感谢您的回答!
此致、
Franz