1/**************************************************************************//** 2 * @file gr551x.ld 3 * @brief Linker script for GR551X Device 4 * @version V1.00 5 * @date 10. September 2021 6 * 7 * @note 8 * 9 ******************************************************************************/ 10/* 11 * Copyright (c) 2021 GOODIX. 12 * Licensed under the Apache License, Version 2.0 (the "License"); 13 * you may not use this file except in compliance with the License. 14 * You may obtain a copy of the License at 15 * 16 * http://www.apache.org/licenses/LICENSE-2.0 17 * 18 * Unless required by applicable law or agreed to in writing, software 19 * distributed under the License is distributed on an "AS IS" BASIS, 20 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 21 * See the License for the specific language governing permissions and 22 * limitations under the License. 23 */ 24 25/* Entry Point */ 26ENTRY(Reset_Handler) 27 28_Min_Heap_Size = 0x800; /* required amount of heap */ 29_Min_Stack_Size = 0x2000; /* required amount of stack */ 30 31/* Highest address of the user mode stack */ 32_estack = ORIGIN(RAM) + LENGTH(RAM); /* end of "RAM" Ram type memory */ 33_sstack = _estack - _Min_Stack_Size; 34 35/* Memories definition */ 36MEMORY 37{ 38 FPB_RAM (xrw) : ORIGIN = 0x30004000, LENGTH = 0x20 39 RAM (xrw) : ORIGIN = 0x00804400, LENGTH = 239K 40 FLASH (rx) : ORIGIN = 0x0100B000, LENGTH = 950K 41} 42 43/* Sections */ 44SECTIONS 45{ 46 /* The startup code into "FLASH" Rom type memory */ 47 .isr_vector : 48 { 49 . = ALIGN(4); 50 KEEP(*(.isr_vector)) /* Startup code */ 51 . = ALIGN(4); 52 } >FLASH 53 54 /* The program code and other data goes into FLASH */ 55 .text : 56 { 57 . = ALIGN(4); 58 _stext = .; 59 *(.text) /* .text sections (code) */ 60 *(.text*) /* .text* sections (code) */ 61 *(.glue_7) /* glue arm to thumb code */ 62 *(.glue_7t) /* glue thumb to arm code */ 63 *(.eh_frame) 64 65 __zinitcall_bsp_start = .; 66 KEEP (*(.zinitcall.bsp0.init)) 67 KEEP (*(.zinitcall.bsp1.init)) 68 KEEP (*(.zinitcall.bsp2.init)) 69 KEEP (*(.zinitcall.bsp3.init)) 70 KEEP (*(.zinitcall.bsp4.init)) 71 __zinitcall_bsp_end = .; 72 __zinitcall_device_start = .; 73 KEEP (*(.zinitcall.device0.init)) 74 KEEP (*(.zinitcall.device1.init)) 75 KEEP (*(.zinitcall.device2.init)) 76 KEEP (*(.zinitcall.device3.init)) 77 KEEP (*(.zinitcall.device4.init)) 78 __zinitcall_device_end = .; 79 __zinitcall_core_start = .; 80 KEEP (*(.zinitcall.core0.init)) 81 KEEP (*(.zinitcall.core1.init)) 82 KEEP (*(.zinitcall.core2.init)) 83 KEEP (*(.zinitcall.core3.init)) 84 KEEP (*(.zinitcall.core4.init)) 85 __zinitcall_core_end = .; 86 __zinitcall_sys_service_start = .; 87 KEEP (*(.zinitcall.sys.service0.init)) 88 KEEP (*(.zinitcall.sys.service1.init)) 89 KEEP (*(.zinitcall.sys.service2.init)) 90 KEEP (*(.zinitcall.sys.service3.init)) 91 KEEP (*(.zinitcall.sys.service4.init)) 92 __zinitcall_sys_service_end = .; 93 __zinitcall_sys_feature_start = .; 94 KEEP (*(.zinitcall.sys.feature0.init)) 95 KEEP (*(.zinitcall.sys.feature1.init)) 96 KEEP (*(.zinitcall.sys.feature2.init)) 97 KEEP (*(.zinitcall.sys.feature3.init)) 98 KEEP (*(.zinitcall.sys.feature4.init)) 99 __zinitcall_sys_feature_end = .; 100 __zinitcall_run_start = .; 101 KEEP (*(.zinitcall.run0.init)) 102 KEEP (*(.zinitcall.run1.init)) 103 KEEP (*(.zinitcall.run2.init)) 104 KEEP (*(.zinitcall.run3.init)) 105 KEEP (*(.zinitcall.run4.init)) 106 __zinitcall_run_end = .; 107 __zinitcall_app_service_start = .; 108 KEEP (*(.zinitcall.app.service0.init)) 109 KEEP (*(.zinitcall.app.service1.init)) 110 KEEP (*(.zinitcall.app.service2.init)) 111 KEEP (*(.zinitcall.app.service3.init)) 112 KEEP (*(.zinitcall.app.service4.init)) 113 __zinitcall_app_service_end = .; 114 __zinitcall_app_feature_start = .; 115 KEEP (*(.zinitcall.app.feature0.init)) 116 KEEP (*(.zinitcall.app.feature1.init)) 117 KEEP (*(.zinitcall.app.feature2.init)) 118 KEEP (*(.zinitcall.app.feature3.init)) 119 KEEP (*(.zinitcall.app.feature4.init)) 120 __zinitcall_app_feature_end = .; 121 __zinitcall_test_start = .; 122 KEEP (*(.zinitcall.test0.init)) 123 KEEP (*(.zinitcall.test1.init)) 124 KEEP (*(.zinitcall.test2.init)) 125 KEEP (*(.zinitcall.test3.init)) 126 KEEP (*(.zinitcall.test4.init)) 127 __zinitcall_test_end = .; 128 __zinitcall_exit_start = .; 129 KEEP (*(.zinitcall.exit0.init)) 130 KEEP (*(.zinitcall.exit1.init)) 131 KEEP (*(.zinitcall.exit2.init)) 132 KEEP (*(.zinitcall.exit3.init)) 133 KEEP (*(.zinitcall.exit4.init)) 134 __zinitcall_exit_end = .; 135 136 KEEP (*(.init)) 137 KEEP (*(.fini)) 138 139 . = ALIGN(4); 140 _etext = .; /* define a global symbols at end of code */ 141 } >FLASH 142 143 /* Constant data into "FLASH" Rom type memory */ 144 .rodata : 145 { 146 . = ALIGN(4); 147 *(.rodata) /* .rodata sections (constants, strings, etc.) */ 148 *(.rodata*) /* .rodata* sections (constants, strings, etc.) */ 149 . = ALIGN(4); 150 } >FLASH 151 152 .ARM.extab : { 153 . = ALIGN(4); 154 *(.ARM.extab* .gnu.linkonce.armextab.*) 155 . = ALIGN(4); 156 } >FLASH 157 158 .ARM : { 159 . = ALIGN(4); 160 __exidx_start = .; 161 *(.ARM.exidx*) 162 __exidx_end = .; 163 . = ALIGN(4); 164 } >FLASH 165 166 .preinit_array : 167 { 168 . = ALIGN(4); 169 PROVIDE_HIDDEN (__preinit_array_start = .); 170 KEEP (*(.preinit_array*)) 171 PROVIDE_HIDDEN (__preinit_array_end = .); 172 . = ALIGN(4); 173 } >FLASH 174 175 .init_array : 176 { 177 . = ALIGN(4); 178 PROVIDE_HIDDEN (__init_array_start = .); 179 KEEP (*(SORT(.init_array.*))) 180 KEEP (*(.init_array*)) 181 PROVIDE_HIDDEN (__init_array_end = .); 182 . = ALIGN(4); 183 } >FLASH 184 185 .fini_array : 186 { 187 . = ALIGN(4); 188 PROVIDE_HIDDEN (__fini_array_start = .); 189 KEEP (*(SORT(.fini_array.*))) 190 KEEP (*(.fini_array*)) 191 PROVIDE_HIDDEN (__fini_array_end = .); 192 . = ALIGN(4); 193 } >FLASH 194 195 .hdf_drivers_entry : 196 { 197 _hdf_drivers_start = .; 198 KEEP(*(.hdf.driver)) 199 _hdf_drivers_end = .; 200 } >FLASH 201 202 /* Used by the startup to initialize data */ 203 _sidata = LOADADDR(.data); 204 __etext = .; 205 206 /* Initialized data sections into "RAM" Ram type memory */ 207 .data : 208 { 209 . = ALIGN(4); 210 __data_start__ = . ; /* create a global symbol at data start */ 211 KEEP (*(.vector)) /* make the vector at the data begining, and it will meet the needs of VTOR */ 212 . = ALIGN(4); 213 *(.data) /* .data sections */ 214 *(.data*) /* .data* sections */ 215 *(.RamFunc) /* .RamFunc sections */ 216 *(.RamFunc*) /* .RamFunc* sections */ 217 *(RAM_CODE) /* .RamFunc sections */ 218 *(.ramfunc) /* .RamFunc sections */ 219 *(TINY_RAM_SPACE) 220 . = ALIGN(4); 221 __data_end__ = . ;/* define a global symbol at data end */ 222 } >RAM AT> FLASH 223 224 /* Uninitialized data section into "RAM" Ram type memory */ 225 . = ALIGN(4); 226 .bss : 227 { 228 /* This is used by the startup in order to initialize the .bss section */ 229 __bss_start__ = .; /* define a global symbol at bss start */ 230 *(.bss) 231 *(.bss*) 232 *(COMMON) 233 234 . = ALIGN(4); 235 __bss_end__ = .; /* define a global symbol at bss end */ 236 } >RAM 237 238 . = ALIGN(16); 239 __los_heap_addr_start__ = .; 240 __los_heap_addr_end__ = ORIGIN(RAM) + LENGTH(RAM) - _Min_Stack_Size - _Min_Heap_Size - 1; 241 242 .fpb : 243 { 244 . = ALIGN(0x100); 245 *(FPB) 246 } >FPB_RAM AT> FLASH 247 248 .ARM.attributes 0 : { *(.ARM.attributes) } 249} 250