]> git.zerfleddert.de Git - proxmark3-svn/commitdiff
Add a common linker script with the memory map for the complete project
authorhenryk@ploetzli.ch <henryk@ploetzli.ch@ef4ab9da-24cd-11de-8aaa-f3a34680c41f>
Thu, 27 Aug 2009 16:07:35 +0000 (16:07 +0000)
committerhenryk@ploetzli.ch <henryk@ploetzli.ch@ef4ab9da-24cd-11de-8aaa-f3a34680c41f>
Thu, 27 Aug 2009 16:07:35 +0000 (16:07 +0000)
Use the correct physical addresses in the memory map, and instead translate the addresses during postprocessing with objcopy

armsrc/ldscript
armsrc/ldscript-fpga
bootrom/ldscript-flash
common/Makefile.common
common/ldscript.common [new file with mode: 0644]

index 0489cfe457997e67c0cb6a130bc123887990ceea..81ed4edf3962201383b0f47bc8977d9a69084ee7 100644 (file)
@@ -1,13 +1,21 @@
+INCLUDE ../common/ldscript.common\r
+\r
 ENTRY(Vector)\r
 SECTIONS\r
 {\r
-       . = 0x00010000;\r
-       .start : { obj/start.o(.text) }\r
-       .text : { *(.text) }\r
-       .rodata : { *(.rodata) }\r
-       . = 0x00200000;\r
-       .data : { *(.data) }\r
+       .start : { obj/start.o(.text) } >osimage\r
+       .text : { \r
+               *(.text)\r
+               *(.text.*)\r
+               *(.glue_7)\r
+               *(.glue_7t)\r
+       } >osimage\r
+       .rodata : { \r
+               *(.rodata) \r
+               *(.rodata*) \r
+       } >osimage\r
+       .data : { *(.data) } >ram\r
        __bss_start__ = .;\r
-       .bss : { *(.bss) }\r
+       .bss : { *(.bss) } >ram\r
        __bss_end__ = .;\r
 }\r
index da8b1a21d802e5b4411ec329473eaf9f1b4668b1..4c926bf8ce7a4ec1fc09bc14a1e93f074cfd8a2f 100644 (file)
@@ -1,11 +1,13 @@
+INCLUDE ../common/ldscript.common\r
+\r
 SECTIONS\r
 {\r
-       . = 0x00002000;\r
-       .text : { obj/fpgaimg.o(.text) *(.text) }\r
-       .rodata : { *(.rodata) }\r
-       . = 0x00200000;\r
-       .data : { *(.data) }\r
+       fpgaimage : { \r
+               obj/fpgaimg.o(.text) *(.text) \r
+               *(.rodata) \r
+       } >fpgaimage\r
+       .data : { *(.data) } >ram\r
        __bss_start__ = .;\r
-       .bss : { *(.bss) }\r
+       .bss : { *(.bss) } >ram\r
        __bss_end__ = .;\r
 }\r
index 55078012e549113923d706d487659c5ea1a46ce9..50218d684e5cefe5e12130cecd0863032e50bb69 100644 (file)
@@ -1,18 +1,6 @@
-MEMORY \r
-{\r
-       /* AT91SAM7S256 has 256k Flash and 64k RAM */\r
-       /* Important note: the correct ORIGIN for bootphase1 is 0x00100000 and for bootphase2 is 0x00100200\r
-          However, this will confuse the currently deployed flash code which expects logical and and not\r
-          physical addresses and performs no sanity checks at all. If confronted with physical addresses, \r
-          it will happily erase everything and brick the device. So for the time being pretend these addresses\r
-          to start at 0x0 while updating all the flash code with proper sanity checks, then come back later and\r
-          fix the addresses. -- Henryk Plötz <henryk@ploetzli.ch> 2009-08-27 */\r
-        bootphase1 : ORIGIN = 0x00000000, LENGTH = 0x200 /* Phase 1 bootloader: Copies real bootloader to RAM */\r
-        bootphase2 : ORIGIN = 0x00000200, LENGTH = 0x2000 - 0x200 /* Main bootloader code, stored in Flash, executed from RAM */\r
-        ram     : ORIGIN = 0x00200000, LENGTH = 64K\r
-}\r
-\r
+INCLUDE ../common/ldscript.common\r
 \r
+ENTRY(flashstart)\r
 SECTIONS\r
 {\r
     . = 0;\r
index eab96080e6a9757a220de8d19cfeb9717d963dcb..1c4738a16516967b86331b24c2e4eaa049449f03 100644 (file)
@@ -66,8 +66,16 @@ $(ARMOBJ): $(OBJDIR)/%.o: %.c $(INCLUDES)
 $(ASMOBJ): $(OBJDIR)/%.o: %.s
        $(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
-       $(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
 DEPENDENCY_FILES = $(patsubst %.c,$(OBJDIR)/%.d,$(notdir $(THUMBSRC))) \
diff --git a/common/ldscript.common b/common/ldscript.common
new file mode 100644 (file)
index 0000000..4c4bd39
--- /dev/null
@@ -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
+}
+
Impressum, Datenschutz