==================
elf ELF loader
This example builds a small ELF loader test case. This includes several test
programs under examples/elf tests. These tests are build using the relocatable
ELF format and installed in a ROMFS file system. At run time, each program in
the ROMFS file system is executed. Requires CONFIG_ELF. Other configuration
options:
-
CONFIG_EXAMPLES_ELF_DEVMINOR– The minor device number of the ROMFS block driver. For example, theNin/dev/ramN. Used for registering the RAM block driver that will hold the ROMFS file system containing the ELF executables to be tested. Default:0. -
CONFIG_EXAMPLES_ELF_DEVPATH– The path to the ROMFS block driver device. This must matchEXAMPLES_ELF_DEVMINOR. Used for registering the RAM block driver that will hold the ROMFS file system containing the ELF executables to be tested. Default:/dev/ram0.
Notes:
-
CFLAGSshould be provided inCELFFLAGS. RAM and FLASH memory regions may require long allcs. For ARM, this might be::CELFFLAGS = $(CFLAGS) -mlong-calls
Similarly for C++ flags which must be provided in
CXXELFFLAGS. -
Your top-level
nuttx/Make.defsfile must also include an appropriate definition,LDELFFLAGS, to generate a relocatable ELF object. With GNU LD, this should include-rand-e main(or_mainon some platforms).::LDELFFLAGS = -r -e main
If you use GCC to link, you make also need to include
-nostdlib. -
This example also requires
genromfs.genromfscan be build as part of the nuttx toolchain. Or can built from thegenromfssources that can be found in the NuttX tools repository (genromfs-0.5.2.tar.gz). In any event, thePATHvariable must include the path to the genromfs executable. -
ELF size: The ELF files in this example are, be default, quite large because they include a lot of build garbage. You can greatly reduce the size of the ELF binaries are using the
objcopy --strip-unneededcommand to remove un-necessary information from the ELF files. -
Simulator. You cannot use this example with the NuttX simulator on Cygwin. That is because the Cygwin GCC does not generate ELF file but rather some Windows-native binary format.
If you really want to do this, you can create a NuttX x86 buildroot toolchain and use that be build the ELF executables for the ROMFS file system.
-
Linker scripts. You might also want to use a linker scripts to combine sections better. An example linker script is at
nuttx/binfmt/elf/gnu-elf.ld. That example might have to be tuned for your particular linker output to position additional sections correctly. The GNU LDLDELFFLAGSthen might be::LDELFFLAGS = -r -e main -T$(TOPDIR)/binfmt/elf/gnu-elf.ld