diff --git a/bsp/cvitek/README.md b/bsp/cvitek/README.md index 65e09b0ae49..d045a325a8f 100644 --- a/bsp/cvitek/README.md +++ b/bsp/cvitek/README.md @@ -163,11 +163,11 @@ RT-Thread Kernel ---> [*] Enable RT-Thread Smart (microkernel on kernel/userland) ``` -**注意检查内核虚拟起始地址的配置,确保为 `0xFFFFFFC000200000`。** +**注意检查内核虚拟起始地址的配置,确保为 `0xFFFFFFC000000000`。** ```shell RT-Thread Kernel ---> -(0xFFFFFFC000200000) The virtural address of kernel start +(0xFFFFFFC000000000) The virtural address of kernel start RT-Thread Components ---> ``` diff --git a/bsp/cvitek/cv18xx_risc-v/.config b/bsp/cvitek/cv18xx_risc-v/.config index cbbcec3d3b2..e85a5287011 100644 --- a/bsp/cvitek/cv18xx_risc-v/.config +++ b/bsp/cvitek/cv18xx_risc-v/.config @@ -155,7 +155,6 @@ CONFIG_RT_DEBUGING_ASSERT=y CONFIG_RT_DEBUGING_COLOR=y CONFIG_RT_DEBUGING_CONTEXT=y # CONFIG_RT_DEBUGING_AUTO_INIT is not set -# CONFIG_RT_DEBUGING_PAGE_LEAK is not set # CONFIG_RT_USING_CI_ACTION is not set # @@ -173,7 +172,6 @@ CONFIG_RT_USING_MESSAGEQUEUE=y # # Memory Management # -CONFIG_RT_PAGE_MAX_ORDER=11 # CONFIG_RT_USING_MEMPOOL is not set # CONFIG_RT_USING_SMALL_MEM is not set CONFIG_RT_USING_SLAB=y @@ -195,7 +193,7 @@ CONFIG_RT_USING_DEVICE_OPS=y CONFIG_RT_USING_CONSOLE=y CONFIG_RT_CONSOLEBUF_SIZE=256 CONFIG_RT_CONSOLE_DEVICE_NAME="uart0" -CONFIG_RT_VER_NUM=0x50200 +CONFIG_RT_VER_NUM=0x50201 CONFIG_RT_USING_STDC_ATOMIC=y CONFIG_RT_BACKTRACE_LEVEL_MAX_NR=32 # end of RT-Thread Kernel @@ -203,7 +201,7 @@ CONFIG_RT_BACKTRACE_LEVEL_MAX_NR=32 CONFIG_ARCH_CPU_64BIT=y CONFIG_RT_USING_CACHE=y CONFIG_ARCH_MM_MMU=y -CONFIG_KERNEL_VADDR_START=0xFFFFFFC000200000 +CONFIG_KERNEL_VADDR_START=0xffffffc000000000 CONFIG_ARCH_RISCV=y CONFIG_ARCH_RISCV_FPU=y CONFIG_ARCH_RISCV_FPU_D=y @@ -274,6 +272,7 @@ CONFIG_RT_DFS_ELM_MUTEX_TIMEOUT=3000 CONFIG_RT_USING_DFS_DEVFS=y CONFIG_RT_USING_DFS_ROMFS=y CONFIG_RT_USING_DFS_PTYFS=y +# CONFIG_RT_USING_DFS_PROCFS is not set # CONFIG_RT_USING_DFS_CROMFS is not set CONFIG_RT_USING_DFS_TMPFS=y # CONFIG_RT_USING_DFS_MQUEUE is not set @@ -533,9 +532,25 @@ CONFIG_RT_USING_ADT_REF=y # end of Utilities # CONFIG_RT_USING_VBUS is not set + +# +# Memory management +# +CONFIG_RT_PAGE_AFFINITY_BLOCK_SIZE=0x1000 +CONFIG_RT_PAGE_MAX_ORDER=11 +# CONFIG_RT_USING_MEMBLOCK is not set + +# +# Debugging +# +# CONFIG_RT_DEBUGGING_ALIASING is not set +# CONFIG_RT_DEBUGING_PAGE_LEAK is not set +# CONFIG_RT_DEBUGGING_PAGE_POISON is not set +# end of Debugging +# end of Memory management + CONFIG_RT_USING_LWP=y -CONFIG_LWP_DEBUG=y -# CONFIG_LWP_DEBUG_INIT is not set +# CONFIG_LWP_DEBUG is not set CONFIG_LWP_USING_RUNTIME=y CONFIG_RT_LWP_MAX_NR=30 CONFIG_LWP_TASK_STACK_SIZE=16384 @@ -548,12 +563,6 @@ CONFIG_RT_USING_LDSO=y CONFIG_LWP_USING_TERMINAL=y CONFIG_LWP_PTY_MAX_PARIS_LIMIT=64 -# -# Memory management -# -# CONFIG_RT_USING_MEMBLOCK is not set -# end of Memory management - # # Using USB legacy version # diff --git a/bsp/cvitek/cv18xx_risc-v/.gitignore b/bsp/cvitek/cv18xx_risc-v/.gitignore index 5a70c2b55ff..469e9f08d17 100755 --- a/bsp/cvitek/cv18xx_risc-v/.gitignore +++ b/bsp/cvitek/cv18xx_risc-v/.gitignore @@ -1,2 +1,4 @@ dtb/ -Image \ No newline at end of file +Image + +link.lds.generated \ No newline at end of file diff --git a/bsp/cvitek/cv18xx_risc-v/SConstruct b/bsp/cvitek/cv18xx_risc-v/SConstruct index 04a2682b35a..69100f10010 100755 --- a/bsp/cvitek/cv18xx_risc-v/SConstruct +++ b/bsp/cvitek/cv18xx_risc-v/SConstruct @@ -29,20 +29,11 @@ drivers_path_prefix = os.path.dirname(SDK_ROOT) + '/drivers' # prepare building environment objs = PrepareBuilding(env, RTT_ROOT, has_libcpu = False) -if GetDepend('RT_USING_SMART'): - # use smart link.lds - env['LINKFLAGS'] = env['LINKFLAGS'].replace('link.lds', 'link_smart.lds') - # include libraries objs.extend(SConscript(drivers_path_prefix + '/SConscript', variant_dir='build/drivers', duplicate=0)) -stack_size = 4096 - -stack_lds = open('link_stacksize.lds', 'w') -if GetDepend('__STACKSIZE__'): - stack_size = GetDepend('__STACKSIZE__') -stack_lds.write('__STACKSIZE__ = %d;\n' % stack_size) -stack_lds.close() +from gen_ld import * +generate_ldscript('link.lds', 'link.lds.generated') # make a building DoBuilding(TARGET, objs) diff --git a/bsp/cvitek/cv18xx_risc-v/board/board.c b/bsp/cvitek/cv18xx_risc-v/board/board.c index ab3a7178ed9..5d7432e5478 100755 --- a/bsp/cvitek/cv18xx_risc-v/board/board.c +++ b/bsp/cvitek/cv18xx_risc-v/board/board.c @@ -14,21 +14,32 @@ #include "sbi.h" +extern unsigned int __sram_end; +#define RAM_END (rt_size_t)((void *)&__sram_end) + +extern unsigned int __bss_start; +extern unsigned int __bss_end; + +#define RT_HW_HEAP_BEGIN ((void *)&__bss_end) +#define RT_HW_HEAP_END ((void *)((rt_size_t)RT_HW_HEAP_BEGIN + 8 * 1024 * 1024)) + +#define RT_HW_PAGE_START RT_HW_HEAP_END +#define RT_HW_PAGE_END ((void *)(RAM_END)) + #ifdef RT_USING_SMART #include "riscv_mmu.h" #include "mmu.h" #include "page.h" #include "lwp_arch.h" -/* respect to boot loader, must be 0xFFFFFFC000200000 */ -RT_STATIC_ASSERT(kmem_region, KERNEL_VADDR_START == 0xFFFFFFC000200000); +#include "mem_layout.h" rt_region_t init_page_region = {(rt_size_t)RT_HW_PAGE_START, (rt_size_t)RT_HW_PAGE_END}; extern size_t MMUTable[]; struct mem_desc platform_mem_desc[] = { - {KERNEL_VADDR_START, (rt_size_t)RT_HW_PAGE_END - 1, (rt_size_t)ARCH_MAP_FAILED, NORMAL_MEM}, + {KERNEL_START, (rt_size_t)RT_HW_PAGE_END - 1, (rt_size_t)ARCH_MAP_FAILED, NORMAL_MEM}, }; #define NUM_MEM_DESC (sizeof(platform_mem_desc) / sizeof(platform_mem_desc[0])) diff --git a/bsp/cvitek/cv18xx_risc-v/board/board.h b/bsp/cvitek/cv18xx_risc-v/board/board.h index 5f23ff4a6f9..07d559f3aa3 100755 --- a/bsp/cvitek/cv18xx_risc-v/board/board.h +++ b/bsp/cvitek/cv18xx_risc-v/board/board.h @@ -15,18 +15,6 @@ #include "drv_uart.h" #include "tick.h" -extern unsigned int __sram_end; -#define RAM_END (rt_size_t)((void *)&__sram_end) - -extern unsigned int __bss_start; -extern unsigned int __bss_end; - -#define RT_HW_HEAP_BEGIN ((void *)&__bss_end) -#define RT_HW_HEAP_END ((void *)((rt_size_t)RT_HW_HEAP_BEGIN + 8 * 1024 * 1024)) - -#define RT_HW_PAGE_START RT_HW_HEAP_END -#define RT_HW_PAGE_END ((void *)(RAM_END)) - void rt_hw_board_init(void); #endif diff --git a/bsp/cvitek/cv18xx_risc-v/board/mem_layout.h b/bsp/cvitek/cv18xx_risc-v/board/mem_layout.h new file mode 100644 index 00000000000..a9c13357232 --- /dev/null +++ b/bsp/cvitek/cv18xx_risc-v/board/mem_layout.h @@ -0,0 +1,22 @@ +/* + * Copyright (c) 2006-2021, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + */ +#ifndef MEMORY_LAYOUT_H__ +#define MEMORY_LAYOUT_H__ + +#include "../rtconfig.h" + +/* Real start address of kernel is located after bootloader */ +#define KERNEL_OFFSET 0x200000 + +#ifdef RT_USING_SMART +#define KERNEL_START (KERNEL_VADDR_START + KERNEL_OFFSET) +#define KERNEL_SIZE 64 * 1024 * 1024 +#else +#define KERNEL_START (0x80000000 + KERNEL_OFFSET) +#define KERNEL_SIZE 32 * 1024 * 1024 +#endif + +#endif // MEMORY_LAYOUT_H__ \ No newline at end of file diff --git a/bsp/cvitek/cv18xx_risc-v/gen_ld.py b/bsp/cvitek/cv18xx_risc-v/gen_ld.py new file mode 100644 index 00000000000..7a86f5737c3 --- /dev/null +++ b/bsp/cvitek/cv18xx_risc-v/gen_ld.py @@ -0,0 +1,27 @@ +import os +import rtconfig +import platform +import subprocess + +def generate_ldscript(input, output): + + if not os.path.exists(input): + print('Error: file', input, 'not found') + return + + if os.path.exists(output): + os.remove(output) + + if rtconfig.PLATFORM == 'gcc': + + gcc_cmd = os.path.join(rtconfig.EXEC_PATH, rtconfig.CC) + + # gcc -E -P -x c $input -o $output + if (platform.system() == 'Windows'): + child = subprocess.Popen([gcc_cmd, '-E', '-P', '-x', 'c', input, '-o', output], stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True) + else: + child = subprocess.Popen(gcc_cmd + f' -E -P -x c {input} -o {output}', stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True) + + child.communicate() + + print(output, 'is generated from', input) diff --git a/bsp/cvitek/cv18xx_risc-v/link.lds b/bsp/cvitek/cv18xx_risc-v/link.lds index 84581775040..e9810ec78a2 100755 --- a/bsp/cvitek/cv18xx_risc-v/link.lds +++ b/bsp/cvitek/cv18xx_risc-v/link.lds @@ -8,20 +8,13 @@ * 2020/12/12 bernard The first version */ -INCLUDE "link_stacksize.lds" +#include "board/mem_layout.h" OUTPUT_ARCH( "riscv" ) -/* - * Memory layout: - * 0x10200000 - 0x10201000: Bootloader - * 0x10201000 - 0x10A00000: Kernel - * 0x10A00000 - 0x11200000: Heap - */ - MEMORY { - SRAM(wx): ORIGIN = 0x80200000, LENGTH = 32M + SRAM(wx): ORIGIN = KERNEL_START, LENGTH = KERNEL_SIZE } ENTRY(_start) @@ -29,7 +22,6 @@ SECTIONS { . = ORIGIN(SRAM) ; - /* __STACKSIZE__ = 4096; */ __sram_base = ORIGIN(SRAM); __sram_size = LENGTH(SRAM); __sram_end = __sram_base + __sram_size; diff --git a/bsp/cvitek/cv18xx_risc-v/link_smart.lds b/bsp/cvitek/cv18xx_risc-v/link_smart.lds deleted file mode 100644 index 7dc21101f11..00000000000 --- a/bsp/cvitek/cv18xx_risc-v/link_smart.lds +++ /dev/null @@ -1,200 +0,0 @@ -/* - * Copyright (c) 2006-2023, RT-Thread Development Team - * - * SPDX-License-Identifier: Apache-2.0 - * - * Change Logs: - * Date Author Notes - * 2020/12/12 bernard The first version - */ - -INCLUDE "link_stacksize.lds" - -OUTPUT_ARCH( "riscv" ) - -/* - * Memory layout: - * 0x10200000 - 0x10201000: Bootloader - * 0x10201000 - 0x10A00000: Kernel - * 0x10A00000 - 0x11200000: Heap - */ - -MEMORY -{ - SRAM(wx): ORIGIN = 0xFFFFFFC000200000, LENGTH = 64M -} - -ENTRY(_start) -SECTIONS -{ - . = ORIGIN(SRAM) ; - - /* __STACKSIZE__ = 4096; */ - __sram_base = ORIGIN(SRAM); - __sram_size = LENGTH(SRAM); - __sram_end = __sram_base + __sram_size; - __text_start = .; - .start : - { - *(.start); - } > SRAM - - . = ALIGN(8); - - .text : - { - *(.text) /* remaining code */ - *(.text.*) /* remaining code */ - *(.rodata) /* read-only data (constants) */ - *(.rodata*) - *(.glue_7) - *(.glue_7t) - *(.gnu.linkonce.t*) - - /* section information for finsh shell */ - . = ALIGN(8); - __fsymtab_start = .; - KEEP(*(FSymTab)) - __fsymtab_end = .; - . = ALIGN(8); - __vsymtab_start = .; - KEEP(*(VSymTab)) - __vsymtab_end = .; - . = ALIGN(8); - - /* section information for initial. */ - . = ALIGN(8); - __rt_init_start = .; - KEEP(*(SORT(.rti_fn*))) - __rt_init_end = .; - . = ALIGN(8); - - __rt_utest_tc_tab_start = .; - KEEP(*(UtestTcTab)) - __rt_utest_tc_tab_end = .; - - . = ALIGN(8); - _etext = .; - } > SRAM - - .eh_frame_hdr : - { - *(.eh_frame_hdr) - *(.eh_frame_entry) - } > SRAM - .eh_frame : ONLY_IF_RO { KEEP (*(.eh_frame)) } > SRAM - - . = ALIGN(8); - __text_end = .; - __text_size = __text_end - __text_start; - - .data : - { - *(.data) - *(.data.*) - - *(.data1) - *(.data1.*) - - . = ALIGN(8); - PROVIDE( __global_pointer$ = . + 0x800 ); - - *(.sdata) - *(.sdata.*) - } > SRAM - - . = ALIGN(8); - .ctors : - { - PROVIDE(__ctors_start__ = .); - KEEP(*(SORT(.init_array.*))) - KEEP(*(.init_array)) - PROVIDE(__ctors_end__ = .); - } > SRAM - - .dtors : - { - PROVIDE(__dtors_start__ = .); - KEEP(*(SORT(.fini_array.*))) - KEEP(*(.fini_array)) - PROVIDE(__dtors_end__ = .); - } > SRAM - - /* stack for dual core */ - .stack : - { - . = ALIGN(64); - __stack_start__ = .; - - . += __STACKSIZE__; - __stack_cpu0 = .; - - . += __STACKSIZE__; - __stack_cpu1 = .; - } > SRAM - - . = ALIGN(8); - - .osdebug : - { - _osdebug_start = .; - . += 87K; - _osdebug_end = .; - } > SRAM - - . = ALIGN(8); - - .sbss : - { - __bss_start = .; - *(.sbss) - *(.sbss.*) - *(.dynsbss) - *(.scommon) - } > SRAM - - .bss : - { - *(.bss) - *(.bss.*) - *(.dynbss) - *(COMMON) - __bss_end = .; - } > SRAM - - _end = .; - - /* 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) } - /* DWARF debug sections. - * Symbols in the DWARF debugging sections are relative to the beginning - * of the section so we begin them at 0. */ - /* DWARF 1 */ - .debug 0 : { *(.debug) } - .line 0 : { *(.line) } - /* GNU DWARF 1 extensions */ - .debug_srcinfo 0 : { *(.debug_srcinfo) } - .debug_sfnames 0 : { *(.debug_sfnames) } - /* DWARF 1.1 and DWARF 2 */ - .debug_aranges 0 : { *(.debug_aranges) } - .debug_pubnames 0 : { *(.debug_pubnames) } - /* DWARF 2 */ - .debug_info 0 : { *(.debug_info .gnu.linkonce.wi.*) } - .debug_abbrev 0 : { *(.debug_abbrev) } - .debug_line 0 : { *(.debug_line) } - .debug_frame 0 : { *(.debug_frame) } - .debug_str 0 : { *(.debug_str) } - .debug_loc 0 : { *(.debug_loc) } - .debug_macinfo 0 : { *(.debug_macinfo) } - /* SGI/MIPS DWARF 2 extensions */ - .debug_weaknames 0 : { *(.debug_weaknames) } - .debug_funcnames 0 : { *(.debug_funcnames) } - .debug_typenames 0 : { *(.debug_typenames) } - .debug_varnames 0 : { *(.debug_varnames) } -} diff --git a/bsp/cvitek/cv18xx_risc-v/link_stacksize.lds b/bsp/cvitek/cv18xx_risc-v/link_stacksize.lds deleted file mode 100755 index 38d573dcad8..00000000000 --- a/bsp/cvitek/cv18xx_risc-v/link_stacksize.lds +++ /dev/null @@ -1 +0,0 @@ -__STACKSIZE__ = 8192; diff --git a/bsp/cvitek/cv18xx_risc-v/rtconfig.h b/bsp/cvitek/cv18xx_risc-v/rtconfig.h index 41d38bea7a8..de3eba2aa2f 100755 --- a/bsp/cvitek/cv18xx_risc-v/rtconfig.h +++ b/bsp/cvitek/cv18xx_risc-v/rtconfig.h @@ -109,7 +109,6 @@ /* Memory Management */ -#define RT_PAGE_MAX_ORDER 11 #define RT_USING_SLAB #define RT_USING_SLAB_AS_HEAP #define RT_USING_HEAP @@ -119,14 +118,14 @@ #define RT_USING_CONSOLE #define RT_CONSOLEBUF_SIZE 256 #define RT_CONSOLE_DEVICE_NAME "uart0" -#define RT_VER_NUM 0x50200 +#define RT_VER_NUM 0x50201 #define RT_USING_STDC_ATOMIC #define RT_BACKTRACE_LEVEL_MAX_NR 32 /* end of RT-Thread Kernel */ #define ARCH_CPU_64BIT #define RT_USING_CACHE #define ARCH_MM_MMU -#define KERNEL_VADDR_START 0xFFFFFFC000200000 +#define KERNEL_VADDR_START 0xffffffc000000000 #define ARCH_RISCV #define ARCH_RISCV_FPU #define ARCH_RISCV_FPU_D @@ -348,8 +347,17 @@ #define RT_USING_ADT_HASHMAP #define RT_USING_ADT_REF /* end of Utilities */ + +/* Memory management */ + +#define RT_PAGE_AFFINITY_BLOCK_SIZE 0x1000 +#define RT_PAGE_MAX_ORDER 11 + +/* Debugging */ + +/* end of Debugging */ +/* end of Memory management */ #define RT_USING_LWP -#define LWP_DEBUG #define LWP_USING_RUNTIME #define RT_LWP_MAX_NR 30 #define LWP_TASK_STACK_SIZE 16384 @@ -360,10 +368,6 @@ #define LWP_USING_TERMINAL #define LWP_PTY_MAX_PARIS_LIMIT 64 -/* Memory management */ - -/* end of Memory management */ - /* Using USB legacy version */ /* end of Using USB legacy version */ diff --git a/bsp/cvitek/cv18xx_risc-v/rtconfig.py b/bsp/cvitek/cv18xx_risc-v/rtconfig.py index 91ccaa795b2..18a281e125e 100755 --- a/bsp/cvitek/cv18xx_risc-v/rtconfig.py +++ b/bsp/cvitek/cv18xx_risc-v/rtconfig.py @@ -43,7 +43,7 @@ DEVICE = ' -mcmodel=medany -march=rv64imafdc -mabi=lp64' CFLAGS = DEVICE + ' -Wno-cpp -fvar-tracking -ffreestanding -fno-common -ffunction-sections -fdata-sections -fstrict-volatile-bitfields -D_POSIX_SOURCE ' AFLAGS = ' -c' + DEVICE + ' -x assembler-with-cpp -D__ASSEMBLY__' - LFLAGS = DEVICE + ' -nostartfiles -Wl,--gc-sections,-Map=rtthread.map,-cref,-u,_start -T link.lds' + ' -lsupc++ -lgcc -static' + LFLAGS = DEVICE + ' -nostartfiles -Wl,--gc-sections,-Map=rtthread.map,-cref,-u,_start -T link.lds.generated' + ' -lsupc++ -lgcc -static' CPATH = '' LPATH = ''