From eee119de6a2bd0487e91daf69e7962351e2a3c9c Mon Sep 17 00:00:00 2001 From: "Nicolas \"Pixel\" Noble" Date: Mon, 24 Jan 2011 18:23:01 +0100 Subject: Dummy software compiles; fixed a few linking issues. Also, most of the kernel syscalls are missing. --- Makefile | 2 +- arch/arm/lpc17xx/ldscript-mpu | 10 +++------- os/Makefile | 2 +- os/src/close.c | 4 ++++ os/src/fclose.c | 6 ++++++ os/src/free.c | 5 +++++ os/src/lseek.c | 4 ++++ os/src/malloc.c | 5 +++++ os/src/read.c | 5 +++++ os/src/sprintf.c | 10 ++++++++++ os/src/write.c | 4 ++++ target-rules.mk | 5 ++++- 12 files changed, 52 insertions(+), 10 deletions(-) create mode 100644 os/src/close.c create mode 100644 os/src/fclose.c create mode 100644 os/src/free.c create mode 100644 os/src/lseek.c create mode 100644 os/src/malloc.c create mode 100644 os/src/read.c create mode 100644 os/src/sprintf.c create mode 100644 os/src/write.c diff --git a/Makefile b/Makefile index 8de95f8..d875646 100644 --- a/Makefile +++ b/Makefile @@ -1,5 +1,5 @@ TARGET = demo.bin -LIBS = FreeRTOS/libFreeRTOS.a arch/libarch.a -lc os/libos.a +LIBS = -Wl,--start-group -lc FreeRTOS/libFreeRTOS.a arch/libarch.a os/libos.a -Wl,--end-group export ROOTDIR = $(CURDIR) diff --git a/arch/arm/lpc17xx/ldscript-mpu b/arch/arm/lpc17xx/ldscript-mpu index ce71313..3af58a9 100644 --- a/arch/arm/lpc17xx/ldscript-mpu +++ b/arch/arm/lpc17xx/ldscript-mpu @@ -148,10 +148,11 @@ SECTIONS __cs3_region_size_rom = LENGTH(rom); __cs3_region_num = 1; - .privileged_data : + .data : { + __cs3_region_start_ram = .; __privileged_data_start__ = .; - *(.priviledge_data) + *( privileged_data ) __privileged_data_end___len = . - __privileged_data_start__ - 1 ; __privileged_data_end___len |= __privileged_data_end___len >> 1 ; __privileged_data_end___len |= __privileged_data_end___len >> 2 ; @@ -161,11 +162,6 @@ SECTIONS . = ALIGN( MAX( __privileged_data_end___len + 1, 32 ) ) ; __privileged_data_end__ = .; - } >ram - - .data : - { - __cs3_region_start_ram = .; *(.cs3.region-head.ram) KEEP(*(.jcr)) *(.got.plt) *(.got) diff --git a/os/Makefile b/os/Makefile index 070566d..c19d685 100644 --- a/os/Makefile +++ b/os/Makefile @@ -6,7 +6,7 @@ include $(ROOTDIR)/common.mk include config.mk include $(ROOTDIR)/FreeRTOS/config.mk -TARGET_SRCS = src/init.c src/sbrk.c +TARGET_SRCS = src/init.c src/sbrk.c src/sprintf.c src/malloc.c src/free.c src/fclose.c src/read.c src/lseek.c src/write.c src/close.c include $(ROOTDIR)/target-rules.mk diff --git a/os/src/close.c b/os/src/close.c new file mode 100644 index 0000000..46ee8c5 --- /dev/null +++ b/os/src/close.c @@ -0,0 +1,4 @@ +#include + +int _close_r(struct _reent * reent, int fd) { +} diff --git a/os/src/fclose.c b/os/src/fclose.c new file mode 100644 index 0000000..fe81f62 --- /dev/null +++ b/os/src/fclose.c @@ -0,0 +1,6 @@ +#include +#include + +int fclose(FILE * fp) { + return _fclose_r(_impure_ptr, fp); +} diff --git a/os/src/free.c b/os/src/free.c new file mode 100644 index 0000000..f2d1fe5 --- /dev/null +++ b/os/src/free.c @@ -0,0 +1,5 @@ +#include + +void free(void * ptr) { + _free_r(_impure_ptr, ptr); +} diff --git a/os/src/lseek.c b/os/src/lseek.c new file mode 100644 index 0000000..1b86dbb --- /dev/null +++ b/os/src/lseek.c @@ -0,0 +1,4 @@ +#include + +_off_t _lseek_r(struct _reent * reent, int fd, _off_t seek, int wheel) { +} diff --git a/os/src/malloc.c b/os/src/malloc.c new file mode 100644 index 0000000..7d5f965 --- /dev/null +++ b/os/src/malloc.c @@ -0,0 +1,5 @@ +#include + +void * malloc(size_t size) { + return _malloc_r(_impure_ptr, size); +} diff --git a/os/src/read.c b/os/src/read.c new file mode 100644 index 0000000..08351a7 --- /dev/null +++ b/os/src/read.c @@ -0,0 +1,5 @@ +#include + +_ssize_t _read_r(struct _reent * reent, int fd, void * ptr, size_t size) { + return 0; +} diff --git a/os/src/sprintf.c b/os/src/sprintf.c new file mode 100644 index 0000000..76ea9a2 --- /dev/null +++ b/os/src/sprintf.c @@ -0,0 +1,10 @@ +#include +#include + +int sprintf(char * str, const char * fmt, ...) { + int r; + va_list ap; + va_start(ap, fmt); + r = _vsprintf_r(_impure_ptr, str, fmt, ap); + va_end(ap); +} diff --git a/os/src/write.c b/os/src/write.c new file mode 100644 index 0000000..a1bf474 --- /dev/null +++ b/os/src/write.c @@ -0,0 +1,4 @@ +#include + +_ssize_t _write_r(struct _reent * reent, int fd, const void * buf, size_t size) { +} diff --git a/target-rules.mk b/target-rules.mk index 5b976bc..1ce9487 100644 --- a/target-rules.mk +++ b/target-rules.mk @@ -11,12 +11,15 @@ TARGET_OBJS = $(addsuffix .o, $(basename $(TARGET_SRCS))) ifneq ($(TARGET),) TARGET_ELF = $(addsuffix .elf, $(basename $(TARGET))) TARGET_BIN = $(addsuffix .bin, $(basename $(TARGET))) +TARGET_MAP = $(addsuffix .map, $(basename $(TARGET))) TARGET_OBJS += $(addsuffix .o, $(basename $(TARGET))) endif $(TARGET_ELF): $(TARGET_OBJS) $(E) [TL] Linking $@ - $(Q)$(TARGET_LD) -o $@ $^ -T$(LDSCRIPT) $(LIBS) + $(Q)$(TARGET_LD) -Wl,--gc-sections -Wl,-O3 -Wl,-Map=$(TARGET_MAP) -o $@ $^ -T$(LDSCRIPT) $(LIBS) + +$(TARGET_MAP): $(TARGET_ELF) $(TARGET_BIN): $(TARGET_ELF) $(E) [TB] Creating $@ -- cgit v1.2.3