mirror of
https://github.com/RfidResearchGroup/proxmark3.git
synced 2025-02-27 17:43:07 +08:00
Add a common linker script with the memory map for the complete project
Use the correct physical addresses in the memory map, and instead translate the addresses during postprocessing with objcopy
This commit is contained in:
parent
fb6e5aa863
commit
2bfed17db2
5 changed files with 50 additions and 28 deletions
|
@ -1,13 +1,21 @@
|
||||||
|
INCLUDE ../common/ldscript.common
|
||||||
|
|
||||||
ENTRY(Vector)
|
ENTRY(Vector)
|
||||||
SECTIONS
|
SECTIONS
|
||||||
{
|
{
|
||||||
. = 0x00010000;
|
.start : { obj/start.o(.text) } >osimage
|
||||||
.start : { obj/start.o(.text) }
|
.text : {
|
||||||
.text : { *(.text) }
|
*(.text)
|
||||||
.rodata : { *(.rodata) }
|
*(.text.*)
|
||||||
. = 0x00200000;
|
*(.glue_7)
|
||||||
.data : { *(.data) }
|
*(.glue_7t)
|
||||||
|
} >osimage
|
||||||
|
.rodata : {
|
||||||
|
*(.rodata)
|
||||||
|
*(.rodata*)
|
||||||
|
} >osimage
|
||||||
|
.data : { *(.data) } >ram
|
||||||
__bss_start__ = .;
|
__bss_start__ = .;
|
||||||
.bss : { *(.bss) }
|
.bss : { *(.bss) } >ram
|
||||||
__bss_end__ = .;
|
__bss_end__ = .;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,11 +1,13 @@
|
||||||
|
INCLUDE ../common/ldscript.common
|
||||||
|
|
||||||
SECTIONS
|
SECTIONS
|
||||||
{
|
{
|
||||||
. = 0x00002000;
|
fpgaimage : {
|
||||||
.text : { obj/fpgaimg.o(.text) *(.text) }
|
obj/fpgaimg.o(.text) *(.text)
|
||||||
.rodata : { *(.rodata) }
|
*(.rodata)
|
||||||
. = 0x00200000;
|
} >fpgaimage
|
||||||
.data : { *(.data) }
|
.data : { *(.data) } >ram
|
||||||
__bss_start__ = .;
|
__bss_start__ = .;
|
||||||
.bss : { *(.bss) }
|
.bss : { *(.bss) } >ram
|
||||||
__bss_end__ = .;
|
__bss_end__ = .;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,18 +1,6 @@
|
||||||
MEMORY
|
INCLUDE ../common/ldscript.common
|
||||||
{
|
|
||||||
/* AT91SAM7S256 has 256k Flash and 64k RAM */
|
|
||||||
/* Important note: the correct ORIGIN for bootphase1 is 0x00100000 and for bootphase2 is 0x00100200
|
|
||||||
However, this will confuse the currently deployed flash code which expects logical and and not
|
|
||||||
physical addresses and performs no sanity checks at all. If confronted with physical addresses,
|
|
||||||
it will happily erase everything and brick the device. So for the time being pretend these addresses
|
|
||||||
to start at 0x0 while updating all the flash code with proper sanity checks, then come back later and
|
|
||||||
fix the addresses. -- Henryk Plötz <henryk@ploetzli.ch> 2009-08-27 */
|
|
||||||
bootphase1 : ORIGIN = 0x00000000, LENGTH = 0x200 /* Phase 1 bootloader: Copies real bootloader to RAM */
|
|
||||||
bootphase2 : ORIGIN = 0x00000200, LENGTH = 0x2000 - 0x200 /* Main bootloader code, stored in Flash, executed from RAM */
|
|
||||||
ram : ORIGIN = 0x00200000, LENGTH = 64K
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
ENTRY(flashstart)
|
||||||
SECTIONS
|
SECTIONS
|
||||||
{
|
{
|
||||||
. = 0;
|
. = 0;
|
||||||
|
|
|
@ -66,8 +66,16 @@ $(ARMOBJ): $(OBJDIR)/%.o: %.c $(INCLUDES)
|
||||||
$(ASMOBJ): $(OBJDIR)/%.o: %.s
|
$(ASMOBJ): $(OBJDIR)/%.o: %.s
|
||||||
$(CC) $(CFLAGS) -mthumb-interwork -o $@ $<
|
$(CC) $(CFLAGS) -mthumb-interwork -o $@ $<
|
||||||
|
|
||||||
|
# This objcopy call translates physical flash addresses to logical addresses
|
||||||
|
# See ldscript.common. -- Henryk Plötz <henryk@ploetzli.ch> 2009-08-27
|
||||||
$(OBJDIR)/%.s19: $(OBJDIR)/%.elf
|
$(OBJDIR)/%.s19: $(OBJDIR)/%.elf
|
||||||
$(OBJCOPY) -Osrec --srec-forceS3 $^ $@
|
$(OBJCOPY) -Osrec --srec-forceS3 --no-change-warnings \
|
||||||
|
--change-section-address bootphase1-0x100000 \
|
||||||
|
--change-section-address bootphase2-0x100000 \
|
||||||
|
--change-section-address fpgaimage-0x100000 \
|
||||||
|
--change-section-address .start-0x100000 \
|
||||||
|
--change-section-address .text-0x100000 \
|
||||||
|
--change-section-address .rodata-0x100000 $^ $@
|
||||||
|
|
||||||
# Automatic dependency generation
|
# Automatic dependency generation
|
||||||
DEPENDENCY_FILES = $(patsubst %.c,$(OBJDIR)/%.d,$(notdir $(THUMBSRC))) \
|
DEPENDENCY_FILES = $(patsubst %.c,$(OBJDIR)/%.d,$(notdir $(THUMBSRC))) \
|
||||||
|
|
16
common/ldscript.common
Normal file
16
common/ldscript.common
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
/* AT91SAM7S256 has 256k Flash and 64k RAM */
|
||||||
|
MEMORY
|
||||||
|
{
|
||||||
|
/* Important note: this memory map has the correct origins for all the flash sections.
|
||||||
|
However, this will confuse the currently deployed flash code which expects logical and and not
|
||||||
|
physical addresses and performs no sanity checks at all. If confronted with physical addresses,
|
||||||
|
it will happily erase everything and brick the device. So for the time being translate these addresses
|
||||||
|
down in the objcopy call while updating all the flash code with proper sanity checks, then come
|
||||||
|
back later and fix the addresses. -- Henryk Plötz <henryk@ploetzli.ch> 2009-08-27 */
|
||||||
|
bootphase1 : ORIGIN = 0x00100000, LENGTH = 0x200 /* Phase 1 bootloader: Copies real bootloader to RAM */
|
||||||
|
bootphase2 : ORIGIN = 0x00100200, LENGTH = 0x2000 - 0x200 /* Main bootloader code, stored in Flash, executed from RAM */
|
||||||
|
fpgaimage : ORIGIN = 0x00102000, LENGTH = 64k - 0x2000 /* Place where the FPGA image will end up */
|
||||||
|
osimage : ORIGIN = 0x00110000, LENGTH = 256K - 64k /* Place where the main OS will end up */
|
||||||
|
ram : ORIGIN = 0x00200000, LENGTH = 64K
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in a new issue