我正在使用这个FreeRTOS端口,我正在将它加载到OMAP4430内的Cortex-M3上。使用远程进程框架可以很好地工作,并且我可以使用RPMsg与它通信。
然而,有时,rproc无法加载elf并给出以下错误:
rproc remoteproc1: bad phdr da 0x0 mem 0x10310
rproc remoteproc1: Failed to load program segments: -22
rproc remoteproc1: rproc_boot() failed -22
这似乎发生在elf文件的大小变得太大时:当大小为377331字节时发生,但当我简单地删除一堆打印语句并将大小降低到342563字节时不会发生。
我已经追踪到这段代码:http://lxr.free-electrons.com/source/drivers/remoteproc/remoteproc_elf_loader.c?v=3.9#L188。rproc_da_to_va似乎无法在内存中找到足够大的段来容纳ELF。
我如何确保我的ELF有足够的内存?我能告诉内核我特别想为这类东西预先分配一个特定的区域吗?是否有某种方法可以确保我的ELF的这一部分仍然很小?
谢谢!
确保FreeRTOS配置常量configTEXT_SIZE
和configDATA_SIZE
与您的链接器脚本所要求的数量一致。例如,如果您的链接器脚本包含
MEMORY
{
TEXT (rwx) : ORIGIN = 0x00000000, LENGTH = 1M
DATA (rwx) : ORIGIN = 0x80000000, LENGTH = 1M
}
则应将configTEXT_SIZE
和configDATA_SIZE
设置为0x100000
。