我正在使用this port of FreeRTOS,我将它加载到OMAP4430内的Cortex-M3上。使用远程proc框架可以正常工作,我可以使用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字节时会发生这种情况,但是当我只删除一堆print语句并将大小降低到342563字节时就不会发生这种情况。
我已将错误消息跟踪到这段代码:http://lxr.free-electrons.com/source/drivers/remoteproc/remoteproc_elf_loader.c?v=3.9#L188。似乎rproc_da_to_va无法在内存中找到足以容纳ELF的段。
如何确保有足够的内存用于ELF的大小?我可以告诉内核我特别想要为这种事情预先分配某个区域吗?有没有办法确保我的ELF的这一部分仍然很小?
谢谢!
答案 0 :(得分:1)
确保FreeRTOS配置常量configTEXT_SIZE
和configDATA_SIZE
与链接描述文件所需的数量一致。例如,如果链接描述文件包含
MEMORY
{
TEXT (rwx) : ORIGIN = 0x00000000, LENGTH = 1M
DATA (rwx) : ORIGIN = 0x80000000, LENGTH = 1M
}
然后您应该将configTEXT_SIZE
和configDATA_SIZE
设置为0x100000
。