• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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