Boot linker edits

This commit is contained in:
Hierophect 2020-01-04 16:23:36 -05:00
parent 53238ad9b2
commit f355642eab
2 changed files with 55 additions and 16 deletions

View File

@ -1,28 +1,52 @@
/* /*
GNU linker script for STM32F401 with bootloader (such as the Meowbit) GNU linker script for STM32F401 with bootloader (from Meowbit Micropython)
Doesn't work:
Traceback (most recent call last):
File "../../tools/build_memory_info.py", line 64, in <module>
regions[region] = int(eval(space))
File "<string>", line 1, in <module>
NameError: name 'FLASH_ISR' is not defined
*/ */
/* Specify the memory areas */ /* Specify the memory areas */
/* FLASH_FS (rx) : ORIGIN = 0x08020000, LENGTH = 128K */
/* sectors 5 128K */
MEMORY MEMORY
{ {
FLASH (rx) : ORIGIN = 0x08000000, LENGTH = 512K - 64K /* entire flash, sans bootloader */ FLASH (rx) : ORIGIN = 0x08010000, LENGTH = 512K - 64K /* entire flash */
FLASH_ISR (rx) : ORIGIN = 0x08000000, LENGTH = 64K /* sector 4, 0-3 used by bootloader*/ FLASH_ISR (rx) : ORIGIN = 0x08010000, LENGTH = 64K /* sector 4, sec 0~3 reserved for booloader */
FLASH_TEXT (rx) : ORIGIN = 0x08010000, LENGTH = 384K /* sector 4 is 64K, sectors 5,6,7 are 128K */ FLASH_TEXT (rx) : ORIGIN = 0x08020000, LENGTH = 384K /* sectors 5, 6,7 are 128K */
RAM (xrw) : ORIGIN = 0x20000194, LENGTH = 96K - 0x194 /* more bootloader schnenaigans */ RAM (xrw) : ORIGIN = 0x20000194, LENGTH = 96K - 0x194
} }
/* produce a link error if there is not this amount of RAM for these sections */ /* produce a link error if there is not this amount of RAM for these sections */
_minimum_stack_size = 2K; _minimum_stack_size = 2K;
_minimum_heap_size = 16K; _minimum_heap_size = 16K;
/* Define tho top end of the stack. The stack is full descending so begins just /* Define the stack. The stack is full descending so begins just above last byte
above last byte of RAM. Note that EABI requires the stack to be 8-byte of RAM. Note that EABI requires the stack to be 8-byte aligned for a call. */
aligned for a call. */ _estack = ORIGIN(RAM) + LENGTH(RAM) - _estack_reserve;
_estack = ORIGIN(RAM) + LENGTH(RAM); _sstack = _estack - 16K; /* tunable */
/* RAM extents for the garbage collector */ /* RAM extents for the garbage collector */
_ram_start = ORIGIN(RAM); _ram_start = ORIGIN(RAM);
_ram_end = ORIGIN(RAM) + LENGTH(RAM); _ram_end = ORIGIN(RAM) + LENGTH(RAM);
_heap_start = _ebss; /* heap starts just after statically allocated memory */
_heap_end = _sstack;
/* Memory layout for internal flash storage configuration:
FLASH_ISR .isr_vector
FLASH_TEXT .text
FLASH_TEXT .data
RAM .data
RAM .bss
RAM .heap
RAM .stack
*/
ENTRY(Reset_Handler) ENTRY(Reset_Handler)
@ -36,8 +60,25 @@ SECTIONS
KEEP(*(.isr_vector)) /* Startup code */ KEEP(*(.isr_vector)) /* Startup code */
/* This first flash block is 16K annd the isr vectors only take up /* This first flash block is 16K annd the isr vectors only take up
about 400 bytes. Micropython pads this with files, but this didn't about 400 bytes. So we pull in a couple of object files to pad it
work with the size of Circuitpython's ff object. */ out. */
. = ALIGN(4);
/* NOTE: If you update the list of files contained in .isr_vector,
then be sure to also update smhal/Makefile where it forcibly
builds each of these files with -Os */
*/ff.o(.text*)
*/vfs_fat_*.o(.text*)
*/py/formatfloat.o(.text*)
*/py/parsenum.o(.text*)
*/py/mpprint.o(.text*)
*/py/compile.o(.text*)
*/py/objset.o(.text*)
*/py/mpz.o(.text*)
*/py/vm.o(.text*)
. = ALIGN(4); . = ALIGN(4);
} >FLASH_ISR } >FLASH_ISR
@ -102,5 +143,3 @@ SECTIONS
.ARM.attributes 0 : { *(.ARM.attributes) } .ARM.attributes 0 : { *(.ARM.attributes) }
} }

View File

@ -5,10 +5,10 @@
/* Specify the memory areas */ /* Specify the memory areas */
MEMORY MEMORY
{ {
FLASH (rx) : ORIGIN = 0x08010000, LENGTH = 512K - 64K /* entire flash, sans bootloader */ FLASH (rx) : ORIGIN = 0x08010000, LENGTH = 512K - 64K /* entire flash */
FLASH_ISR (rx) : ORIGIN = 0x08010000, LENGTH = 64K /* sector 4, 0-3 used by bootloader*/ FLASH_ISR (rx) : ORIGIN = 0x08010000, LENGTH = 64K
FLASH_TEXT (rx) : ORIGIN = 0x08020000, LENGTH = 384K /* sector 4 is 64K, sectors 5,6,7 are 128K */ FLASH_TEXT (rx) : ORIGIN = 0x08020000, LENGTH = 384K /* sector 4 is 64K, sectors 5,6,7 are 128K */
RAM (xrw) : ORIGIN = 0x20000194, LENGTH = 96K - 0x194 /* more bootloader schnenaigans */ RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 96K
} }
/* produce a link error if there is not this amount of RAM for these sections */ /* produce a link error if there is not this amount of RAM for these sections */