elfcortex-momapremote-process

Remote Proc fails to load FreeRTOS Elf


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!


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.