diff --git a/.travis.yml b/.travis.yml
index 4118385eed..bef14898d4 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -119,6 +119,7 @@ env:
- RTT_BSP='stm32/stm32l476-st-nucleo' RTT_TOOL_CHAIN='sourcery-arm'
- RTT_BSP='stm32/stm32l496-ali-developer' RTT_TOOL_CHAIN='sourcery-arm'
- RTT_BSP='stm32/stm32l496-st-nucleo' RTT_TOOL_CHAIN='sourcery-arm'
+ - RTT_BSP='stm32/stm32mp157a-st-discovery' RTT_TOOL_CHAIN='sourcery-arm'
- RTT_BSP='stm32f20x' RTT_TOOL_CHAIN='sourcery-arm'
- RTT_BSP='swm320-lq100' RTT_TOOL_CHAIN='sourcery-arm'
# - RTT_BSP='taihu' RTT_TOOL_CHAIN='sourcery-ppc'
diff --git a/bsp/stm32/libraries/HAL_Drivers/config/mp1/dma_config.h b/bsp/stm32/libraries/HAL_Drivers/config/mp1/dma_config.h
index 12a07cbe3c..a7a61672c2 100644
--- a/bsp/stm32/libraries/HAL_Drivers/config/mp1/dma_config.h
+++ b/bsp/stm32/libraries/HAL_Drivers/config/mp1/dma_config.h
@@ -18,8 +18,6 @@
extern "C" {
#endif
-
-
/* DMA2 stream0 */
#if defined(BSP_SPI1_RX_USING_DMA) && !defined(SPI1_RX_DMA_INSTANCE)
#define SPI1_DMA_RX_IRQHandler DMA2_Stream0_IRQHandler
diff --git a/bsp/stm32/stm32mp157a-st-discovery/board/Kconfig b/bsp/stm32/stm32mp157a-st-discovery/board/Kconfig
index 89208288df..03c2529215 100644
--- a/bsp/stm32/stm32mp157a-st-discovery/board/Kconfig
+++ b/bsp/stm32/stm32mp157a-st-discovery/board/Kconfig
@@ -47,8 +47,7 @@ menu "On-chip Peripheral Drivers"
bool "Enable UART5"
default n
endif
-
- source "../libraries/HAL_Drivers/Kconfig"
+ source "../libraries/HAL_Drivers/Kconfig"
endmenu
diff --git a/bsp/stm32/stm32mp157a-st-discovery/board/SConscript b/bsp/stm32/stm32mp157a-st-discovery/board/SConscript
index c2b8d1929d..a1248c02e0 100644
--- a/bsp/stm32/stm32mp157a-st-discovery/board/SConscript
+++ b/bsp/stm32/stm32mp157a-st-discovery/board/SConscript
@@ -13,12 +13,10 @@ CubeMX_Config/Common/System/system_stm32mp1xx.c
CubeMX_Config/CM4/Src/stm32mp1xx_hal_msp.c
''')
-
path = [cwd]
path += [cwd + '/CubeMX_Config/CM4/Inc']
path += [cwd + '/ports']
-
startup_path_prefix = SDK_LIB
if rtconfig.CROSS_TOOL == 'gcc':
@@ -28,18 +26,7 @@ elif rtconfig.CROSS_TOOL == 'keil':
elif rtconfig.CROSS_TOOL == 'iar':
src += [startup_path_prefix + '/STM32MPxx_HAL/CMSIS/Device/ST/STM32MP1xx/Source/Templates/iar/startup_stm32mp15xx.s']
-if rtconfig.CROSS_TOOL == 'keil':
- CPPDEFINES = ['CORE_CM4,NO_ATOMIC_64_SUPPORT,METAL_INTERNAL,METAL_MAX_DEVICE_REGIONS=2,VIRTIO_SLAVE_ONLY,STM32MP157Axx,__LOG_TRACE_IO_']
-elif rtconfig.CROSS_TOOL == 'gcc':
- CPPDEFINES = ['CORE_CM4,NO_ATOMIC_64_SUPPORT,METAL_INTERNAL,METAL_MAX_DEVICE_REGIONS=2,VIRTIO_SLAVE_ONLY,STM32MP157Axx,__LOG_TRACE_IO_']
-elif rtconfig.CROSS_TOOL == 'iar':
- CPPDEFINES = ['CORE_CM4']
- CPPDEFINES += ['NO_ATOMIC_64_SUPPORT']
- CPPDEFINES += ['METAL_INTERNAL']
- CPPDEFINES += ['METAL_MAX_DEVICE_REGIONS=2']
- CPPDEFINES += ['VIRTIO_SLAVE_ONLY']
- CPPDEFINES += ['STM32MP157Axx']
- CPPDEFINES += ['__LOG_TRACE_IO_']
+CPPDEFINES = ['CORE_CM4','NO_ATOMIC_64_SUPPORT','METAL_INTERNAL','METAL_MAX_DEVICE_REGIONS=2','VIRTIO_SLAVE_ONLY','STM32MP157Axx','__LOG_TRACE_IO_']
group = DefineGroup('Drivers', src, depend = [''], CPPPATH = path, CPPDEFINES = CPPDEFINES)
diff --git a/bsp/stm32/stm32mp157a-st-discovery/board/board.h b/bsp/stm32/stm32mp157a-st-discovery/board/board.h
index 8326923cc9..b23b83ee30 100644
--- a/bsp/stm32/stm32mp157a-st-discovery/board/board.h
+++ b/bsp/stm32/stm32mp157a-st-discovery/board/board.h
@@ -23,11 +23,11 @@ extern "C" {
#endif
#define STM32_FLASH_START_ADRESS ((uint32_t)0x10000000)
-#define STM32_FLASH_SIZE (128 * 1024)
+#define STM32_FLASH_SIZE (256 * 1024)
#define STM32_FLASH_END_ADDRESS ((uint32_t)(STM32_FLASH_START_ADRESS + STM32_FLASH_SIZE))
#define STM32_SRAM_SIZE (128)
-#define STM32_SRAM_END ((uint32_t)0x10020000 + (STM32_SRAM_SIZE * 1024))
+#define STM32_SRAM_END ((uint32_t)0x10040000 + (STM32_SRAM_SIZE * 1024))
#if defined(__CC_ARM) || defined(__CLANG_ARM)
extern int Image$$RW_IRAM1$$ZI$$Limit;
@@ -37,8 +37,7 @@ extern int Image$$RW_IRAM1$$ZI$$Limit;
#define HEAP_BEGIN (__segment_end("CSTACK"))
#else
extern int __bss_end__;
-//#define HEAP_BEGIN (&__bss_end__)
-#define HEAP_BEGIN (0x10020000 + 64 * 1024)
+#define HEAP_BEGIN (0x10040000 + 64 * 1024)
#endif
#define HEAP_END STM32_SRAM_END
diff --git a/bsp/stm32/stm32mp157a-st-discovery/board/linker_scripts/link.icf b/bsp/stm32/stm32mp157a-st-discovery/board/linker_scripts/link.icf
index 8e70170426..c24e2cbc45 100644
--- a/bsp/stm32/stm32mp157a-st-discovery/board/linker_scripts/link.icf
+++ b/bsp/stm32/stm32mp157a-st-discovery/board/linker_scripts/link.icf
@@ -1,34 +1,28 @@
/*###ICF### Section handled by ICF editor, don't touch! ****/
/*-Editor annotation file-*/
-/* IcfEditorFile="$TOOLKIT_DIR$\config\ide\IcfEditor\a_v1_0.xml" */
+/* IcfEditorFile="$TOOLKIT_DIR$\config\ide\IcfEditor\cortex_v1_0.xml" */
/*-Specials-*/
define symbol __ICFEDIT_intvec_start__ = 0x00000000;
/*-Memory Regions-*/
-define symbol __ICFEDIT_region_text_start__ = 0x10000000;
-define symbol __ICFEDIT_region_text_end__ = 0x1003FFFF;
-define symbol __ICFEDIT_region_data_start__ = 0x10040000;
-define symbol __ICFEDIT_region_data_end__ = 0x1005FFFF;
+define symbol __ICFEDIT_region_ROM_start__ = 0x10000000;
+define symbol __ICFEDIT_region_ROM_end__ = 0x1003FFFF;
+define symbol __ICFEDIT_region_RAM_start__ = 0x10040000;
+define symbol __ICFEDIT_region_RAM_end__ = 0x1005FFFF;
/*-Sizes-*/
define symbol __ICFEDIT_size_cstack__ = 0x400;
define symbol __ICFEDIT_size_heap__ = 0x000;
/**** End of ICF editor section. ###ICF###*/
-
define memory mem with size = 4G;
-define region text_region = mem:[from __ICFEDIT_region_text_start__ to __ICFEDIT_region_text_end__];
-define region data_region = mem:[from __ICFEDIT_region_data_start__ to __ICFEDIT_region_data_end__];
-
-keep { section .resource_table };
-".resource_table" : place in data_region {section .resource_table};
-
+define region ROM_region = mem:[from __ICFEDIT_region_ROM_start__ to __ICFEDIT_region_ROM_end__];
+define region RAM_region = mem:[from __ICFEDIT_region_RAM_start__ to __ICFEDIT_region_RAM_end__];
define block CSTACK with alignment = 8, size = __ICFEDIT_size_cstack__ { };
-define block HEAP with alignment = 8, size = __ICFEDIT_size_heap__ { };
initialize by copy { readwrite };
-do not initialize { section .noinit};
+do not initialize { section .noinit };
place at address mem:__ICFEDIT_intvec_start__ { readonly section .intvec };
-place in text_region { readonly };
-place in data_region { readwrite,
- block CSTACK, block HEAP};
\ No newline at end of file
+
+place in ROM_region { readonly };
+place in RAM_region { readwrite, last block CSTACK};
diff --git a/bsp/stm32/stm32mp157a-st-discovery/board/linker_scripts/link.lds b/bsp/stm32/stm32mp157a-st-discovery/board/linker_scripts/link.lds
index a2312c51b9..b2ae4c15ec 100644
--- a/bsp/stm32/stm32mp157a-st-discovery/board/linker_scripts/link.lds
+++ b/bsp/stm32/stm32mp157a-st-discovery/board/linker_scripts/link.lds
@@ -1,211 +1,157 @@
/*
-******************************************************************************
-**
-** File : LinkerScript.ld
-**
-** Abstract : Linker script for STM32MP1 series
-**
-** 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.
-**
-*****************************************************************************
-** @attention
-**
-**
© Copyright (c) 2019 STMicroelectronics.
-** All rights reserved.
-**
-** This software component is licensed by ST under BSD 3-Clause license,
-** the License; You may not use this file except in compliance with the
-** License. You may obtain a copy of the License at:
-** opensource.org/licenses/BSD-3-Clause
-**
-*****************************************************************************
-*/
+ * linker script for STM32F4xx with GNU ld
+ * bernard.xiong 2009-10-14
+ */
-/* Entry Point */
-ENTRY(Reset_Handler)
-
-/* Highest address of the user mode stack */
-_estack = 0x10040000; /* end of RAM */
-
-_Min_Heap_Size = 0x200 ; /* required amount of heap */
-_Min_Stack_Size = 0x400 ; /* required amount of stack */
-
-/* Memories definition */
+/* Program Entry, set to mark it as "used" and avoid gc */
MEMORY
{
- m_interrupts (RX) : ORIGIN = 0x00000000, LENGTH = 0x00000298
- m_text (RX) : ORIGIN = 0x10000000, LENGTH = 0x00020000
- m_data (RW) : ORIGIN = 0x10020000, LENGTH = 0x00020000
- m_ipc_shm (RW) : ORIGIN = 0x10040000, LENGTH = 0x00008000
+ ROM (rx) : ORIGIN = 0x10000000, LENGTH = 256k /* 256KB flash */
+ RAM (rw) : ORIGIN = 0x10040000, LENGTH = 128k /* 128K sram */
}
+ENTRY(Reset_Handler)
+_system_stack_size = 0x200;
- /* Symbols needed for OpenAMP to enable rpmsg */
-__OPENAMP_region_start__ = ORIGIN(m_ipc_shm);
-__OPENAMP_region_end__ = ORIGIN(m_ipc_shm)+LENGTH(m_ipc_shm);
-
-/* Sections */
SECTIONS
{
- /* The startup code into ROM memory */
- .isr_vector :
- {
- . = ALIGN(4);
- KEEP(*(.isr_vector)) /* Startup code */
- . = ALIGN(4);
- } > m_interrupts
-
+ .text :
+ {
+ . = ALIGN(4);
+ _stext = .;
+ KEEP(*(.isr_vector)) /* Startup code */
- /* The program code and other data into ROM memory */
- .text :
- {
- . = ALIGN(4);
- *(.text) /* .text sections (code) */
- *(.text*) /* .text* sections (code) */
- *(.glue_7) /* glue arm to thumb code */
- *(.glue_7t) /* glue thumb to arm code */
- *(.eh_frame)
+ . = ALIGN(4);
+ *(.text) /* remaining code */
+ *(.text.*) /* remaining code */
+ *(.rodata) /* read-only data (constants) */
+ *(.rodata*)
+ *(.glue_7)
+ *(.glue_7t)
+ *(.gnu.linkonce.t*)
+ /* section information for finsh shell */
+ . = ALIGN(4);
+ __fsymtab_start = .;
+ KEEP(*(FSymTab))
+ __fsymtab_end = .;
-
- /* section information for initial. */
+ . = ALIGN(4);
+ __vsymtab_start = .;
+ KEEP(*(VSymTab))
+ __vsymtab_end = .;
+
+ /* section information for initial. */
. = ALIGN(4);
__rt_init_start = .;
- KEEP(*(SORT(.rti_fn.*)))
+ KEEP(*(SORT(.rti_fn*)))
__rt_init_end = .;
-
- . = ALIGN(4);
- KEEP (*(.init))
- KEEP (*(.fini))
-
- . = ALIGN(4);
- _etext = .; /* define a global symbols at end of code */
- } > m_text
- /* Constant data into ROM memory*/
- .rodata :
- {
- . = ALIGN(4);
- *(.rodata) /* .rodata sections (constants, strings, etc.) */
- *(.rodata*) /* .rodata* sections (constants, strings, etc.) */
- . = ALIGN(4);
- } > m_text
+ . = ALIGN(4);
- .ARM.extab : {
- . = ALIGN(4);
- *(.ARM.extab* .gnu.linkonce.armextab.*)
- . = ALIGN(4);
- } > m_text
-
- .ARM : {
- . = ALIGN(4);
+ PROVIDE(__ctors_start__ = .);
+ KEEP (*(SORT(.init_array.*)))
+ KEEP (*(.init_array))
+ PROVIDE(__ctors_end__ = .);
+
+ . = ALIGN(4);
+
+ _etext = .;
+ } > ROM = 0
+
+ /* .ARM.exidx is sorted, so has to go in its own output section. */
__exidx_start = .;
- *(.ARM.exidx*)
+ .ARM.exidx :
+ {
+ *(.ARM.exidx* .gnu.linkonce.armexidx.*)
+
+ /* This is used by the startup in order to initialize the .data secion */
+ _sidata = .;
+ } > ROM
__exidx_end = .;
- . = ALIGN(4);
- } > m_text
- .preinit_array :
- {
- . = ALIGN(4);
- PROVIDE_HIDDEN (__preinit_array_start = .);
- KEEP (*(.preinit_array*))
- PROVIDE_HIDDEN (__preinit_array_end = .);
- . = ALIGN(4);
- } > m_text
-
- .init_array :
- {
- . = ALIGN(4);
- PROVIDE_HIDDEN (__init_array_start = .);
- KEEP (*(SORT(.init_array.*)))
- KEEP (*(.init_array*))
- PROVIDE_HIDDEN (__init_array_end = .);
- . = ALIGN(4);
- } > m_text
-
- .fini_array :
- {
- . = ALIGN(4);
- PROVIDE_HIDDEN (__fini_array_start = .);
- KEEP (*(SORT(.fini_array.*)))
- KEEP (*(.fini_array*))
- PROVIDE_HIDDEN (__fini_array_end = .);
- . = ALIGN(4);
- } > m_text
+ /* .data section which is used for initialized data */
- /* Used by the startup to initialize data */
- __DATA_ROM = .;
- _sidata = LOADADDR(.data);
+ .data : AT (_sidata)
+ {
+ . = ALIGN(4);
+ /* This is used by the startup in order to initialize the .data secion */
+ _sdata = . ;
- /* Initialized data sections */
- .data : AT(__DATA_ROM)
- {
- . = ALIGN(4);
- _sdata = .; /* create a global symbol at data start */
- *(.data) /* .data sections */
- *(.data*) /* .data* sections */
+ *(.data)
+ *(.data.*)
+ *(.gnu.linkonce.d*)
- . = ALIGN(4);
- _edata = .; /* define a global symbol at data end */
- } > m_data
+ PROVIDE(__dtors_start__ = .);
+ KEEP(*(SORT(.dtors.*)))
+ KEEP(*(.dtors))
+ PROVIDE(__dtors_end__ = .);
- __DATA_END = __DATA_ROM + (_edata - _sdata);
- text_end = ORIGIN(m_text) + LENGTH(m_text);
- ASSERT(__DATA_END <= text_end, "region m_text overflowed with text and data")
+ . = ALIGN(4);
+ /* This is used by the startup in order to initialize the .data secion */
+ _edata = . ;
+ } >RAM
- .resource_table :
- {
- . = ALIGN(4);
- KEEP (*(.resource_table*))
- . = ALIGN(4);
- } > m_data
-
+ .stack :
+ {
+ . = ALIGN(4);
+ _sstack = .;
+ . = . + _system_stack_size;
+ . = ALIGN(4);
+ _estack = .;
+ } >RAM
- /* Uninitialized data section into RAM memory */
- . = 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)
+ __bss_start = .;
+ .bss :
+ {
+ . = ALIGN(4);
+ /* This is used by the startup in order to initialize the .bss secion */
+ _sbss = .;
- . = ALIGN(4);
- _ebss = .; /* define a global symbol at bss end */
- __bss_end__ = _ebss;
- } > m_data
+ *(.bss)
+ *(.bss.*)
+ *(COMMON)
- /* 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);
- } > m_data
+ . = ALIGN(4);
+ /* This is used by the startup in order to initialize the .bss secion */
+ _ebss = . ;
+
+ *(.bss.init)
+ } > RAM
+ __bss_end = .;
-
-
- /* Remove information from the compiler libraries */
- /DISCARD/ :
- {
- libc.a ( * )
- libm.a ( * )
- libgcc.a ( * )
- }
-
- .ARM.attributes 0 : { *(.ARM.attributes) }
+ _end = .;
+ /* Stabs debugging sections. */
+ .stab 0 : { *(.stab) }
+ .stabstr 0 : { *(.stabstr) }
+ .stab.excl 0 : { *(.stab.excl) }
+ .stab.exclstr 0 : { *(.stab.exclstr) }
+ .stab.index 0 : { *(.stab.index) }
+ .stab.indexstr 0 : { *(.stab.indexstr) }
+ .comment 0 : { *(.comment) }
+ /* DWARF debug sections.
+ * Symbols in the DWARF debugging sections are relative to the beginning
+ * of the section so we begin them at 0. */
+ /* DWARF 1 */
+ .debug 0 : { *(.debug) }
+ .line 0 : { *(.line) }
+ /* GNU DWARF 1 extensions */
+ .debug_srcinfo 0 : { *(.debug_srcinfo) }
+ .debug_sfnames 0 : { *(.debug_sfnames) }
+ /* DWARF 1.1 and DWARF 2 */
+ .debug_aranges 0 : { *(.debug_aranges) }
+ .debug_pubnames 0 : { *(.debug_pubnames) }
+ /* DWARF 2 */
+ .debug_info 0 : { *(.debug_info .gnu.linkonce.wi.*) }
+ .debug_abbrev 0 : { *(.debug_abbrev) }
+ .debug_line 0 : { *(.debug_line) }
+ .debug_frame 0 : { *(.debug_frame) }
+ .debug_str 0 : { *(.debug_str) }
+ .debug_loc 0 : { *(.debug_loc) }
+ .debug_macinfo 0 : { *(.debug_macinfo) }
+ /* SGI/MIPS DWARF 2 extensions */
+ .debug_weaknames 0 : { *(.debug_weaknames) }
+ .debug_funcnames 0 : { *(.debug_funcnames) }
+ .debug_typenames 0 : { *(.debug_typenames) }
+ .debug_varnames 0 : { *(.debug_varnames) }
}
diff --git a/bsp/stm32/stm32mp157a-st-discovery/rtconfig.py b/bsp/stm32/stm32mp157a-st-discovery/rtconfig.py
index 6c80660f6a..b1cad1d512 100644
--- a/bsp/stm32/stm32mp157a-st-discovery/rtconfig.py
+++ b/bsp/stm32/stm32mp157a-st-discovery/rtconfig.py
@@ -23,7 +23,7 @@ elif CROSS_TOOL == 'keil':
EXEC_PATH = r'C:/Keil_v5'
elif CROSS_TOOL == 'iar':
PLATFORM = 'iar'
- EXEC_PATH = r'D:/1_software/Iar'
+ EXEC_PATH = r'C:/Program Files (x86)/IAR Systems/Embedded Workbench 8.0'
if os.getenv('RTT_EXEC_PATH'):
EXEC_PATH = os.getenv('RTT_EXEC_PATH')
@@ -141,3 +141,10 @@ elif PLATFORM == 'iar':
EXEC_PATH = EXEC_PATH + '/arm/bin/'
POST_ACTION = 'ielftool --bin $TARGET rtthread.bin'
+
+def dist_handle(BSP_ROOT, dist_dir):
+ import sys
+ cwd_path = os.getcwd()
+ sys.path.append(os.path.join(os.path.dirname(BSP_ROOT), 'tools'))
+ from sdk_dist import dist_do_building
+ dist_do_building(BSP_ROOT, dist_dir)