mirror of
https://github.com/apache/nuttx.git
synced 2026-06-01 16:59:28 +08:00
risc-v/k230: add NUTTSBI based kernel build support
Previously k230 kernel build needs OpenSBI wrapping for use on target, thus leading to larger program and memory overheads. This patch adds alternative small overhead kernel build support. Changes: - in arch/risc-v/src/k230: - k230_head.S entrance renamed for sake of NUTTSBI - k230_irq.c add M-mode handling for NUTTSBI case - k230_mm_init.c add L3 table for smaller RAM case - hardware/k230_plic.h add PLIC_CTRL definition - Make.defs use CHIP_ASRCS to fix entrance selection - in boards/risc-v/canmv230/scripts: - Make.defs add support for NUTTSBI case Additions: - in boards/riscv/canmv230/: - scripts/ld-nuttsbi.script link script for NUTTSBI case - configs/nsbi/defconfig config for NUTTSBI case The artifact nuttx.bin from this configuration can be used directly on target as OpenSBI wrapping is not needed. Signed-off-by: Yanfeng Liu <yfliu2008@qq.com> fix typo
This commit is contained in:
committed by
Alan Carvalho de Assis
parent
6a0eeb1b3e
commit
87c9a0ee76
@@ -24,7 +24,11 @@ include $(TOPDIR)/arch/risc-v/src/common/Toolchain.defs
|
||||
|
||||
ifeq ($(CONFIG_ARCH_CHIP_K230),y)
|
||||
ifeq ($(CONFIG_BUILD_KERNEL),y)
|
||||
ifeq ($(CONFIG_NUTTSBI),y)
|
||||
LDSCRIPT = ld-nuttsbi.script
|
||||
else
|
||||
LDSCRIPT = ld-kernel.script
|
||||
endif
|
||||
else ifeq ($(CONFIG_BUILD_PROTECTED),y)
|
||||
LDSCRIPT = ld-protected.script
|
||||
else
|
||||
@@ -54,17 +58,21 @@ endif
|
||||
|
||||
# POSTBUILD management
|
||||
|
||||
# KERNEL build needs real ROMFS and SBI wrapping
|
||||
# KERNEL builds need real ROMFS and even OpenSBI wrapping
|
||||
|
||||
ifeq ($(CONFIG_BUILD_KERNEL),y)
|
||||
ifeq ($(wildcard $(BOARD_DIR)$(DELIM)src$(DELIM)romfs_boot.c),)
|
||||
define POSTBUILD
|
||||
$(Q) echo "Please replace stub ROMFS w/ real one."
|
||||
$(Q) echo "Please replace stub ROMFS with real one."
|
||||
$(Q) rm $(BOARD_DIR)$(DELIM)src$(DELIM)libboard.a
|
||||
endef
|
||||
else ifneq ($(CONFIG_NUTTSBI),y)
|
||||
define POSTBUILD
|
||||
$(Q) echo "Please wrap nuttx.bin with OpenSBI to run on target."
|
||||
endef
|
||||
else
|
||||
define POSTBUILD
|
||||
$(Q) echo "wrap nuttx.bin w/ SBI to run on target."
|
||||
$(Q) echo "Please try nuttx.bin on target."
|
||||
endef
|
||||
endif
|
||||
endif
|
||||
|
||||
@@ -0,0 +1,143 @@
|
||||
/****************************************************************************
|
||||
* boards/risc-v/k230/canmv230/scripts/ld-nuttsbi.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.
|
||||
*
|
||||
****************************************************************************/
|
||||
|
||||
MEMORY
|
||||
{
|
||||
kflash (rx) : ORIGIN = 0x8000000, LENGTH = 384K /* w/ cache */
|
||||
ksram (rwx) : ORIGIN = 0x8080000, LENGTH = 128K /* w/ cache */
|
||||
pgram (rwx) : ORIGIN = 0x8600000, LENGTH = 10M /* 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);
|
||||
|
||||
SECTIONS
|
||||
{
|
||||
. = 0x8000000;
|
||||
|
||||
.text :
|
||||
{
|
||||
_stext = . ;
|
||||
*(.text)
|
||||
*(.text.*)
|
||||
*(.gnu.warning)
|
||||
*(.stub)
|
||||
*(.glue_7)
|
||||
*(.glue_7t)
|
||||
*(.jcr)
|
||||
|
||||
/* C++ support: The .init and .fini sections contain specific logic
|
||||
* to manage static constructors and destructors.
|
||||
*/
|
||||
|
||||
*(.gnu.linkonce.t.*)
|
||||
*(.init) /* Old ABI */
|
||||
*(.fini) /* Old ABI */
|
||||
_etext = . ;
|
||||
}
|
||||
|
||||
.rodata :
|
||||
{
|
||||
_srodata = . ;
|
||||
*(.rodata)
|
||||
*(.rodata1)
|
||||
*(.rodata.*)
|
||||
*(.gnu.linkonce.r*)
|
||||
_erodata = . ;
|
||||
}
|
||||
|
||||
.tdata : {
|
||||
_stdata = ABSOLUTE(.);
|
||||
*(.tdata .tdata.* .gnu.linkonce.td.*);
|
||||
_etdata = ABSOLUTE(.);
|
||||
}
|
||||
|
||||
.tbss : {
|
||||
_stbss = ABSOLUTE(.);
|
||||
*(.tbss .tbss.* .gnu.linkonce.tb.* .tcommon);
|
||||
_etbss = ABSOLUTE(.);
|
||||
}
|
||||
|
||||
_eronly = ABSOLUTE(.);
|
||||
|
||||
.data :
|
||||
{
|
||||
_sdata = . ;
|
||||
*(.data)
|
||||
*(.data1)
|
||||
*(.data.*)
|
||||
*(.gnu.linkonce.d*)
|
||||
. = ALIGN(4);
|
||||
_edata = . ;
|
||||
}
|
||||
|
||||
.bss :
|
||||
{
|
||||
_sbss = . ;
|
||||
*(.bss)
|
||||
*(.bss.*)
|
||||
*(.sbss)
|
||||
*(.sbss.*)
|
||||
*(.gnu.linkonce.b*)
|
||||
*(COMMON)
|
||||
_ebss = . ;
|
||||
} > ksram
|
||||
|
||||
/* Page tables here, align to 4K boundary */
|
||||
|
||||
.pgtables (NOLOAD) : ALIGN(0x1000) {
|
||||
*(.pgtables)
|
||||
. = ALIGN(4);
|
||||
} > ksram
|
||||
|
||||
/* Stack top */
|
||||
|
||||
.stack_top : {
|
||||
. = ALIGN(32);
|
||||
_ebss = 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) }
|
||||
}
|
||||
Reference in New Issue
Block a user