firmware: linker script and startup code reorg.

This commit is contained in:
Ingo Albrecht 2010-04-11 08:04:20 +02:00
parent 3936c397a7
commit 0068f87c1f
7 changed files with 50 additions and 112 deletions

View File

@ -8,28 +8,49 @@ DISPLAY_OBJS=display/font_r8x8.o display/font_r8x8_horiz.o display/st7558.o disp
ABB_OBJS=abb/twl3025.o
RF_OBJS=rf/trf6151.o
# Board- and environment-specific startup code and linker script
START=board/common/compal_ramload_start.S
# List of all supported boards
BOARDS?=compal_e88 compal_e99 gta0x
compal_COMMON_OBJS=board/common/rffe_compal_dualband.o board/common/calypso_uart.o board/common/calypso_pwl.o
gta0x_COMMON_OBJS=board/common/rffe_gta0x_triband.o board/common/calypso_uart.o board/common/calypso_pwl.o
# TI Calypso
calypso_COMMON_OBJS=board/common/calypso_uart.o board/common/calypso_pwl.o
# OpenMoko GTA0x
gta0x_COMMON_OBJS=board/common/rffe_gta0x_triband.o $(calypso_COMMON_OBJS)
# Compal Generic
compal_COMMON_OBJS=board/compal/start.o $(calypso_COMMON_OBJS) board/compal/rffe_dualband.o
compal_COMMON_ENVIRONMENTS=compalram
compalram_LDS=board/compal/ram.lds
# Compal E88
compal_e88_OBJS=$(compal_COMMON_OBJS) board/compal_e88/init.o
compal_e88_ENVIRONMENTS=$(compal_COMMON_ENVIRONMENTS) e88loader
e88loader_LDS=board/compal_e88/loader.lds
e88flash_LDS=board/compal_e88/flash.lds
# Compal E99
compal_e99_OBJS=$(compal_COMMON_OBJS) board/compal_e99/init.o
gta0x_OBJS=$(gta0x_COMMON_OBJS) board/gta0x/init.o
# List of all supported execution environments
ENVIRONMENTS?=app ramload osmoload
app_LDS=board/common/compal_app.lds
ramload_LDS=board/common/compal_ramload.lds
osmoload_LDS=board/common/compal_osmoload.lds
compal_e99_ENVIRONMENTS=$(compal_COMMON_ENVIRONMENTS)
e99loader_LDS=board/compal_e99/loader.lds
e99flash_LDS=board/compal_e99/flash.lds
# List of all applications (add yours here!)
APPLICATIONS=hello_world compal_dsp_dump layer1 loader simtest
# Things that go in all applications
ANY_APP_OBJS+=$(START:.S=.o) $(ABB_OBJS) $(RF_OBJS) $(DISPLAY_OBJS) $(FLASH_OBJS)
ANY_APP_OBJS+=$(ABB_OBJS) $(RF_OBJS) $(DISPLAY_OBJS) $(FLASH_OBJS)
ANY_APP_LIBS+=calypso/libcalypso.a layer1/liblayer1.a lib/libmini.a comm/libcomm.a ../../shared/libosmocore/build-target/src/.libs/libosmocore.a
# Libraries are defined in subdirectories

View File

@ -111,9 +111,16 @@ ALL_DEPS+=$$($(1)_OBJS:.o=.p) apps/$(1)/main.p
endef
# define rules for all defined applications
$(foreach app,$(APPLICATIONS),$(foreach brd,$(BOARDS),$(foreach env,$(ENVIRONMENTS),$(eval $(call APPLICATION_BOARD_ENVIRONMENT_template,$(app),$(brd),$(env))))))
$(foreach brd,$(BOARDS),$(eval $(call BOARD_template,$(brd))))
$(foreach app,$(APPLICATIONS),$(eval $(call APPLICATION_template,$(app))))
$(foreach app,$(APPLICATIONS), \
$(foreach brd,$(BOARDS), \
$(foreach env,$($(brd)_ENVIRONMENTS), \
$(eval $(call APPLICATION_BOARD_ENVIRONMENT_template,$(app),$(brd),$(env))))))
$(foreach brd,$(BOARDS), \
$(eval $(call BOARD_template,$(brd))))
$(foreach app,$(APPLICATIONS), \
$(eval $(call APPLICATION_template,$(app))))
#### LIBRARY RULES ####
@ -177,6 +184,7 @@ clean:
.PHONY: distclean
distclean: clean
find . -name '*.o' -or -name '*.bin' -or -name '*.map' -or -name '*.lst' -or -name '*.p' -exec rm '{}' ';'
#### DEPENDENCY LOAD ####

