summaryrefslogtreecommitdiff
path: root/apps
diff options
context:
space:
mode:
authorpatacongo <patacongo@42af7a65-404d-4744-a932-0658087f49c3>2012-10-25 22:10:56 +0000
committerpatacongo <patacongo@42af7a65-404d-4744-a932-0658087f49c3>2012-10-25 22:10:56 +0000
commitd6b30f6e49779b31617fad8e8daa06470145f909 (patch)
tree7123939c22af75fef3c7ace3aaa486afdaf4b6d7 /apps
parent5ae419f6845ff28bcbdb339cdfb66f6b2e46f9ab (diff)
downloadnuttx-d6b30f6e49779b31617fad8e8daa06470145f909.tar.gz
nuttx-d6b30f6e49779b31617fad8e8daa06470145f909.tar.bz2
nuttx-d6b30f6e49779b31617fad8e8daa06470145f909.zip
More ELF loader changes
git-svn-id: svn://svn.code.sf.net/p/nuttx/code/trunk@5261 42af7a65-404d-4744-a932-0658087f49c3
Diffstat (limited to 'apps')
-rw-r--r--apps/examples/README.txt47
-rw-r--r--apps/examples/elf/Kconfig16
-rw-r--r--apps/examples/elf/Makefile9
-rw-r--r--apps/examples/elf/elf_main.c (renamed from apps/examples/elf/elf_main)22
-rw-r--r--apps/examples/elf/tests/errno/Makefile2
-rw-r--r--apps/examples/elf/tests/hello++/Makefile2
-rw-r--r--apps/examples/elf/tests/hello/Makefile2
-rw-r--r--apps/examples/elf/tests/longjmp/Makefile2
-rw-r--r--apps/examples/elf/tests/mutex/Makefile2
-rw-r--r--apps/examples/elf/tests/pthread/Makefile2
-rw-r--r--apps/examples/elf/tests/signal/Makefile2
-rw-r--r--apps/examples/elf/tests/struct/Makefile2
-rw-r--r--apps/examples/elf/tests/task/Makefile2
13 files changed, 93 insertions, 19 deletions
diff --git a/apps/examples/README.txt b/apps/examples/README.txt
index 763427e32..fa97bd64e 100644
--- a/apps/examples/README.txt
+++ b/apps/examples/README.txt
@@ -297,6 +297,53 @@ examples/discover
CONFIG_EXAMPLES_DISCOVER_DRIPADDR - Router IP address
CONFIG_EXAMPLES_DISCOVER_NETMASK - Network Mask
+examples/elf
+^^^^^^^^^^^^
+
+ 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.
+ For example, the N in /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 match EXAMPLES_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:
+
+ 1. Your top-level nuttx/Make.defs file must include an approproate definition,
+ LDELFFLAGS, to generate a relocatable ELF object. With GNU LD, this should
+ include '-r' and '-e main' (or _main on some platforms).
+
+ LDELFFLAGS = -r -e main
+
+ If you use GCC to link, you make also need to include '-nostdlib' or
+ '-nostartfiles' and '-nodefaultlibs'.
+
+ 2. This example also requires genromfs. genromfs can be build as part of the
+ nuttx toolchain. Or can built from the genromfs sources that can be found
+ at misc/tools/genromfs-0.5.2.tar.gz. In any event, the PATH variable must
+ include the path to the genromfs executable.
+
+ 3. ELF size: The ELF files in this example are, be default, quite large
+ because they include a lot of "build garbage". You can greately reduce the
+ size of the ELF binaries are using the objcopy --strip-unneeded command to
+ remove un-necessary information from the ELF files.
+
+ 4. Simulator. You cannot use this example with the 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.
+
examples/ftpc
^^^^^^^^^^^^^
diff --git a/apps/examples/elf/Kconfig b/apps/examples/elf/Kconfig
index aca36f1b9..c62a98486 100644
--- a/apps/examples/elf/Kconfig
+++ b/apps/examples/elf/Kconfig
@@ -10,4 +10,20 @@ config EXAMPLES_ELF
Enable the ELF loader example
if EXAMPLES_ELF
+config EXAMPLES_ELF_DEVMINOR
+ int "ROMFS Minor Device Number"
+ default 0
+ ---help---
+ The minor device number of the ROMFS block. For example, the N in /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
+ string "ROMFS Devie Path"
+ default "/dev/ram0"
+ ---help---
+ The path to the ROMFS block driver device. This must match EXAMPLES_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"
+
endif
diff --git a/apps/examples/elf/Makefile b/apps/examples/elf/Makefile
index 640e8e427..23a6bcb6f 100644
--- a/apps/examples/elf/Makefile
+++ b/apps/examples/elf/Makefile
@@ -61,7 +61,7 @@ ROOTDEPPATH = --dep-path .
VPATH =
all: .built
-.PHONY: headers clean depend disclean
+.PHONY: headers clean_tests clean depend disclean
$(AOBJS): %$(OBJEXT): %.S
$(call ASSEMBLE, $<, $@)
@@ -72,7 +72,7 @@ $(COBJS): %$(OBJEXT): %.c
headers:
@$(MAKE) -C tests TOPDIR="$(TOPDIR)" APPDIR="$(APPDIR)" CROSSDEV=$(CROSSDEV)
-.built: $(OBJS)
+.built: headers $(OBJS)
@( for obj in $(OBJS) ; do \
$(call ARCHIVE, $(BIN), $${obj}); \
done ; )
@@ -88,7 +88,10 @@ context:
depend: .depend
-clean:
+clean_tests:
+ @$(MAKE) -C tests TOPDIR="$(TOPDIR)" APPDIR="$(APPDIR)" CROSSDEV=$(CROSSDEV) clean
+
+clean: clean_tests
@rm -f *.o *~ .*.swp .built
$(call CLEAN)
diff --git a/apps/examples/elf/elf_main b/apps/examples/elf/elf_main.c
index c58b13ffc..5699dd284 100644
--- a/apps/examples/elf/elf_main
+++ b/apps/examples/elf/elf_main.c
@@ -89,9 +89,16 @@
#define SECTORSIZE 512
#define NSECTORS(b) (((b)+SECTORSIZE-1)/SECTORSIZE)
-#define ROMFSDEV "/dev/ram0"
#define MOUNTPT "/mnt/romfs"
+#ifndef CONFIG_EXAMPLES_ELF_DEVMINOR
+# define CONFIG_EXAMPLES_ELF_DEVMINOR 0
+#endif
+
+#ifndef CONFIG_EXAMPLES_ELF_DEVPATH
+# define CONFIG_EXAMPLES_ELF_DEVPATH "/dev/ram0"
+#endif
+
/* If CONFIG_DEBUG is enabled, use dbg instead of printf so that the
* output will be synchronous with the debug output.
*/
@@ -166,8 +173,9 @@ int elf_main(int argc, char *argv[])
/* Create a ROM disk for the ROMFS filesystem */
- message("Registering romdisk\n");
- ret = romdisk_register(0, romfs_img, NSECTORS(romfs_img_len), SECTORSIZE);
+ message("Registering romdisk at /dev/ram%d\n", CONFIG_EXAMPLES_ELF_DEVMINOR);
+ ret = romdisk_register(CONFIG_EXAMPLES_ELF_DEVMINOR, romfs_img,
+ NSECTORS(romfs_img_len), SECTORSIZE);
if (ret < 0)
{
err("ERROR: romdisk_register failed: %d\n", ret);
@@ -178,13 +186,13 @@ int elf_main(int argc, char *argv[])
/* Mount the file system */
message("Mounting ROMFS filesystem at target=%s with source=%s\n",
- MOUNTPT, ROMFSDEV);
+ MOUNTPT, CONFIG_EXAMPLES_ELF_DEVPATH);
- ret = mount(ROMFSDEV, MOUNTPT, "romfs", MS_RDONLY, NULL);
+ ret = mount(CONFIG_EXAMPLES_ELF_DEVPATH, MOUNTPT, "romfs", MS_RDONLY, NULL);
if (ret < 0)
{
err("ERROR: mount(%s,%s,romfs) failed: %s\n",
- ROMFSDEV, MOUNTPT, errno);
+ CONFIG_EXAMPLES_ELF_DEVPATH, MOUNTPT, errno);
elf_uninitialize();
}
@@ -219,6 +227,6 @@ int elf_main(int argc, char *argv[])
sleep(4);
}
- message("End-of-Test.. Exit-ing\n");
+ message("End-of-Test.. Exiting\n");
return 0;
}
diff --git a/apps/examples/elf/tests/errno/Makefile b/apps/examples/elf/tests/errno/Makefile
index d3b12aa2e..3c299b16d 100644
--- a/apps/examples/elf/tests/errno/Makefile
+++ b/apps/examples/elf/tests/errno/Makefile
@@ -39,7 +39,7 @@
BIN = errno
SRCS = $(BIN).c
-OBJS = $(BIN:.c=.o)
+OBJS = $(SRCS:.c=.o)
all: $(BIN)
diff --git a/apps/examples/elf/tests/hello++/Makefile b/apps/examples/elf/tests/hello++/Makefile
index b3d07d262..9de52cfa1 100644
--- a/apps/examples/elf/tests/hello++/Makefile
+++ b/apps/examples/elf/tests/hello++/Makefile
@@ -64,7 +64,7 @@ all: $(BIN1) $(BIN2) $(BIN3) $(BIN4)
$(OBJS): %.o: %.cpp
@echo "CC: $<"
- @$(CXX) -c $(CXXPICFLAGS) $< -o $@
+ @$(CXX) -c $(CXXFLAGS) $< -o $@
# This contains libstdc++ stubs to that you can build C++ code
# without actually having libstdc++
diff --git a/apps/examples/elf/tests/hello/Makefile b/apps/examples/elf/tests/hello/Makefile
index 3b9b06ac4..c3a3dacaf 100644
--- a/apps/examples/elf/tests/hello/Makefile
+++ b/apps/examples/elf/tests/hello/Makefile
@@ -39,7 +39,7 @@
BIN = hello
SRCS = $(BIN).c
-OBJS = $(BIN:.c=.o)
+OBJS = $(SRCS:.c=.o)
all: $(BIN)
diff --git a/apps/examples/elf/tests/longjmp/Makefile b/apps/examples/elf/tests/longjmp/Makefile
index 12d6e443c..d737718e0 100644
--- a/apps/examples/elf/tests/longjmp/Makefile
+++ b/apps/examples/elf/tests/longjmp/Makefile
@@ -39,7 +39,7 @@
BIN = longjmp
SRCS = $(BIN).c
-OBJS = $(BIN:.c=.o)
+OBJS = $(SRCS:.c=.o)
all: $(BIN)
diff --git a/apps/examples/elf/tests/mutex/Makefile b/apps/examples/elf/tests/mutex/Makefile
index 632fed9dd..7f0a5493e 100644
--- a/apps/examples/elf/tests/mutex/Makefile
+++ b/apps/examples/elf/tests/mutex/Makefile
@@ -39,7 +39,7 @@
BIN = mutex
SRCS = $(BIN).c
-OBJS = $(BIN:.c=.o)
+OBJS = $(SRCS:.c=.o)
all: $(BIN)
diff --git a/apps/examples/elf/tests/pthread/Makefile b/apps/examples/elf/tests/pthread/Makefile
index fae6144c2..8db290e6e 100644
--- a/apps/examples/elf/tests/pthread/Makefile
+++ b/apps/examples/elf/tests/pthread/Makefile
@@ -39,7 +39,7 @@
BIN = pthread
SRCS = $(BIN).c
-OBJS = $(BIN:.c=.o)
+OBJS = $(SRCS:.c=.o)
all: $(BIN)
diff --git a/apps/examples/elf/tests/signal/Makefile b/apps/examples/elf/tests/signal/Makefile
index 270444032..4338aa48d 100644
--- a/apps/examples/elf/tests/signal/Makefile
+++ b/apps/examples/elf/tests/signal/Makefile
@@ -39,7 +39,7 @@
BIN = signal
SRCS = $(BIN).c
-OBJS = $(BIN:.c=.o)
+OBJS = $(SRCS:.c=.o)
all: $(BIN)
diff --git a/apps/examples/elf/tests/struct/Makefile b/apps/examples/elf/tests/struct/Makefile
index f98a65e25..c15d8fc47 100644
--- a/apps/examples/elf/tests/struct/Makefile
+++ b/apps/examples/elf/tests/struct/Makefile
@@ -38,7 +38,7 @@
CFLAGS += -I.
-BIN = struct
+BIN = struct
SRCS = struct_main.c struct_dummy.c
OBJS = $(SRCS:.c=.o)
diff --git a/apps/examples/elf/tests/task/Makefile b/apps/examples/elf/tests/task/Makefile
index 28047965e..208b228b3 100644
--- a/apps/examples/elf/tests/task/Makefile
+++ b/apps/examples/elf/tests/task/Makefile
@@ -39,7 +39,7 @@
BIN = task
SRCS = $(BIN).c
-OBJS = $(BIN:.c=.o)
+OBJS = $(SRCS:.c=.o)
all: $(BIN)