Question

I am using this port of FreeRTOS and I am loading it onto the Cortex-M3 within an OMAP4430. This works fine using the remote proc framework and I am able to use RPMsg to communicate with it.

Sometimes, however, rproc fails to load the elf and gives the following error:

rproc remoteproc1: bad phdr da 0x0 mem 0x10310
rproc remoteproc1: Failed to load program segments: -22
rproc remoteproc1: rproc_boot() failed -22

This seems to happen when the size of the elf file gets too large: this happens when the size is 377331 bytes but does not happen when I simply remove a bunch of print statements and bring the size down to 342563 bytes.

I have tracked the error message down to this piece of code: http://lxr.free-electrons.com/source/drivers/remoteproc/remoteproc_elf_loader.c?v=3.9#L188. It seems that rproc_da_to_va is unable to find a segment in memory large enough to fit the ELF.

How can I make sure that there is enough memory for the size of my ELF? Can I tell the kernel that I specifically want a certain region preallocated for this kind of thing? Is there some way to ensure that this part of my ELF remains small?

Thanks!

Was it helpful?

Solution

Make sure that the FreeRTOS configuration constants configTEXT_SIZE and configDATA_SIZE agree with the amounts demanded by your linker script. For example, if your linker script contains

MEMORY
{
  TEXT (rwx) : ORIGIN = 0x00000000, LENGTH = 1M
  DATA (rwx) : ORIGIN = 0x80000000, LENGTH = 1M
}

then you should set configTEXT_SIZE and configDATA_SIZE to 0x100000.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top