I am trying to add a segment to a build for a RT1052 board.
On the RT1052 you need to have a config section for QSPI which is located at the start of flash ( 0x60000000 ) which is 512 bytes long
I inserted this section above the vector assignments in (MIMXRT1052_Vectors.s)
Additionally you need to have IVT, which has info about the image in flash.
I modified my flash_placement.xml file to add this segment, as follows.
<ProgramSection alignment="4" load="No" name=".boot_hdr" start="0x60001000" />
When I look into the map file it looks like the segment has been created but no data has been allocated for this section.
__vectors_load_start__ = 0x60000000;
.vectors 0x60000000 : AT(0x60000000)
{
__vectors_start__ = .;
*(.vectors .vectors.*)
}
__vectors_end__ = __vectors_start__ + SIZEOF(.vectors);
__vectors_size__ = SIZEOF(.vectors);
__vectors_load_end__ = __vectors_end__;
. = ASSERT(__vectors_start__ == __vectors_end__ (__vectors_end__ >= __FLASH_segment_start__ && __vectors_end__ <= __FLASH_segment_end__) , "error: .vectors is too large to fit in FLASH memory segment");
.boot_hdr 0x0000000060001000 0x0
0x0000000060001000 __boot_hdr_start__ = .
*(.boot_hdr .boot_hdr.*)
0x0000000060001000 __boot_hdr_end__ = (__boot_hdr_start__ + SIZEOF (.boot_hdr))
0x0000000000000000 __boot_hdr_size__ = SIZEOF (.boot_hdr)
0x0000000060001000 __boot_hdr_load_end__ = __boot_hdr_end__
0x0000000000000001 . = ASSERT (((__boot_hdr_start__ == __boot_hdr_end__) ((__boot_hdr_end__ >= __FLASH_segment_start__) && (__boot_hdr_end__ <= __FLASH_segment_end__))), error: .boot_hdr is too large to fit in FLASH memory segment)
0x0000000000000001 . = ASSERT ((__vectors_end__ <= __boot_hdr_start__), error: section .vectors overlaps absolute placed section .boot_hdr)
0x0000000060001000 __init_load_start__ = ALIGN (__boot_hdr_end__, 0x4)
Additionally when I look into the ld file that the placement.xml file creates it also has no data allocated.
__boot_hdr_load_start__ = 0x60001000;
.boot_hdr 0x60001000 : AT(0x60001000)
{
__boot_hdr_start__ = .;
*(.boot_hdr .boot_hdr.*)
}
__boot_hdr_end__ = __boot_hdr_start__ + SIZEOF(.boot_hdr);
__boot_hdr_size__ = SIZEOF(.boot_hdr);
__boot_hdr_load_end__ = __boot_hdr_end__;
. = ASSERT(__boot_hdr_start__ == __boot_hdr_end__ (__boot_hdr_end__ >= __FLASH_segment_start__ && __boot_hdr_end__ <= __FLASH_segment_end__) , "error: .boot_hdr is too large to fit in FLASH memory segment");
. = ASSERT(__vectors_end__ <= __boot_hdr_start__ , "error: section .vectors overlaps absolute placed section .boot_hdr");
By looking at the ASSERT it looks like the linker thinks that the preceeding section (vectors) overlaps this section.
But that section starts at 0x60000000 and it has a length of 0x200.
Paul
On the RT1052 you need to have a config section for QSPI which is located at the start of flash ( 0x60000000 ) which is 512 bytes long
I inserted this section above the vector assignments in (MIMXRT1052_Vectors.s)
Additionally you need to have IVT, which has info about the image in flash.
I modified my flash_placement.xml file to add this segment, as follows.
<ProgramSection alignment="4" load="No" name=".boot_hdr" start="0x60001000" />
When I look into the map file it looks like the segment has been created but no data has been allocated for this section.
__vectors_load_start__ = 0x60000000;
.vectors 0x60000000 : AT(0x60000000)
{
__vectors_start__ = .;
*(.vectors .vectors.*)
}
__vectors_end__ = __vectors_start__ + SIZEOF(.vectors);
__vectors_size__ = SIZEOF(.vectors);
__vectors_load_end__ = __vectors_end__;
. = ASSERT(__vectors_start__ == __vectors_end__ (__vectors_end__ >= __FLASH_segment_start__ && __vectors_end__ <= __FLASH_segment_end__) , "error: .vectors is too large to fit in FLASH memory segment");
.boot_hdr 0x0000000060001000 0x0
0x0000000060001000 __boot_hdr_start__ = .
*(.boot_hdr .boot_hdr.*)
0x0000000060001000 __boot_hdr_end__ = (__boot_hdr_start__ + SIZEOF (.boot_hdr))
0x0000000000000000 __boot_hdr_size__ = SIZEOF (.boot_hdr)
0x0000000060001000 __boot_hdr_load_end__ = __boot_hdr_end__
0x0000000000000001 . = ASSERT (((__boot_hdr_start__ == __boot_hdr_end__) ((__boot_hdr_end__ >= __FLASH_segment_start__) && (__boot_hdr_end__ <= __FLASH_segment_end__))), error: .boot_hdr is too large to fit in FLASH memory segment)
0x0000000000000001 . = ASSERT ((__vectors_end__ <= __boot_hdr_start__), error: section .vectors overlaps absolute placed section .boot_hdr)
0x0000000060001000 __init_load_start__ = ALIGN (__boot_hdr_end__, 0x4)
Additionally when I look into the ld file that the placement.xml file creates it also has no data allocated.
__boot_hdr_load_start__ = 0x60001000;
.boot_hdr 0x60001000 : AT(0x60001000)
{
__boot_hdr_start__ = .;
*(.boot_hdr .boot_hdr.*)
}
__boot_hdr_end__ = __boot_hdr_start__ + SIZEOF(.boot_hdr);
__boot_hdr_size__ = SIZEOF(.boot_hdr);
__boot_hdr_load_end__ = __boot_hdr_end__;
. = ASSERT(__boot_hdr_start__ == __boot_hdr_end__ (__boot_hdr_end__ >= __FLASH_segment_start__ && __boot_hdr_end__ <= __FLASH_segment_end__) , "error: .boot_hdr is too large to fit in FLASH memory segment");
. = ASSERT(__vectors_end__ <= __boot_hdr_start__ , "error: section .vectors overlaps absolute placed section .boot_hdr");
By looking at the ASSERT it looks like the linker thinks that the preceeding section (vectors) overlaps this section.
But that section starts at 0x60000000 and it has a length of 0x200.
Paul