Преглед изворни кода

fw: add linker templates for Pebble boards

Signed-off-by: Liam McLoughlin <hexxeh@hexxeh.net>
Liam McLoughlin пре 5 месеци
родитељ
комит
dab84ac01d

+ 20 - 0
src/fw/stm32f2xx_flash_fw.ld.template

@@ -0,0 +1,20 @@
+MEMORY
+{
+    KERNEL_RAM  (xrw) : ORIGIN = @KERNEL_RAM_ADDR@, LENGTH = @KERNEL_RAM_SIZE@
+    WORKER_RAM (xrw)  : ORIGIN = @WORKER_RAM_ADDR@, LENGTH = @WORKER_RAM_SIZE@
+    APP_RAM (xrw)     : ORIGIN = @APP_RAM_ADDR@,    LENGTH = @APP_RAM_SIZE@
+
+    /* Bootloader now ends at 0x8008000, once we're sure we won't break */
+    /* current watches, we should take advantage of this free space. */
+    FLASH (rx) : ORIGIN = @FW_FLASH_ORIGIN@, LENGTH = @FW_FLASH_LENGTH@
+}
+
+__FLASH_start__ = @FLASH_ORIGIN@;
+__FLASH_size__ = @FLASH_SIZE@;
+
+REGION_ALIAS("REGION_ISR_STACK", KERNEL_RAM);
+REGION_ALIAS("REGION_KERNEL_STACKS", KERNEL_RAM);
+REGION_ALIAS("REGION_KERNEL_HEAP", KERNEL_RAM);
+
+@BOOTLOADER_SYMBOLS@
+

+ 18 - 0
src/fw/stm32f412_flash_fw.ld.template

@@ -0,0 +1,18 @@
+MEMORY
+{
+    KERNEL_RAM  (xrw) : ORIGIN = @KERNEL_RAM_ADDR@, LENGTH = @KERNEL_RAM_SIZE@
+    WORKER_RAM (xrw)  : ORIGIN = @WORKER_RAM_ADDR@, LENGTH = @WORKER_RAM_SIZE@
+    APP_RAM (xrw)     : ORIGIN = @APP_RAM_ADDR@,    LENGTH = @APP_RAM_SIZE@
+
+    /* Bootloader now ends at 0x8008000, once we're sure we won't break */
+    /* current watches, we should take advantage of this free space. */
+    FLASH (rx) : ORIGIN = @FW_FLASH_ORIGIN@, LENGTH = @FW_FLASH_LENGTH@
+}
+
+__FLASH_start__ = @FLASH_ORIGIN@;
+__FLASH_size__ = @FLASH_SIZE@;
+
+REGION_ALIAS("REGION_ISR_STACK", KERNEL_RAM);
+REGION_ALIAS("REGION_KERNEL_STACKS", KERNEL_RAM);
+REGION_ALIAS("REGION_KERNEL_HEAP", KERNEL_RAM);
+

+ 22 - 0
src/fw/stm32f439_flash_fw.ld.template

@@ -0,0 +1,22 @@
+MEMORY
+{
+    KERNEL_RAM  (xrw) : ORIGIN = @KERNEL_RAM_ADDR@, LENGTH = @KERNEL_RAM_SIZE@
+    WORKER_RAM (xrw)  : ORIGIN = @WORKER_RAM_ADDR@, LENGTH = @WORKER_RAM_SIZE@
+    APP_RAM (xrw)     : ORIGIN = @APP_RAM_ADDR@,    LENGTH = @APP_RAM_SIZE@
+
+    CCM (rw) : ORIGIN = 0x10000000, LENGTH = 64K
+
+    /* Bootloader now ends at 0x8008000, once we're sure we won't break */
+    /* current watches, we should take advantage of this free space. */
+    FLASH (rx) : ORIGIN = @FW_FLASH_ORIGIN@, LENGTH = @FW_FLASH_LENGTH@
+}
+
+__FLASH_start__ = @FLASH_ORIGIN@;
+__FLASH_size__ = @FLASH_SIZE@;
+
+__CCM_RAM_start__ = ORIGIN(CCM);
+__CCM_RAM_size__ = LENGTH(CCM);
+
+REGION_ALIAS("REGION_ISR_STACK", KERNEL_RAM);
+REGION_ALIAS("REGION_KERNEL_STACKS", CCM);
+REGION_ALIAS("REGION_KERNEL_HEAP", CCM);

+ 45 - 0
src/fw/stm32f7xx_flash_fw.ld.template

@@ -0,0 +1,45 @@
+MEMORY
+{
+    /*
+     * STM32F769 has 512kb total of system RAM
+     * DTCM-RAM - 128kb - TCM "for critical real-time data"
+     *   0x20000000 - 0x2001ffff
+     * SRAM1 - 368kb - AHB
+     *   0x20020000 - 0x2007bfff
+     * SRAM2 - 16kb - AHB
+     *   0x2007c000 - 0x2007ffff
+     *
+     * We put a bunch of static variables (tagged with DTCM_BSS) into DTCM and then use both SRAM
+     * regions as one continuous blob which gives us 384k of RAM to play with.
+     */
+    DTCM (rw) : ORIGIN = 0x20000000, LENGTH = 128K
+
+    KERNEL_RAM  (xrw) : ORIGIN = @KERNEL_RAM_ADDR@, LENGTH = @KERNEL_RAM_SIZE@
+    WORKER_RAM (xrw)  : ORIGIN = @WORKER_RAM_ADDR@, LENGTH = @WORKER_RAM_SIZE@
+    APP_RAM (xrw)     : ORIGIN = @APP_RAM_ADDR@,    LENGTH = @APP_RAM_SIZE@
+
+    FLASH (rx) : ORIGIN = @FW_FLASH_ORIGIN@, LENGTH = @FW_FLASH_LENGTH@
+}
+
+__FLASH_start__ = @FLASH_ORIGIN@;
+__FLASH_size__ = @FLASH_SIZE@;
+
+__DTCM_RAM_size__ = LENGTH(DTCM);
+
+REGION_ALIAS("REGION_ISR_STACK", DTCM);
+REGION_ALIAS("REGION_KERNEL_STACKS", DTCM);
+REGION_ALIAS("REGION_KERNEL_HEAP", KERNEL_RAM);
+
+SECTIONS
+{
+    .dtcm_bss (NOLOAD) : {
+        __dtcm_bss_start = .;
+
+        *(.dtcm_bss)
+        *(.dtcm_bss.*)
+
+        . = ALIGN(8);
+        __dtcm_bss_end = .;
+    } >DTCM
+}
+