Merge branch 'master' into testing_yubikey
This commit is contained in:
commit
251eb6bf64
@ -35,6 +35,8 @@ function build() {
|
|||||||
build bootloader nonverifying
|
build bootloader nonverifying
|
||||||
build bootloader verifying
|
build bootloader verifying
|
||||||
build firmware hacker solo
|
build firmware hacker solo
|
||||||
|
build firmware hacker-debug-1 solo
|
||||||
|
build firmware hacker-debug-2 solo
|
||||||
build firmware secure solo
|
build firmware secure solo
|
||||||
|
|
||||||
pip install -U pip
|
pip install -U pip
|
||||||
@ -43,3 +45,7 @@ cd ${out_dir}
|
|||||||
bundle="bundle-hacker-${version}"
|
bundle="bundle-hacker-${version}"
|
||||||
/opt/conda/bin/solo mergehex bootloader-nonverifying-${version}.hex firmware-hacker-${version}.hex ${bundle}.hex
|
/opt/conda/bin/solo mergehex bootloader-nonverifying-${version}.hex firmware-hacker-${version}.hex ${bundle}.hex
|
||||||
sha256sum ${bundle}.hex > ${bundle}.sha2
|
sha256sum ${bundle}.hex > ${bundle}.sha2
|
||||||
|
bundle="bundle-hacker-debug-1-${version}"
|
||||||
|
/opt/conda/bin/solo mergehex bootloader-nonverifying-${version}.hex firmware-hacker-debug-1-${version}.hex ${bundle}.hex
|
||||||
|
bundle="bundle-hacker-debug-2-${version}"
|
||||||
|
/opt/conda/bin/solo mergehex bootloader-nonverifying-${version}.hex firmware-hacker-debug-2-${version}.hex ${bundle}.hex
|
||||||
|
@ -93,6 +93,11 @@ flashboot: solo.hex bootloader.hex
|
|||||||
STM32_Programmer_CLI -c port=SWD -halt -e all --readunprotect
|
STM32_Programmer_CLI -c port=SWD -halt -e all --readunprotect
|
||||||
STM32_Programmer_CLI -c port=SWD -halt -d bootloader.hex -rst
|
STM32_Programmer_CLI -c port=SWD -halt -d bootloader.hex -rst
|
||||||
|
|
||||||
|
flash-firmware:
|
||||||
|
arm-none-eabi-size -A solo.elf
|
||||||
|
solo program aux enter-bootloader
|
||||||
|
solo program bootloader solo.hex
|
||||||
|
|
||||||
# tell ST DFU to enter application
|
# tell ST DFU to enter application
|
||||||
detach:
|
detach:
|
||||||
STM32_Programmer_CLI -c port=usb1 -ob nBOOT0=1
|
STM32_Programmer_CLI -c port=usb1 -ob nBOOT0=1
|
||||||
|
@ -1,73 +0,0 @@
|
|||||||
CC=arm-none-eabi-gcc
|
|
||||||
CP=arm-none-eabi-objcopy
|
|
||||||
SZ=arm-none-eabi-size
|
|
||||||
AR=arm-none-eabi-ar
|
|
||||||
|
|
||||||
# ST related
|
|
||||||
SRC = src/main.c src/init.c src/flash.c src/led.c
|
|
||||||
SRC += src/startup_stm32l432xx.s src/system_stm32l4xx.c
|
|
||||||
SRC += lib/stm32l4xx_ll_gpio.c lib/stm32l4xx_ll_pwr.c lib/stm32l4xx_ll_rcc.c lib/stm32l4xx_ll_tim.c lib/stm32l4xx_ll_utils.c
|
|
||||||
|
|
||||||
OBJ1=$(SRC:.c=.o)
|
|
||||||
OBJ=$(OBJ1:.s=.o)
|
|
||||||
|
|
||||||
INC = -Isrc/ -Isrc/cmsis/ -Ilib/ -Ilib/usbd/ -I../../fido2/ -I../../fido2/extensions
|
|
||||||
INC += -I../../tinycbor/src -I../../crypto/sha256 -I../../crypto/micro-ecc
|
|
||||||
INC += -I../../crypto/tiny-AES-c
|
|
||||||
|
|
||||||
SEARCH=-L../../tinycbor/lib
|
|
||||||
|
|
||||||
LDSCRIPT=stm32l432xx.ld
|
|
||||||
|
|
||||||
CFLAGS= $(INC)
|
|
||||||
|
|
||||||
TARGET=solo
|
|
||||||
HW=-mcpu=cortex-m4 -mfpu=fpv4-sp-d16 -mfloat-abi=hard -mthumb
|
|
||||||
|
|
||||||
# Solo or Nucleo board
|
|
||||||
CHIP=STM32L432xx
|
|
||||||
|
|
||||||
DEFINES = -D$(CHIP) -DAES256=1 -DUSE_FULL_LL_DRIVER
|
|
||||||
DEFINES += -DTEST_SOLO_STM32 -DTEST
|
|
||||||
|
|
||||||
CFLAGS=$(INC) -c $(DEFINES) -Wall -fdata-sections -ffunction-sections $(HW)
|
|
||||||
LDFLAGS_LIB=$(HW) $(SEARCH) -specs=nano.specs -specs=nosys.specs -Wl,--gc-sections -lnosys
|
|
||||||
LDFLAGS=$(HW) $(LDFLAGS_LIB) -T$(LDSCRIPT) -Wl,-Map=$(TARGET).map,--cref
|
|
||||||
|
|
||||||
|
|
||||||
.PRECIOUS: %.o
|
|
||||||
|
|
||||||
all: $(TARGET).elf
|
|
||||||
$(SZ) $^
|
|
||||||
|
|
||||||
%.o: %.c
|
|
||||||
$(CC) $^ $(HW) -Os $(CFLAGS) -o $@
|
|
||||||
|
|
||||||
../../crypto/micro-ecc/uECC.o: ../../crypto/micro-ecc/uECC.c
|
|
||||||
$(CC) $^ $(HW) -O3 $(CFLAGS) -o $@
|
|
||||||
|
|
||||||
%.o: %.s
|
|
||||||
$(CC) $^ $(HW) -Os $(CFLAGS) -o $@
|
|
||||||
|
|
||||||
%.elf: $(OBJ)
|
|
||||||
$(CC) $^ $(HW) $(LDFLAGS) -o $@
|
|
||||||
|
|
||||||
%.hex: %.elf
|
|
||||||
$(CP) -O ihex $^ $(TARGET).hex
|
|
||||||
$(CP) -O binary $^ $(TARGET).bin
|
|
||||||
|
|
||||||
clean:
|
|
||||||
rm -f *.o src/*.o src/*.elf *.elf *.hex $(OBJ)
|
|
||||||
|
|
||||||
flash: $(TARGET).hex
|
|
||||||
STM32_Programmer_CLI -c port=SWD -halt -e all --readunprotect
|
|
||||||
STM32_Programmer_CLI -c port=SWD -halt -d $(TARGET).hex -rst
|
|
||||||
|
|
||||||
detach:
|
|
||||||
STM32_Programmer_CLI -c port=usb1 -ob nBOOT0=1
|
|
||||||
|
|
||||||
cbor:
|
|
||||||
cd ../../tinycbor/ && make clean
|
|
||||||
cd ../../tinycbor/ && make CC="$(CC)" AR=$(AR) \
|
|
||||||
LDFLAGS="$(LDFLAGS_LIB)" \
|
|
||||||
CFLAGS="$(CFLAGS)"
|
|
@ -110,7 +110,7 @@ __ALIGN_BEGIN uint8_t COMPOSITE_CDC_HID_DESCRIPTOR[COMPOSITE_CDC_HID_DESCRIPTOR_
|
|||||||
0x03, /* bNumEndpoints: 3 endpoints used */
|
0x03, /* bNumEndpoints: 3 endpoints used */
|
||||||
0x02, /* bInterfaceClass: Communication Interface Class */
|
0x02, /* bInterfaceClass: Communication Interface Class */
|
||||||
0x02, /* bInterfaceSubClass: Abstract Control Model */
|
0x02, /* bInterfaceSubClass: Abstract Control Model */
|
||||||
0x01, /* bInterfaceProtocol: Common AT commands */
|
0x00, /* bInterfaceProtocol: Common AT commands */
|
||||||
0x00, /* iInterface: */
|
0x00, /* iInterface: */
|
||||||
|
|
||||||
/*Header Functional Descriptor*/
|
/*Header Functional Descriptor*/
|
||||||
|
@ -1,201 +1,74 @@
|
|||||||
/*
|
/* Copyright 2019 SoloKeys Developers */
|
||||||
*****************************************************************************
|
/* */
|
||||||
**
|
/* Licensed under the Apache License, Version 2.0, <LICENSE-APACHE or */
|
||||||
|
/* http://apache.org/licenses/LICENSE-2.0> or the MIT license <LICENSE-MIT or */
|
||||||
|
/* http://opensource.org/licenses/MIT>, at your option. This file may not be */
|
||||||
|
/* copied, modified, or distributed except according to those terms. */
|
||||||
|
|
||||||
** File : LinkerScript.ld
|
|
||||||
**
|
|
||||||
** Abstract : Linker script for STM32L432KCUx Device with
|
|
||||||
** 256KByte FLASH, 64KByte RAM
|
|
||||||
**
|
|
||||||
** Set heap size, stack size and stack location according
|
|
||||||
** to application requirements.
|
|
||||||
**
|
|
||||||
** Set memory bank area and size if external memory is used.
|
|
||||||
**
|
|
||||||
** Target : STMicroelectronics STM32
|
|
||||||
**
|
|
||||||
**
|
|
||||||
** Distribution: The file is distributed as is, without any warranty
|
|
||||||
** of any kind.
|
|
||||||
**
|
|
||||||
** (c)Copyright Ac6.
|
|
||||||
** You may use this file as-is or modify it according to the needs of your
|
|
||||||
** project. Distribution of this file (unmodified or modified) is not
|
|
||||||
** permitted. Ac6 permit registered System Workbench for MCU users the
|
|
||||||
** rights to distribute the assembled, compiled & linked contents of this
|
|
||||||
** file as part of an application binary file, provided that it is built
|
|
||||||
** using the System Workbench for MCU toolchain.
|
|
||||||
**
|
|
||||||
*****************************************************************************
|
|
||||||
*/
|
|
||||||
|
|
||||||
/* Entry Point */
|
|
||||||
ENTRY(Reset_Handler)
|
ENTRY(Reset_Handler)
|
||||||
|
|
||||||
/* Highest address of the user mode stack */
|
/* End of RAM */
|
||||||
_estack = 0x2000c000; /* end of RAM */
|
_estack = 0x2000c000;
|
||||||
/* Generate a link error if heap and stack don't fit into RAM */
|
|
||||||
_Min_Heap_Size = 0x200; /* required amount of heap */
|
_MIN_STACK_SIZE = 0x400;
|
||||||
_Min_Stack_Size = 0x400; /* required amount of stack */
|
|
||||||
|
|
||||||
/* Specify the memory areas */
|
|
||||||
MEMORY
|
MEMORY
|
||||||
{
|
{
|
||||||
FLASH (rx) : ORIGIN = 0x08000000, LENGTH = 20K
|
flash (rx) : ORIGIN = 0x08000000, LENGTH = 20K
|
||||||
RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 48K
|
ram (xrw) : ORIGIN = 0x20000000, LENGTH = 48K
|
||||||
SRAM2 (rw) : ORIGIN = 0x10000000, LENGTH = 16K
|
sram2 (rw) : ORIGIN = 0x10000000, LENGTH = 16K
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Define output sections */
|
|
||||||
SECTIONS
|
SECTIONS
|
||||||
{
|
{
|
||||||
/* The startup code goes first into FLASH */
|
|
||||||
.isr_vector :
|
.isr_vector :
|
||||||
{
|
{
|
||||||
. = ALIGN(8);
|
. = ALIGN(8);
|
||||||
KEEP(*(.isr_vector)) /* Startup code */
|
KEEP(*(.isr_vector))
|
||||||
. = ALIGN(8);
|
. = ALIGN(8);
|
||||||
} >FLASH
|
} >flash
|
||||||
|
|
||||||
/* The program code and other data goes into FLASH */
|
|
||||||
.text :
|
.text :
|
||||||
{
|
{
|
||||||
. = ALIGN(8);
|
. = ALIGN(8);
|
||||||
*(.text) /* .text sections (code) */
|
*(.text*)
|
||||||
*(.text*) /* .text* sections (code) */
|
*(.rodata*)
|
||||||
*(.glue_7) /* glue arm to thumb code */
|
KEEP(*(.init))
|
||||||
*(.glue_7t) /* glue thumb to arm code */
|
KEEP(*(.finit))
|
||||||
*(.eh_frame)
|
. = ALIGN(8);
|
||||||
|
_etext = .;
|
||||||
|
} >flash
|
||||||
|
|
||||||
KEEP (*(.init))
|
|
||||||
KEEP (*(.fini))
|
|
||||||
|
|
||||||
. = ALIGN(8);
|
|
||||||
_etext = .; /* define a global symbols at end of code */
|
|
||||||
} >FLASH
|
|
||||||
|
|
||||||
/* Constant data goes into FLASH */
|
|
||||||
.rodata :
|
|
||||||
{
|
|
||||||
. = ALIGN(8);
|
|
||||||
*(.rodata) /* .rodata sections (constants, strings, etc.) */
|
|
||||||
*(.rodata*) /* .rodata* sections (constants, strings, etc.) */
|
|
||||||
. = ALIGN(8);
|
|
||||||
} >FLASH
|
|
||||||
|
|
||||||
.ARM.extab :
|
|
||||||
{
|
|
||||||
. = ALIGN(8);
|
|
||||||
*(.ARM.extab* .gnu.linkonce.armextab.*)
|
|
||||||
. = ALIGN(8);
|
|
||||||
} >FLASH
|
|
||||||
.ARM : {
|
|
||||||
. = ALIGN(8);
|
|
||||||
__exidx_start = .;
|
|
||||||
*(.ARM.exidx*)
|
|
||||||
__exidx_end = .;
|
|
||||||
. = ALIGN(8);
|
|
||||||
} >FLASH
|
|
||||||
|
|
||||||
.preinit_array :
|
|
||||||
{
|
|
||||||
. = ALIGN(8);
|
|
||||||
PROVIDE_HIDDEN (__preinit_array_start = .);
|
|
||||||
KEEP (*(.preinit_array*))
|
|
||||||
PROVIDE_HIDDEN (__preinit_array_end = .);
|
|
||||||
. = ALIGN(8);
|
|
||||||
} >FLASH
|
|
||||||
|
|
||||||
.init_array :
|
|
||||||
{
|
|
||||||
. = ALIGN(8);
|
|
||||||
PROVIDE_HIDDEN (__init_array_start = .);
|
|
||||||
KEEP (*(SORT(.init_array.*)))
|
|
||||||
KEEP (*(.init_array*))
|
|
||||||
PROVIDE_HIDDEN (__init_array_end = .);
|
|
||||||
. = ALIGN(8);
|
|
||||||
} >FLASH
|
|
||||||
.fini_array :
|
|
||||||
{
|
|
||||||
. = ALIGN(8);
|
|
||||||
PROVIDE_HIDDEN (__fini_array_start = .);
|
|
||||||
KEEP (*(SORT(.fini_array.*)))
|
|
||||||
KEEP (*(.fini_array*))
|
|
||||||
PROVIDE_HIDDEN (__fini_array_end = .);
|
|
||||||
. = ALIGN(8);
|
|
||||||
} >FLASH
|
|
||||||
|
|
||||||
/* used by the startup to initialize data */
|
|
||||||
_sidata = LOADADDR(.data);
|
_sidata = LOADADDR(.data);
|
||||||
|
|
||||||
/* Initialized data sections goes into RAM, load LMA copy after code */
|
|
||||||
.data :
|
.data :
|
||||||
{
|
{
|
||||||
. = ALIGN(8);
|
. = ALIGN(8);
|
||||||
_sdata = .; /* create a global symbol at data start */
|
_sdata = .;
|
||||||
*(.data) /* .data sections */
|
*(.data*)
|
||||||
*(.data*) /* .data* sections */
|
|
||||||
|
|
||||||
. = ALIGN(8);
|
. = ALIGN(8);
|
||||||
_edata = .; /* define a global symbol at data end */
|
_edata = .;
|
||||||
} >RAM AT> FLASH
|
} >ram AT> flash
|
||||||
|
|
||||||
_sisram2 = LOADADDR(.sram2);
|
|
||||||
|
|
||||||
/* CCM-RAM section
|
|
||||||
*
|
|
||||||
* IMPORTANT NOTE!
|
|
||||||
* If initialized variables will be placed in this section,
|
|
||||||
* the startup code needs to be modified to copy the init-values.
|
|
||||||
*/
|
|
||||||
.sram2 :
|
|
||||||
{
|
|
||||||
. = ALIGN(8);
|
|
||||||
_ssram2 = .; /* create a global symbol at sram2 start */
|
|
||||||
*(.sram2)
|
|
||||||
*(.sram2*)
|
|
||||||
|
|
||||||
. = ALIGN(8);
|
|
||||||
_esram2 = .; /* create a global symbol at sram2 end */
|
|
||||||
} >SRAM2 AT> FLASH
|
|
||||||
|
|
||||||
|
|
||||||
/* Uninitialized data section */
|
|
||||||
. = ALIGN(4);
|
|
||||||
.bss :
|
.bss :
|
||||||
{
|
{
|
||||||
/* This is used by the startup in order to initialize the .bss secion */
|
. = ALIGN(4);
|
||||||
_sbss = .; /* define a global symbol at bss start */
|
_sbss = .;
|
||||||
__bss_start__ = _sbss;
|
__bss_start__ = _sbss;
|
||||||
*(.bss)
|
|
||||||
*(.bss*)
|
*(.bss*)
|
||||||
*(COMMON)
|
*(COMMON)
|
||||||
|
|
||||||
. = ALIGN(4);
|
. = ALIGN(4);
|
||||||
_ebss = .; /* define a global symbol at bss end */
|
_ebss = .;
|
||||||
__bss_end__ = _ebss;
|
__bss_end__ = _ebss;
|
||||||
} >RAM
|
} > ram
|
||||||
|
|
||||||
/* User_heap_stack section, used to check that there is enough RAM left */
|
._stack :
|
||||||
._user_heap_stack :
|
|
||||||
{
|
{
|
||||||
. = ALIGN(8);
|
. = ALIGN(8);
|
||||||
PROVIDE ( end = . );
|
end = .;
|
||||||
PROVIDE ( _end = . );
|
_end = .;
|
||||||
. = . + _Min_Heap_Size;
|
. = . + _MIN_STACK_SIZE;
|
||||||
. = . + _Min_Stack_Size;
|
|
||||||
. = ALIGN(8);
|
. = ALIGN(8);
|
||||||
} >RAM
|
} > ram
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* Remove information from the standard libraries */
|
|
||||||
/DISCARD/ :
|
|
||||||
{
|
|
||||||
libc.a ( * )
|
|
||||||
libm.a ( * )
|
|
||||||
libgcc.a ( * )
|
|
||||||
}
|
|
||||||
|
|
||||||
.ARM.attributes 0 : { *(.ARM.attributes) }
|
|
||||||
}
|
}
|
||||||
|
@ -1,201 +1,74 @@
|
|||||||
/*
|
/* Copyright 2019 SoloKeys Developers */
|
||||||
*****************************************************************************
|
/* */
|
||||||
**
|
/* Licensed under the Apache License, Version 2.0, <LICENSE-APACHE or */
|
||||||
|
/* http://apache.org/licenses/LICENSE-2.0> or the MIT license <LICENSE-MIT or */
|
||||||
|
/* http://opensource.org/licenses/MIT>, at your option. This file may not be */
|
||||||
|
/* copied, modified, or distributed except according to those terms. */
|
||||||
|
|
||||||
** File : LinkerScript.ld
|
|
||||||
**
|
|
||||||
** Abstract : Linker script for STM32L432KCUx Device with
|
|
||||||
** 256KByte FLASH, 64KByte RAM
|
|
||||||
**
|
|
||||||
** Set heap size, stack size and stack location according
|
|
||||||
** to application requirements.
|
|
||||||
**
|
|
||||||
** Set memory bank area and size if external memory is used.
|
|
||||||
**
|
|
||||||
** Target : STMicroelectronics STM32
|
|
||||||
**
|
|
||||||
**
|
|
||||||
** Distribution: The file is distributed as is, without any warranty
|
|
||||||
** of any kind.
|
|
||||||
**
|
|
||||||
** (c)Copyright Ac6.
|
|
||||||
** You may use this file as-is or modify it according to the needs of your
|
|
||||||
** project. Distribution of this file (unmodified or modified) is not
|
|
||||||
** permitted. Ac6 permit registered System Workbench for MCU users the
|
|
||||||
** rights to distribute the assembled, compiled & linked contents of this
|
|
||||||
** file as part of an application binary file, provided that it is built
|
|
||||||
** using the System Workbench for MCU toolchain.
|
|
||||||
**
|
|
||||||
*****************************************************************************
|
|
||||||
*/
|
|
||||||
|
|
||||||
/* Entry Point */
|
|
||||||
ENTRY(Reset_Handler)
|
ENTRY(Reset_Handler)
|
||||||
|
|
||||||
/* Highest address of the user mode stack */
|
/* End of RAM */
|
||||||
_estack = 0x2000c000; /* end of RAM */
|
_estack = 0x2000c000;
|
||||||
/* Generate a link error if heap and stack don't fit into RAM */
|
|
||||||
_Min_Heap_Size = 0x200; /* required amount of heap */
|
_MIN_STACK_SIZE = 0x400;
|
||||||
_Min_Stack_Size = 0x400; /* required amount of stack */
|
|
||||||
|
|
||||||
/* Specify the memory areas */
|
|
||||||
MEMORY
|
MEMORY
|
||||||
{
|
{
|
||||||
FLASH (rx) : ORIGIN = 0x08000000, LENGTH = 32K
|
flash (rx) : ORIGIN = 0x08000000, LENGTH = 32K
|
||||||
RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 48K
|
ram (xrw) : ORIGIN = 0x20000000, LENGTH = 48K
|
||||||
SRAM2 (rw) : ORIGIN = 0x10000000, LENGTH = 16K
|
sram2 (rw) : ORIGIN = 0x10000000, LENGTH = 16K
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Define output sections */
|
|
||||||
SECTIONS
|
SECTIONS
|
||||||
{
|
{
|
||||||
/* The startup code goes first into FLASH */
|
|
||||||
.isr_vector :
|
.isr_vector :
|
||||||
{
|
{
|
||||||
. = ALIGN(8);
|
. = ALIGN(8);
|
||||||
KEEP(*(.isr_vector)) /* Startup code */
|
KEEP(*(.isr_vector))
|
||||||
. = ALIGN(8);
|
. = ALIGN(8);
|
||||||
} >FLASH
|
} >flash
|
||||||
|
|
||||||
/* The program code and other data goes into FLASH */
|
|
||||||
.text :
|
.text :
|
||||||
{
|
{
|
||||||
. = ALIGN(8);
|
. = ALIGN(8);
|
||||||
*(.text) /* .text sections (code) */
|
*(.text*)
|
||||||
*(.text*) /* .text* sections (code) */
|
*(.rodata*)
|
||||||
*(.glue_7) /* glue arm to thumb code */
|
KEEP(*(.init))
|
||||||
*(.glue_7t) /* glue thumb to arm code */
|
KEEP(*(.finit))
|
||||||
*(.eh_frame)
|
. = ALIGN(8);
|
||||||
|
_etext = .;
|
||||||
|
} >flash
|
||||||
|
|
||||||
KEEP (*(.init))
|
|
||||||
KEEP (*(.fini))
|
|
||||||
|
|
||||||
. = ALIGN(8);
|
|
||||||
_etext = .; /* define a global symbols at end of code */
|
|
||||||
} >FLASH
|
|
||||||
|
|
||||||
/* Constant data goes into FLASH */
|
|
||||||
.rodata :
|
|
||||||
{
|
|
||||||
. = ALIGN(8);
|
|
||||||
*(.rodata) /* .rodata sections (constants, strings, etc.) */
|
|
||||||
*(.rodata*) /* .rodata* sections (constants, strings, etc.) */
|
|
||||||
. = ALIGN(8);
|
|
||||||
} >FLASH
|
|
||||||
|
|
||||||
.ARM.extab :
|
|
||||||
{
|
|
||||||
. = ALIGN(8);
|
|
||||||
*(.ARM.extab* .gnu.linkonce.armextab.*)
|
|
||||||
. = ALIGN(8);
|
|
||||||
} >FLASH
|
|
||||||
.ARM : {
|
|
||||||
. = ALIGN(8);
|
|
||||||
__exidx_start = .;
|
|
||||||
*(.ARM.exidx*)
|
|
||||||
__exidx_end = .;
|
|
||||||
. = ALIGN(8);
|
|
||||||
} >FLASH
|
|
||||||
|
|
||||||
.preinit_array :
|
|
||||||
{
|
|
||||||
. = ALIGN(8);
|
|
||||||
PROVIDE_HIDDEN (__preinit_array_start = .);
|
|
||||||
KEEP (*(.preinit_array*))
|
|
||||||
PROVIDE_HIDDEN (__preinit_array_end = .);
|
|
||||||
. = ALIGN(8);
|
|
||||||
} >FLASH
|
|
||||||
|
|
||||||
.init_array :
|
|
||||||
{
|
|
||||||
. = ALIGN(8);
|
|
||||||
PROVIDE_HIDDEN (__init_array_start = .);
|
|
||||||
KEEP (*(SORT(.init_array.*)))
|
|
||||||
KEEP (*(.init_array*))
|
|
||||||
PROVIDE_HIDDEN (__init_array_end = .);
|
|
||||||
. = ALIGN(8);
|
|
||||||
} >FLASH
|
|
||||||
.fini_array :
|
|
||||||
{
|
|
||||||
. = ALIGN(8);
|
|
||||||
PROVIDE_HIDDEN (__fini_array_start = .);
|
|
||||||
KEEP (*(SORT(.fini_array.*)))
|
|
||||||
KEEP (*(.fini_array*))
|
|
||||||
PROVIDE_HIDDEN (__fini_array_end = .);
|
|
||||||
. = ALIGN(8);
|
|
||||||
} >FLASH
|
|
||||||
|
|
||||||
/* used by the startup to initialize data */
|
|
||||||
_sidata = LOADADDR(.data);
|
_sidata = LOADADDR(.data);
|
||||||
|
|
||||||
/* Initialized data sections goes into RAM, load LMA copy after code */
|
|
||||||
.data :
|
.data :
|
||||||
{
|
{
|
||||||
. = ALIGN(8);
|
. = ALIGN(8);
|
||||||
_sdata = .; /* create a global symbol at data start */
|
_sdata = .;
|
||||||
*(.data) /* .data sections */
|
*(.data*)
|
||||||
*(.data*) /* .data* sections */
|
|
||||||
|
|
||||||
. = ALIGN(8);
|
. = ALIGN(8);
|
||||||
_edata = .; /* define a global symbol at data end */
|
_edata = .;
|
||||||
} >RAM AT> FLASH
|
} >ram AT> flash
|
||||||
|
|
||||||
_sisram2 = LOADADDR(.sram2);
|
|
||||||
|
|
||||||
/* CCM-RAM section
|
|
||||||
*
|
|
||||||
* IMPORTANT NOTE!
|
|
||||||
* If initialized variables will be placed in this section,
|
|
||||||
* the startup code needs to be modified to copy the init-values.
|
|
||||||
*/
|
|
||||||
.sram2 :
|
|
||||||
{
|
|
||||||
. = ALIGN(8);
|
|
||||||
_ssram2 = .; /* create a global symbol at sram2 start */
|
|
||||||
*(.sram2)
|
|
||||||
*(.sram2*)
|
|
||||||
|
|
||||||
. = ALIGN(8);
|
|
||||||
_esram2 = .; /* create a global symbol at sram2 end */
|
|
||||||
} >SRAM2 AT> FLASH
|
|
||||||
|
|
||||||
|
|
||||||
/* Uninitialized data section */
|
|
||||||
. = ALIGN(4);
|
|
||||||
.bss :
|
.bss :
|
||||||
{
|
{
|
||||||
/* This is used by the startup in order to initialize the .bss secion */
|
. = ALIGN(4);
|
||||||
_sbss = .; /* define a global symbol at bss start */
|
_sbss = .;
|
||||||
__bss_start__ = _sbss;
|
__bss_start__ = _sbss;
|
||||||
*(.bss)
|
|
||||||
*(.bss*)
|
*(.bss*)
|
||||||
*(COMMON)
|
*(COMMON)
|
||||||
|
|
||||||
. = ALIGN(4);
|
. = ALIGN(4);
|
||||||
_ebss = .; /* define a global symbol at bss end */
|
_ebss = .;
|
||||||
__bss_end__ = _ebss;
|
__bss_end__ = _ebss;
|
||||||
} >RAM
|
} > ram
|
||||||
|
|
||||||
/* User_heap_stack section, used to check that there is enough RAM left */
|
._stack :
|
||||||
._user_heap_stack :
|
|
||||||
{
|
{
|
||||||
. = ALIGN(8);
|
. = ALIGN(8);
|
||||||
PROVIDE ( end = . );
|
end = .;
|
||||||
PROVIDE ( _end = . );
|
_end = .;
|
||||||
. = . + _Min_Heap_Size;
|
. = . + _MIN_STACK_SIZE;
|
||||||
. = . + _Min_Stack_Size;
|
|
||||||
. = ALIGN(8);
|
. = ALIGN(8);
|
||||||
} >RAM
|
} > ram
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* Remove information from the standard libraries */
|
|
||||||
/DISCARD/ :
|
|
||||||
{
|
|
||||||
libc.a ( * )
|
|
||||||
libm.a ( * )
|
|
||||||
libgcc.a ( * )
|
|
||||||
}
|
|
||||||
|
|
||||||
.ARM.attributes 0 : { *(.ARM.attributes) }
|
|
||||||
}
|
}
|
||||||
|
@ -1,202 +1,80 @@
|
|||||||
/*
|
/* Copyright 2019 SoloKeys Developers */
|
||||||
*****************************************************************************
|
/* */
|
||||||
**
|
/* Licensed under the Apache License, Version 2.0, <LICENSE-APACHE or */
|
||||||
|
/* http://apache.org/licenses/LICENSE-2.0> or the MIT license <LICENSE-MIT or */
|
||||||
|
/* http://opensource.org/licenses/MIT>, at your option. This file may not be */
|
||||||
|
/* copied, modified, or distributed except according to those terms. */
|
||||||
|
|
||||||
** File : LinkerScript.ld
|
|
||||||
**
|
|
||||||
** Abstract : Linker script for STM32L432KCUx Device with
|
|
||||||
** 256KByte FLASH, 64KByte RAM
|
|
||||||
**
|
|
||||||
** Set heap size, stack size and stack location according
|
|
||||||
** to application requirements.
|
|
||||||
**
|
|
||||||
** Set memory bank area and size if external memory is used.
|
|
||||||
**
|
|
||||||
** Target : STMicroelectronics STM32
|
|
||||||
**
|
|
||||||
**
|
|
||||||
** Distribution: The file is distributed as is, without any warranty
|
|
||||||
** of any kind.
|
|
||||||
**
|
|
||||||
** (c)Copyright Ac6.
|
|
||||||
** You may use this file as-is or modify it according to the needs of your
|
|
||||||
** project. Distribution of this file (unmodified or modified) is not
|
|
||||||
** permitted. Ac6 permit registered System Workbench for MCU users the
|
|
||||||
** rights to distribute the assembled, compiled & linked contents of this
|
|
||||||
** file as part of an application binary file, provided that it is built
|
|
||||||
** using the System Workbench for MCU toolchain.
|
|
||||||
**
|
|
||||||
*****************************************************************************
|
|
||||||
*/
|
|
||||||
|
|
||||||
/* Entry Point */
|
|
||||||
ENTRY(Reset_Handler)
|
ENTRY(Reset_Handler)
|
||||||
|
|
||||||
/* Highest address of the user mode stack */
|
/* End of RAM */
|
||||||
_estack = 0x2000c000; /* end of RAM */
|
_estack = 0x2000c000;
|
||||||
/* Generate a link error if heap and stack don't fit into RAM */
|
|
||||||
_Min_Heap_Size = 0x200; /* required amount of heap */
|
_MIN_STACK_SIZE = 0x400;
|
||||||
_Min_Stack_Size = 0x400; /* required amount of stack */
|
|
||||||
|
/*
|
||||||
|
Memory layout of device:
|
||||||
|
20 KB 198KB-8 38 KB
|
||||||
|
| bootloader | application | secrets/data |
|
||||||
|
*/
|
||||||
|
|
||||||
/* Specify the memory areas */
|
|
||||||
MEMORY
|
MEMORY
|
||||||
{
|
{
|
||||||
/* First 20 KB is bootloader */
|
flash (rx) : ORIGIN = 0x08005000, LENGTH = 198K - 8
|
||||||
FLASH (rx) : ORIGIN = 0x08005000, LENGTH = 198K-8 /* Leave out 38 Kb at end for data */
|
ram (xrw) : ORIGIN = 0x20000000, LENGTH = 48K
|
||||||
RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 48K
|
sram2 (rw) : ORIGIN = 0x10000000, LENGTH = 16K
|
||||||
SRAM2 (rw) : ORIGIN = 0x10000000, LENGTH = 16K
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Define output sections */
|
|
||||||
SECTIONS
|
SECTIONS
|
||||||
{
|
{
|
||||||
/* The startup code goes first into FLASH */
|
|
||||||
.isr_vector :
|
.isr_vector :
|
||||||
{
|
{
|
||||||
. = ALIGN(8);
|
. = ALIGN(8);
|
||||||
KEEP(*(.isr_vector)) /* Startup code */
|
KEEP(*(.isr_vector))
|
||||||
. = ALIGN(8);
|
. = ALIGN(8);
|
||||||
} >FLASH
|
} >flash
|
||||||
|
|
||||||
/* The program code and other data goes into FLASH */
|
|
||||||
.text :
|
.text :
|
||||||
{
|
{
|
||||||
. = ALIGN(8);
|
. = ALIGN(8);
|
||||||
*(.text) /* .text sections (code) */
|
*(.text*)
|
||||||
*(.text*) /* .text* sections (code) */
|
*(.rodata*)
|
||||||
*(.glue_7) /* glue arm to thumb code */
|
KEEP(*(.init))
|
||||||
*(.glue_7t) /* glue thumb to arm code */
|
KEEP(*(.finit))
|
||||||
*(.eh_frame)
|
. = ALIGN(8);
|
||||||
|
_etext = .;
|
||||||
|
} >flash
|
||||||
|
|
||||||
KEEP (*(.init))
|
|
||||||
KEEP (*(.fini))
|
|
||||||
|
|
||||||
. = ALIGN(8);
|
|
||||||
_etext = .; /* define a global symbols at end of code */
|
|
||||||
} >FLASH
|
|
||||||
|
|
||||||
/* Constant data goes into FLASH */
|
|
||||||
.rodata :
|
|
||||||
{
|
|
||||||
. = ALIGN(8);
|
|
||||||
*(.rodata) /* .rodata sections (constants, strings, etc.) */
|
|
||||||
*(.rodata*) /* .rodata* sections (constants, strings, etc.) */
|
|
||||||
. = ALIGN(8);
|
|
||||||
} >FLASH
|
|
||||||
|
|
||||||
.ARM.extab :
|
|
||||||
{
|
|
||||||
. = ALIGN(8);
|
|
||||||
*(.ARM.extab* .gnu.linkonce.armextab.*)
|
|
||||||
. = ALIGN(8);
|
|
||||||
} >FLASH
|
|
||||||
.ARM : {
|
|
||||||
. = ALIGN(8);
|
|
||||||
__exidx_start = .;
|
|
||||||
*(.ARM.exidx*)
|
|
||||||
__exidx_end = .;
|
|
||||||
. = ALIGN(8);
|
|
||||||
} >FLASH
|
|
||||||
|
|
||||||
.preinit_array :
|
|
||||||
{
|
|
||||||
. = ALIGN(8);
|
|
||||||
PROVIDE_HIDDEN (__preinit_array_start = .);
|
|
||||||
KEEP (*(.preinit_array*))
|
|
||||||
PROVIDE_HIDDEN (__preinit_array_end = .);
|
|
||||||
. = ALIGN(8);
|
|
||||||
} >FLASH
|
|
||||||
|
|
||||||
.init_array :
|
|
||||||
{
|
|
||||||
. = ALIGN(8);
|
|
||||||
PROVIDE_HIDDEN (__init_array_start = .);
|
|
||||||
KEEP (*(SORT(.init_array.*)))
|
|
||||||
KEEP (*(.init_array*))
|
|
||||||
PROVIDE_HIDDEN (__init_array_end = .);
|
|
||||||
. = ALIGN(8);
|
|
||||||
} >FLASH
|
|
||||||
.fini_array :
|
|
||||||
{
|
|
||||||
. = ALIGN(8);
|
|
||||||
PROVIDE_HIDDEN (__fini_array_start = .);
|
|
||||||
KEEP (*(SORT(.fini_array.*)))
|
|
||||||
KEEP (*(.fini_array*))
|
|
||||||
PROVIDE_HIDDEN (__fini_array_end = .);
|
|
||||||
. = ALIGN(8);
|
|
||||||
} >FLASH
|
|
||||||
|
|
||||||
/* used by the startup to initialize data */
|
|
||||||
_sidata = LOADADDR(.data);
|
_sidata = LOADADDR(.data);
|
||||||
|
|
||||||
/* Initialized data sections goes into RAM, load LMA copy after code */
|
|
||||||
.data :
|
.data :
|
||||||
{
|
{
|
||||||
. = ALIGN(8);
|
. = ALIGN(8);
|
||||||
_sdata = .; /* create a global symbol at data start */
|
_sdata = .;
|
||||||
*(.data) /* .data sections */
|
*(.data*)
|
||||||
*(.data*) /* .data* sections */
|
|
||||||
|
|
||||||
. = ALIGN(8);
|
. = ALIGN(8);
|
||||||
_edata = .; /* define a global symbol at data end */
|
_edata = .;
|
||||||
} >RAM AT> FLASH
|
} >ram AT> flash
|
||||||
|
|
||||||
_sisram2 = LOADADDR(.sram2);
|
|
||||||
|
|
||||||
/* CCM-RAM section
|
|
||||||
*
|
|
||||||
* IMPORTANT NOTE!
|
|
||||||
* If initialized variables will be placed in this section,
|
|
||||||
* the startup code needs to be modified to copy the init-values.
|
|
||||||
*/
|
|
||||||
.sram2 :
|
|
||||||
{
|
|
||||||
. = ALIGN(8);
|
|
||||||
_ssram2 = .; /* create a global symbol at sram2 start */
|
|
||||||
*(.sram2)
|
|
||||||
*(.sram2*)
|
|
||||||
|
|
||||||
. = ALIGN(8);
|
|
||||||
_esram2 = .; /* create a global symbol at sram2 end */
|
|
||||||
} >SRAM2 AT> FLASH
|
|
||||||
|
|
||||||
|
|
||||||
/* Uninitialized data section */
|
|
||||||
. = ALIGN(4);
|
|
||||||
.bss :
|
.bss :
|
||||||
{
|
{
|
||||||
/* This is used by the startup in order to initialize the .bss secion */
|
. = ALIGN(4);
|
||||||
_sbss = .; /* define a global symbol at bss start */
|
_sbss = .;
|
||||||
__bss_start__ = _sbss;
|
__bss_start__ = _sbss;
|
||||||
*(.bss)
|
|
||||||
*(.bss*)
|
*(.bss*)
|
||||||
*(COMMON)
|
*(COMMON)
|
||||||
|
|
||||||
. = ALIGN(4);
|
. = ALIGN(4);
|
||||||
_ebss = .; /* define a global symbol at bss end */
|
_ebss = .;
|
||||||
__bss_end__ = _ebss;
|
__bss_end__ = _ebss;
|
||||||
} >RAM
|
} > ram
|
||||||
|
|
||||||
/* User_heap_stack section, used to check that there is enough RAM left */
|
._stack :
|
||||||
._user_heap_stack :
|
|
||||||
{
|
{
|
||||||
. = ALIGN(8);
|
. = ALIGN(8);
|
||||||
PROVIDE ( end = . );
|
end = .;
|
||||||
PROVIDE ( _end = . );
|
_end = .;
|
||||||
. = . + _Min_Heap_Size;
|
. = . + _MIN_STACK_SIZE;
|
||||||
. = . + _Min_Stack_Size;
|
|
||||||
. = ALIGN(8);
|
. = ALIGN(8);
|
||||||
} >RAM
|
} > ram
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* Remove information from the standard libraries */
|
|
||||||
/DISCARD/ :
|
|
||||||
{
|
|
||||||
libc.a ( * )
|
|
||||||
libm.a ( * )
|
|
||||||
libgcc.a ( * )
|
|
||||||
}
|
|
||||||
|
|
||||||
.ARM.attributes 0 : { *(.ARM.attributes) }
|
|
||||||
}
|
}
|
||||||
|
@ -1,203 +1,74 @@
|
|||||||
/*
|
/* Copyright 2019 SoloKeys Developers */
|
||||||
*****************************************************************************
|
/* */
|
||||||
**
|
/* Licensed under the Apache License, Version 2.0, <LICENSE-APACHE or */
|
||||||
|
/* http://apache.org/licenses/LICENSE-2.0> or the MIT license <LICENSE-MIT or */
|
||||||
|
/* http://opensource.org/licenses/MIT>, at your option. This file may not be */
|
||||||
|
/* copied, modified, or distributed except according to those terms. */
|
||||||
|
|
||||||
** File : LinkerScript.ld
|
|
||||||
**
|
|
||||||
** Abstract : Linker script for STM32L432KCUx Device with
|
|
||||||
** 256KByte FLASH, 64KByte RAM
|
|
||||||
**
|
|
||||||
** Set heap size, stack size and stack location according
|
|
||||||
** to application requirements.
|
|
||||||
**
|
|
||||||
** Set memory bank area and size if external memory is used.
|
|
||||||
**
|
|
||||||
** Target : STMicroelectronics STM32
|
|
||||||
**
|
|
||||||
**
|
|
||||||
** Distribution: The file is distributed as is, without any warranty
|
|
||||||
** of any kind.
|
|
||||||
**
|
|
||||||
** (c)Copyright Ac6.
|
|
||||||
** You may use this file as-is or modify it according to the needs of your
|
|
||||||
** project. Distribution of this file (unmodified or modified) is not
|
|
||||||
** permitted. Ac6 permit registered System Workbench for MCU users the
|
|
||||||
** rights to distribute the assembled, compiled & linked contents of this
|
|
||||||
** file as part of an application binary file, provided that it is built
|
|
||||||
** using the System Workbench for MCU toolchain.
|
|
||||||
**
|
|
||||||
*****************************************************************************
|
|
||||||
*/
|
|
||||||
|
|
||||||
/* Entry Point */
|
|
||||||
ENTRY(Reset_Handler)
|
ENTRY(Reset_Handler)
|
||||||
|
|
||||||
/* Highest address of the user mode stack */
|
/* End of RAM */
|
||||||
_estack = 0x2000c000; /* end of RAM */
|
_estack = 0x2000c000;
|
||||||
/* Generate a link error if heap and stack don't fit into RAM */
|
|
||||||
_Min_Heap_Size = 0x200; /* required amount of heap */
|
_MIN_STACK_SIZE = 0x400;
|
||||||
_Min_Stack_Size = 0x400; /* required amount of stack */
|
|
||||||
|
|
||||||
/* Specify the memory areas */
|
|
||||||
MEMORY
|
MEMORY
|
||||||
{
|
{
|
||||||
/* First 32 KB is bootloader */
|
flash (rx) : ORIGIN = 0x08008000, LENGTH = 186K - 8
|
||||||
/*FLASH (rx) : ORIGIN = 0x08000000, LENGTH = 238K-8 [> Leave out 38 Kb at end for data <]*/
|
ram (xrw) : ORIGIN = 0x20000000, LENGTH = 48K
|
||||||
FLASH (rx) : ORIGIN = 0x08008000, LENGTH = 186K-8 /* Leave out 38 Kb at end for data */
|
sram2 (rw) : ORIGIN = 0x10000000, LENGTH = 16K
|
||||||
RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 48K
|
|
||||||
SRAM2 (rw) : ORIGIN = 0x10000000, LENGTH = 16K
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Define output sections */
|
|
||||||
SECTIONS
|
SECTIONS
|
||||||
{
|
{
|
||||||
/* The startup code goes first into FLASH */
|
|
||||||
.isr_vector :
|
.isr_vector :
|
||||||
{
|
{
|
||||||
. = ALIGN(8);
|
. = ALIGN(8);
|
||||||
KEEP(*(.isr_vector)) /* Startup code */
|
KEEP(*(.isr_vector))
|
||||||
. = ALIGN(8);
|
. = ALIGN(8);
|
||||||
} >FLASH
|
} >flash
|
||||||
|
|
||||||
/* The program code and other data goes into FLASH */
|
|
||||||
.text :
|
.text :
|
||||||
{
|
{
|
||||||
. = ALIGN(8);
|
. = ALIGN(8);
|
||||||
*(.text) /* .text sections (code) */
|
*(.text*)
|
||||||
*(.text*) /* .text* sections (code) */
|
*(.rodata*)
|
||||||
*(.glue_7) /* glue arm to thumb code */
|
KEEP(*(.init))
|
||||||
*(.glue_7t) /* glue thumb to arm code */
|
KEEP(*(.finit))
|
||||||
*(.eh_frame)
|
. = ALIGN(8);
|
||||||
|
_etext = .;
|
||||||
|
} >flash
|
||||||
|
|
||||||
KEEP (*(.init))
|
|
||||||
KEEP (*(.fini))
|
|
||||||
|
|
||||||
. = ALIGN(8);
|
|
||||||
_etext = .; /* define a global symbols at end of code */
|
|
||||||
} >FLASH
|
|
||||||
|
|
||||||
/* Constant data goes into FLASH */
|
|
||||||
.rodata :
|
|
||||||
{
|
|
||||||
. = ALIGN(8);
|
|
||||||
*(.rodata) /* .rodata sections (constants, strings, etc.) */
|
|
||||||
*(.rodata*) /* .rodata* sections (constants, strings, etc.) */
|
|
||||||
. = ALIGN(8);
|
|
||||||
} >FLASH
|
|
||||||
|
|
||||||
.ARM.extab :
|
|
||||||
{
|
|
||||||
. = ALIGN(8);
|
|
||||||
*(.ARM.extab* .gnu.linkonce.armextab.*)
|
|
||||||
. = ALIGN(8);
|
|
||||||
} >FLASH
|
|
||||||
.ARM : {
|
|
||||||
. = ALIGN(8);
|
|
||||||
__exidx_start = .;
|
|
||||||
*(.ARM.exidx*)
|
|
||||||
__exidx_end = .;
|
|
||||||
. = ALIGN(8);
|
|
||||||
} >FLASH
|
|
||||||
|
|
||||||
.preinit_array :
|
|
||||||
{
|
|
||||||
. = ALIGN(8);
|
|
||||||
PROVIDE_HIDDEN (__preinit_array_start = .);
|
|
||||||
KEEP (*(.preinit_array*))
|
|
||||||
PROVIDE_HIDDEN (__preinit_array_end = .);
|
|
||||||
. = ALIGN(8);
|
|
||||||
} >FLASH
|
|
||||||
|
|
||||||
.init_array :
|
|
||||||
{
|
|
||||||
. = ALIGN(8);
|
|
||||||
PROVIDE_HIDDEN (__init_array_start = .);
|
|
||||||
KEEP (*(SORT(.init_array.*)))
|
|
||||||
KEEP (*(.init_array*))
|
|
||||||
PROVIDE_HIDDEN (__init_array_end = .);
|
|
||||||
. = ALIGN(8);
|
|
||||||
} >FLASH
|
|
||||||
.fini_array :
|
|
||||||
{
|
|
||||||
. = ALIGN(8);
|
|
||||||
PROVIDE_HIDDEN (__fini_array_start = .);
|
|
||||||
KEEP (*(SORT(.fini_array.*)))
|
|
||||||
KEEP (*(.fini_array*))
|
|
||||||
PROVIDE_HIDDEN (__fini_array_end = .);
|
|
||||||
. = ALIGN(8);
|
|
||||||
} >FLASH
|
|
||||||
|
|
||||||
/* used by the startup to initialize data */
|
|
||||||
_sidata = LOADADDR(.data);
|
_sidata = LOADADDR(.data);
|
||||||
|
|
||||||
/* Initialized data sections goes into RAM, load LMA copy after code */
|
|
||||||
.data :
|
.data :
|
||||||
{
|
{
|
||||||
. = ALIGN(8);
|
. = ALIGN(8);
|
||||||
_sdata = .; /* create a global symbol at data start */
|
_sdata = .;
|
||||||
*(.data) /* .data sections */
|
*(.data*)
|
||||||
*(.data*) /* .data* sections */
|
|
||||||
|
|
||||||
. = ALIGN(8);
|
. = ALIGN(8);
|
||||||
_edata = .; /* define a global symbol at data end */
|
_edata = .;
|
||||||
} >RAM AT> FLASH
|
} >ram AT> flash
|
||||||
|
|
||||||
_sisram2 = LOADADDR(.sram2);
|
|
||||||
|
|
||||||
/* CCM-RAM section
|
|
||||||
*
|
|
||||||
* IMPORTANT NOTE!
|
|
||||||
* If initialized variables will be placed in this section,
|
|
||||||
* the startup code needs to be modified to copy the init-values.
|
|
||||||
*/
|
|
||||||
.sram2 :
|
|
||||||
{
|
|
||||||
. = ALIGN(8);
|
|
||||||
_ssram2 = .; /* create a global symbol at sram2 start */
|
|
||||||
*(.sram2)
|
|
||||||
*(.sram2*)
|
|
||||||
|
|
||||||
. = ALIGN(8);
|
|
||||||
_esram2 = .; /* create a global symbol at sram2 end */
|
|
||||||
} >SRAM2 AT> FLASH
|
|
||||||
|
|
||||||
|
|
||||||
/* Uninitialized data section */
|
|
||||||
. = ALIGN(4);
|
|
||||||
.bss :
|
.bss :
|
||||||
{
|
{
|
||||||
/* This is used by the startup in order to initialize the .bss secion */
|
. = ALIGN(4);
|
||||||
_sbss = .; /* define a global symbol at bss start */
|
_sbss = .;
|
||||||
__bss_start__ = _sbss;
|
__bss_start__ = _sbss;
|
||||||
*(.bss)
|
|
||||||
*(.bss*)
|
*(.bss*)
|
||||||
*(COMMON)
|
*(COMMON)
|
||||||
|
|
||||||
. = ALIGN(4);
|
. = ALIGN(4);
|
||||||
_ebss = .; /* define a global symbol at bss end */
|
_ebss = .;
|
||||||
__bss_end__ = _ebss;
|
__bss_end__ = _ebss;
|
||||||
} >RAM
|
} > ram
|
||||||
|
|
||||||
/* User_heap_stack section, used to check that there is enough RAM left */
|
._stack :
|
||||||
._user_heap_stack :
|
|
||||||
{
|
{
|
||||||
. = ALIGN(8);
|
. = ALIGN(8);
|
||||||
PROVIDE ( end = . );
|
end = .;
|
||||||
PROVIDE ( _end = . );
|
_end = .;
|
||||||
. = . + _Min_Heap_Size;
|
. = . + _MIN_STACK_SIZE;
|
||||||
. = . + _Min_Stack_Size;
|
|
||||||
. = ALIGN(8);
|
. = ALIGN(8);
|
||||||
} >RAM
|
} > ram
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* Remove information from the standard libraries */
|
|
||||||
/DISCARD/ :
|
|
||||||
{
|
|
||||||
libc.a ( * )
|
|
||||||
libm.a ( * )
|
|
||||||
libgcc.a ( * )
|
|
||||||
}
|
|
||||||
|
|
||||||
.ARM.attributes 0 : { *(.ARM.attributes) }
|
|
||||||
}
|
}
|
||||||
|
@ -17,7 +17,7 @@ int __errno = 0;
|
|||||||
|
|
||||||
void rng_get_bytes(uint8_t * dst, size_t sz)
|
void rng_get_bytes(uint8_t * dst, size_t sz)
|
||||||
{
|
{
|
||||||
uint8_t r[8];
|
uint8_t r[4];
|
||||||
unsigned int i,j;
|
unsigned int i,j;
|
||||||
for (i = 0; i < sz; i += 4)
|
for (i = 0; i < sz; i += 4)
|
||||||
{
|
{
|
||||||
@ -33,7 +33,7 @@ void rng_get_bytes(uint8_t * dst, size_t sz)
|
|||||||
|
|
||||||
for (j = 0; j < 4; j++)
|
for (j = 0; j < 4; j++)
|
||||||
{
|
{
|
||||||
if ((i + j) > sz)
|
if ((i + j) >= sz)
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -1,183 +0,0 @@
|
|||||||
/*
|
|
||||||
*****************************************************************************
|
|
||||||
**
|
|
||||||
|
|
||||||
** File : LinkerScript.ld
|
|
||||||
**
|
|
||||||
** Abstract : Linker script for STM32L432KCUx Device with
|
|
||||||
** 256KByte FLASH, 64KByte RAM
|
|
||||||
**
|
|
||||||
** Set heap size, stack size and stack location according
|
|
||||||
** to application requirements.
|
|
||||||
**
|
|
||||||
** Set memory bank area and size if external memory is used.
|
|
||||||
**
|
|
||||||
** Target : STMicroelectronics STM32
|
|
||||||
**
|
|
||||||
**
|
|
||||||
** Distribution: The file is distributed as is, without any warranty
|
|
||||||
** of any kind.
|
|
||||||
**
|
|
||||||
** (c)Copyright Ac6.
|
|
||||||
** You may use this file as-is or modify it according to the needs of your
|
|
||||||
** project. Distribution of this file (unmodified or modified) is not
|
|
||||||
** permitted. Ac6 permit registered System Workbench for MCU users the
|
|
||||||
** rights to distribute the assembled, compiled & linked contents of this
|
|
||||||
** file as part of an application binary file, provided that it is built
|
|
||||||
** using the System Workbench for MCU toolchain.
|
|
||||||
**
|
|
||||||
*****************************************************************************
|
|
||||||
*/
|
|
||||||
|
|
||||||
/* Entry Point */
|
|
||||||
ENTRY(Reset_Handler)
|
|
||||||
|
|
||||||
/* Highest address of the user mode stack */
|
|
||||||
_estack = 0x20010000; /* end of RAM */
|
|
||||||
/* Generate a link error if heap and stack don't fit into RAM */
|
|
||||||
_Min_Heap_Size = 0x200; /* required amount of heap */
|
|
||||||
_Min_Stack_Size = 0x400; /* required amount of stack */
|
|
||||||
|
|
||||||
/* Specify the memory areas */
|
|
||||||
MEMORY
|
|
||||||
{
|
|
||||||
RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 64K
|
|
||||||
FLASH (rx) : ORIGIN = 0x8000000, LENGTH = 256K
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Define output sections */
|
|
||||||
SECTIONS
|
|
||||||
{
|
|
||||||
/* The startup code goes first into FLASH */
|
|
||||||
.isr_vector :
|
|
||||||
{
|
|
||||||
. = ALIGN(8);
|
|
||||||
KEEP(*(.isr_vector)) /* Startup code */
|
|
||||||
. = ALIGN(8);
|
|
||||||
} >FLASH
|
|
||||||
|
|
||||||
/* The program code and other data goes into FLASH */
|
|
||||||
.text :
|
|
||||||
{
|
|
||||||
. = ALIGN(8);
|
|
||||||
*(.text) /* .text sections (code) */
|
|
||||||
*(.text*) /* .text* sections (code) */
|
|
||||||
*(.glue_7) /* glue arm to thumb code */
|
|
||||||
*(.glue_7t) /* glue thumb to arm code */
|
|
||||||
*(.eh_frame)
|
|
||||||
|
|
||||||
KEEP (*(.init))
|
|
||||||
KEEP (*(.fini))
|
|
||||||
|
|
||||||
. = ALIGN(8);
|
|
||||||
_etext = .; /* define a global symbols at end of code */
|
|
||||||
} >FLASH
|
|
||||||
|
|
||||||
/* Constant data goes into FLASH */
|
|
||||||
.rodata :
|
|
||||||
{
|
|
||||||
. = ALIGN(8);
|
|
||||||
*(.rodata) /* .rodata sections (constants, strings, etc.) */
|
|
||||||
*(.rodata*) /* .rodata* sections (constants, strings, etc.) */
|
|
||||||
. = ALIGN(8);
|
|
||||||
} >FLASH
|
|
||||||
|
|
||||||
.ARM.extab :
|
|
||||||
{
|
|
||||||
. = ALIGN(8);
|
|
||||||
*(.ARM.extab* .gnu.linkonce.armextab.*)
|
|
||||||
. = ALIGN(8);
|
|
||||||
} >FLASH
|
|
||||||
.ARM : {
|
|
||||||
. = ALIGN(8);
|
|
||||||
__exidx_start = .;
|
|
||||||
*(.ARM.exidx*)
|
|
||||||
__exidx_end = .;
|
|
||||||
. = ALIGN(8);
|
|
||||||
} >FLASH
|
|
||||||
|
|
||||||
.preinit_array :
|
|
||||||
{
|
|
||||||
. = ALIGN(8);
|
|
||||||
PROVIDE_HIDDEN (__preinit_array_start = .);
|
|
||||||
KEEP (*(.preinit_array*))
|
|
||||||
PROVIDE_HIDDEN (__preinit_array_end = .);
|
|
||||||
. = ALIGN(8);
|
|
||||||
} >FLASH
|
|
||||||
|
|
||||||
.init_array :
|
|
||||||
{
|
|
||||||
. = ALIGN(8);
|
|
||||||
PROVIDE_HIDDEN (__init_array_start = .);
|
|
||||||
KEEP (*(SORT(.init_array.*)))
|
|
||||||
KEEP (*(.init_array*))
|
|
||||||
PROVIDE_HIDDEN (__init_array_end = .);
|
|
||||||
. = ALIGN(8);
|
|
||||||
} >FLASH
|
|
||||||
.fini_array :
|
|
||||||
{
|
|
||||||
. = ALIGN(8);
|
|
||||||
PROVIDE_HIDDEN (__fini_array_start = .);
|
|
||||||
KEEP (*(SORT(.fini_array.*)))
|
|
||||||
KEEP (*(.fini_array*))
|
|
||||||
PROVIDE_HIDDEN (__fini_array_end = .);
|
|
||||||
. = ALIGN(8);
|
|
||||||
} >FLASH
|
|
||||||
|
|
||||||
/* used by the startup to initialize data */
|
|
||||||
_sidata = LOADADDR(.data);
|
|
||||||
|
|
||||||
/* Initialized data sections goes into RAM, load LMA copy after code */
|
|
||||||
.data :
|
|
||||||
{
|
|
||||||
. = ALIGN(8);
|
|
||||||
_sdata = .; /* create a global symbol at data start */
|
|
||||||
*(.data) /* .data sections */
|
|
||||||
*(.data*) /* .data* sections */
|
|
||||||
|
|
||||||
. = ALIGN(8);
|
|
||||||
_edata = .; /* define a global symbol at data end */
|
|
||||||
} >RAM AT> FLASH
|
|
||||||
|
|
||||||
|
|
||||||
/* Uninitialized data section */
|
|
||||||
. = ALIGN(4);
|
|
||||||
.bss :
|
|
||||||
{
|
|
||||||
/* This is used by the startup in order to initialize the .bss secion */
|
|
||||||
_sbss = .; /* define a global symbol at bss start */
|
|
||||||
__bss_start__ = _sbss;
|
|
||||||
*(.bss)
|
|
||||||
*(.bss*)
|
|
||||||
*(COMMON)
|
|
||||||
|
|
||||||
. = ALIGN(4);
|
|
||||||
_ebss = .; /* define a global symbol at bss end */
|
|
||||||
__bss_end__ = _ebss;
|
|
||||||
} >RAM
|
|
||||||
|
|
||||||
/* User_heap_stack section, used to check that there is enough RAM left */
|
|
||||||
._user_heap_stack :
|
|
||||||
{
|
|
||||||
. = ALIGN(8);
|
|
||||||
PROVIDE ( end = . );
|
|
||||||
PROVIDE ( _end = . );
|
|
||||||
. = . + _Min_Heap_Size;
|
|
||||||
. = . + _Min_Stack_Size;
|
|
||||||
. = ALIGN(8);
|
|
||||||
} >RAM
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* Remove information from the standard libraries */
|
|
||||||
/DISCARD/ :
|
|
||||||
{
|
|
||||||
libc.a ( * )
|
|
||||||
libm.a ( * )
|
|
||||||
libgcc.a ( * )
|
|
||||||
}
|
|
||||||
|
|
||||||
.ARM.attributes 0 : { *(.ARM.attributes) }
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
@ -10,6 +10,8 @@
|
|||||||
|
|
||||||
setup: install activate
|
setup: install activate
|
||||||
legacy-setup: install-legacy activate
|
legacy-setup: install-legacy activate
|
||||||
|
|
||||||
|
# Symlinks can be setup, we don't officially supply any
|
||||||
# symlinks: install-symlinks activate
|
# symlinks: install-symlinks activate
|
||||||
|
|
||||||
RULES_PATH=/etc/udev/rules.d
|
RULES_PATH=/etc/udev/rules.d
|
||||||
|
Loading…
x
Reference in New Issue
Block a user