This is the mail archive of the ecos-discuss@sourceware.org mailing list for the eCos project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: redboot on STM3240G-EVAL board


On Fri, 10 Oct 2014, Oleg Uzenkov wrote:

> > 
> > ELF files are quite large, what is the preferred format for an image
> > to be passed to redboot?  what "load" and "fis create" command look
> > like?
> > **Roughly** speaking, you save .text segment in FLASH (adjusted to
> > flash block erase size), you save not ELF image! So, do not mess
> > with binaries. Also `load' command does not carry whole ELF image
> > into RAM, but .text segment with a few other segments.
> The thing is:
> I will need to work with files (new firmware should arrive to sdcard
> on the board through ftp in a main app). I want redboot to pick a new
               ^^^^^^^^^^^
> image up from sdcard at reset.

If your board has Ethernet, then you can build RedBoot with networking
support and use TFTP or HTTP protocols to load firmware blobs from the
NET. Why not? Or you talk about "main app" on a host side?

> Extracting sections from received ELF file and transferring them to
> redboot is more of a manual work.
> So, I think I am kind of stuck with ELF files.
> 
> So I am thinking:
> 
> * Should I load compressed ELF file (gzip) with -d switch?
> 
> * Should I load SREC file (they are usually smaller than ELF)?

If you talk about eCos executables (to load) then regardless of the
source format you have to keep in a place only sections with LOAD
attribute. Look

  stat -c %s install/tests/kernel/current/tests/tm_basic
  608261

Thus, ELF size is 608K. Let's get a binary to load (in RAM for my case)

  arm-eabi-objcopy -O binary install/tests/kernel/current/tests/tm_basic{,.bin}
  stat -c %s install/tests/kernel/current/tests/tm_basic.bin
  47248

Binary image size is 47K or exactly 47248 bytes. What that 47K is? Let's
print all section's headers of ELF

  arm-eabi-objdump -h install/tests/kernel/current/tests/tm_basic

You will see all sections its sizes, locations and even more. But we
need to load only the sections which have attribute *LOAD* (not bad
name for 'load' command). Filter those sections

  arm-eabi-objdump -h install/tests/kernel/current/tests/tm_basic | grep LOAD -B1
    8 .rom_vectors  00000040  81008000  81008000  00008000  2**2
                    CONTENTS, ALLOC, LOAD, READONLY, CODE
    9 .text         0000a704  81008040  81008040  00008040  2**2
                    CONTENTS, ALLOC, LOAD, READONLY, CODE
   10 .rodata       00000e60  81012744  81012744  00012744  2**2
                    CONTENTS, ALLOC, LOAD, READONLY, DATA
   11 .data         000002ec  810135a4  810135a4  000135a4  2**2
                    CONTENTS, ALLOC, LOAD, DATA

Let's calculate sum of all sizes

  echo "ibase=16; 40+A704+E60+2EC" | bc
  47248

We got exactly 47248 bytes. Again, regardless source file format (srec,
elf, bin) you have to save on a media *at least* those *LOAD* bytes and
you (or loader) have to know all LMA (Load Memory Address) addresses to
relocate the sections (if that is needed) in the right places.

> * Should I save executable sections and store them in a file. Transfer
> that file to sdcard for redboot to pick it up at reset.  (nor sure how
> to do it actually)
 
What do you want to save? SD card space? Internal FLASH space? Loading
time?

> * Can I actually load a .bin (image in binary format)?

Yes, you can. You would even manage the loading of compressed binary images
(.bin.gz).

HTH

Sergei

-- 
Before posting, please read the FAQ: http://ecos.sourceware.org/fom/ecos
and search the list archive: http://ecos.sourceware.org/ml/ecos-discuss


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]