From 13fd93ed2a75a4b5e64ebe46b142453d3b016df6 Mon Sep 17 00:00:00 2001 From: Ville Juven Date: Tue, 28 Dec 2021 16:47:15 +0200 Subject: [PATCH] MPFS: Add linker script for CONFIG_BUILD_KERNEL --- boards/risc-v/mpfs/icicle/scripts/Make.defs | 2 + .../mpfs/icicle/scripts/kernel-space.ld | 1 + .../risc-v/mpfs/icicle/scripts/ld-envm.script | 4 + .../mpfs/icicle/scripts/ld-kernel.script | 121 ++++++++++++++++++ boards/risc-v/mpfs/icicle/scripts/ld.script | 4 + 5 files changed, 132 insertions(+) create mode 100755 boards/risc-v/mpfs/icicle/scripts/ld-kernel.script diff --git a/boards/risc-v/mpfs/icicle/scripts/Make.defs b/boards/risc-v/mpfs/icicle/scripts/Make.defs index dc146f0eb2..778944f119 100755 --- a/boards/risc-v/mpfs/icicle/scripts/Make.defs +++ b/boards/risc-v/mpfs/icicle/scripts/Make.defs @@ -34,6 +34,8 @@ ifeq ($(CONFIG_MPFS_BOOTLOADER),y) else ifeq ($(CONFIG_BUILD_PROTECTED),y) LDMEMORY = memory.ld LDSCRIPT = kernel-space.ld +else ifeq ($(CONFIG_BUILD_KERNEL),y) + LDSCRIPT = ld-kernel.script else LDSCRIPT = ld.script endif diff --git a/boards/risc-v/mpfs/icicle/scripts/kernel-space.ld b/boards/risc-v/mpfs/icicle/scripts/kernel-space.ld index b92f2e3769..197518d466 100755 --- a/boards/risc-v/mpfs/icicle/scripts/kernel-space.ld +++ b/boards/risc-v/mpfs/icicle/scripts/kernel-space.ld @@ -37,6 +37,7 @@ __kflash_start = ORIGIN(kflash); __kflash_size = LENGTH(kflash); __ksram_start = ORIGIN(ksram); __ksram_size = LENGTH(ksram); +__ksram_end = ORIGIN(ksram) + LENGTH(ksram); ENTRY(_stext) EXTERN(_vectors) diff --git a/boards/risc-v/mpfs/icicle/scripts/ld-envm.script b/boards/risc-v/mpfs/icicle/scripts/ld-envm.script index 9c240fb900..aec2d8a368 100755 --- a/boards/risc-v/mpfs/icicle/scripts/ld-envm.script +++ b/boards/risc-v/mpfs/icicle/scripts/ld-envm.script @@ -27,6 +27,10 @@ MEMORY OUTPUT_ARCH("riscv") +__ksram_start = ORIGIN(lim); +__ksram_size = LENGTH(lim); +__ksram_end = ORIGIN(lim) + LENGTH(lim); + ENTRY(_stext) EXTERN(_vectors) SECTIONS diff --git a/boards/risc-v/mpfs/icicle/scripts/ld-kernel.script b/boards/risc-v/mpfs/icicle/scripts/ld-kernel.script new file mode 100755 index 0000000000..ab81ad1bc7 --- /dev/null +++ b/boards/risc-v/mpfs/icicle/scripts/ld-kernel.script @@ -0,0 +1,121 @@ +/**************************************************************************** + * boards/risc-v/mpfs/icicle/scripts/ld.script + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. The + * ASF licenses this file to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the + * License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + * + ****************************************************************************/ + +/* Map memory so that the kernel itself has 256K executable and data memory, + * for a total of 0.5M, and the rest is given for the user tasks. A total of + * 4M is reserved which should be plenty + */ + +MEMORY +{ + kflash (rx) : ORIGIN = 0x80000000, LENGTH = 1024K /* w/ cache */ + ksram (rwx) : ORIGIN = 0x80100000, LENGTH = 1024K /* w/ cache */ + pgram (rwx) : ORIGIN = 0x80200000, LENGTH = 4096K /* w/ cache */ +} + +OUTPUT_ARCH("riscv") + +/* Provide the kernel boundaries */ + +__kflash_start = ORIGIN(kflash); +__kflash_size = LENGTH(kflash); +__ksram_start = ORIGIN(ksram); +__ksram_size = LENGTH(ksram); +__ksram_end = ORIGIN(ksram) + LENGTH(ksram); + +/* Page heap */ + +__pgheap_start = ORIGIN(pgram); +__pgheap_size = LENGTH(pgram); + +ENTRY(_stext) +EXTERN(_vectors) +SECTIONS +{ + .text : { + _stext = ABSOLUTE(.); + *(.vectors) + *(.text .text.*) + *(.fixup) + *(.gnu.warning) + *(.rodata .rodata.* .srodata .srodata.*) + *(.gnu.linkonce.t.*) + *(.glue_7) + *(.glue_7t) + *(.got) + *(.gcc_except_table) + *(.gnu.linkonce.r.*) + _etext = ABSOLUTE(.); + } > kflash + + .init_section : ALIGN(4) { + _sinit = ABSOLUTE(.); + KEEP(*(.init_array .init_array.*)) + _einit = ABSOLUTE(.); + } > kflash + + _eronly = ABSOLUTE(.); + + .data : ALIGN(4) { + _sdata = ABSOLUTE(.); + *(.data .data.*) + *(.sdata .sdata.* .sdata2.*) + *(.gnu.linkonce.d.*) + *(.gnu.linkonce.s.*) + CONSTRUCTORS + . = ALIGN(4); + _edata = ABSOLUTE(.); + } > ksram AT > kflash + + PROVIDE(__global_pointer$ = _sdata + ((_edata - _sdata) / 2)); + + .bss : ALIGN(4) { + _sbss = ABSOLUTE(.); + *(.bss .bss.*) + *(.sbss .sbss.*) + *(.gnu.linkonce.b.*) + *(.gnu.linkonce.sb.*) + *(COMMON) + . = ALIGN(4); + _ebss = ABSOLUTE(.); + } > ksram + + /* Stack top */ + + .stack_top : { + . = ALIGN(32); + _default_stack_limit = ABSOLUTE(.); + } > ksram + + /* 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) } + .debug_abbrev 0 : { *(.debug_abbrev) } + .debug_info 0 : { *(.debug_info) } + .debug_line 0 : { *(.debug_line) } + .debug_pubnames 0 : { *(.debug_pubnames) } + .debug_aranges 0 : { *(.debug_aranges) } +} diff --git a/boards/risc-v/mpfs/icicle/scripts/ld.script b/boards/risc-v/mpfs/icicle/scripts/ld.script index d116f7e9d0..b50d42a722 100755 --- a/boards/risc-v/mpfs/icicle/scripts/ld.script +++ b/boards/risc-v/mpfs/icicle/scripts/ld.script @@ -26,6 +26,10 @@ MEMORY OUTPUT_ARCH("riscv") +__ksram_start = ORIGIN(sram); +__ksram_size = LENGTH(sram); +__ksram_end = ORIGIN(ksram) + LENGTH(ksram); + ENTRY(_stext) EXTERN(_vectors) SECTIONS