View File

@ -1,98 +0,0 @@
OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm")
OUTPUT_ARCH(arm)
ENTRY(_start)
MEMORY
{
/* compal-loaded binary: text, initialized data */
LRAM (rw) : ORIGIN = 0x00800000, LENGTH = 0x00010000
/* compal-loaded binary: unitialized data, stacks, heap */
DRAM (rw) : ORIGIN = 0x00810000, LENGTH = 0x00010000
/* remainder of internal ram: this is where we are linking to */
IRAM (rw) : ORIGIN = 0x00820000, LENGTH = 0x00020000
}
SECTIONS
{
. = 0x820000;
/* initialization code */
. = ALIGN(4);
.text.start : {
PROVIDE(_start = .);
KEEP(*(.text.start))
*(.text.start)
} > IRAM
/* exception vectors from 0x80001c to 0x800034 */
.text.exceptions 0x80001c : AT (LOADADDR(.text.start) + SIZEOF(.text.start)) {
KEEP(*(.text.exceptions))
* (.text.exceptions)
. = ALIGN(4);
/* constructors and destructors */
. = ALIGN(4);
__CTOR_LIST__ = .;
LONG((__CTOR_END__ - __CTOR_LIST__) / 4 - 2)
KEEP(*(SORT(.ctors)))
LONG(0) /* end of list */
__CTOR_END__ = .;
__DTOR_LIST__ = .;
LONG((__DTOR_END__ - __DTOR_LIST__) / 4 - 2)
KEEP(*(SORT(.dtors)))
LONG(0) /* end of list */
__DTOR_END__ = .;
} > LRAM
PROVIDE(_exceptions = LOADADDR(.text.exceptions));
/* code */
. = ALIGN(4);
.text (LOADADDR(.text.exceptions) + SIZEOF(.text.exceptions)) :
AT (LOADADDR(.text.exceptions) + SIZEOF(.text.exceptions)) {
/* regular code */
*(.text*)
/* gcc voodoo */
*(.glue_7t) *(.glue_7) *(.vfp11_veneer) *(.v4_bx)
} > IRAM
PROVIDE(_text_start = LOADADDR(.text));
PROVIDE(_text_end = LOADADDR(.text) + SIZEOF(.text));
/* read-only data */
. = ALIGN(4);
.rodata : {
*(.rodata*)
} > IRAM
PROVIDE(_rodata_start = LOADADDR(.rodata));
PROVIDE(_rodata_end = LOADADDR(.rodata) + SIZEOF(.rodata));
/* initialized data */
. = ALIGN(4);
.data : {
*(.data)
} > IRAM
PROVIDE(_data_start = LOADADDR(.data));
PROVIDE(_data_end = LOADADDR(.data) + SIZEOF(.data));
/* pic offset tables */
. = ALIGN(4);
.got : {
*(.got)
*(.got.plt) *(.igot.plt) *(.got) *(.igot)
} > IRAM
PROVIDE(_got_start = LOADADDR(.got));
PROVIDE(_got_end = LOADADDR(.got) + SIZEOF(.got));
/* uninitialized data */
.bss (NOLOAD) : {
. = ALIGN(4);
__bss_start = .;
*(.bss)
} > IRAM
. = ALIGN(4);
__bss_end = .;
PROVIDE(_bss_start = __bss_start);
PROVIDE(_bss_end = __bss_end);
/* end of image */
. = ALIGN(4);
_end = .;
PROVIDE(end = .);
}

View File

@ -1,3 +1,10 @@
/*
* Linker script for running from internal SRAM on Compal phones
*
* This script is tailored specifically to the requirements imposed
* on us by the Compal bootloader.
*
*/
OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm")
OUTPUT_ARCH(arm)
ENTRY(_start)