Skip to content

Commit 8ed4ae1

Browse files
flyingcysRbb666
authored andcommitted
support milkv-duo rt-smart
1. switches memory management to SLA 2. use ioremap modification driver Signed-off-by: flyingcys [email protected]
1 parent c2545cd commit 8ed4ae1

29 files changed

+610
-383
lines changed

Diff for: bsp/cvitek/README.md

+18-2
Original file line numberDiff line numberDiff line change
@@ -44,12 +44,14 @@ Duo 家族开发板采用 CV18xx 系列芯片。芯片的工作模式总结如
4444

4545
| BSP 名称 | 大小核 | 芯片架构 | 默认串口控制台 | 备注 |
4646
| ------------- | ------- |---------------- | -------------- | -------- |
47-
| cv18xx_risc-v | 大核 | RISC-V C906 | uart0 | 支持 MMU,支持 RT-Thread 标准版 和 RT-SMART 模式,默认运行 RT-Thread 标准版本 |
47+
| cv18xx_risc-v | 大核 | RISC-V C906 | uart0 | 支持 MMU,支持 RT-Thread 标准版 和 RT-SMART 模式,默认运行 RT-SMART 版本 |
4848
| c906-little | 小核 | RISC-V C906 | uart1 | 无 MMU,运行 RT-Thread 标准版 |
4949
| cv18xx_aarch64| 大核 | ARM Cortex A53 | uart0 | 支持 MMU, 支持 RT-Thread 标准版 和 RT-SMART 版,默认运行 RT-Thread 标准版本 |
5050

5151
由于开发板默认运行的大核为 "cv18xx_risc-v", 所以本文将主要介绍 "cv18xx_risc-v" 和 "c906-little" 的构建和使用。有关 "cv18xx_aarch64" 的介绍请参考 [这里](./cv18xx_aarch64/README.md)
5252

53+
> 注:不同开发板 uart 输出管脚不同,默认配置可能导致串口无法正常显示,请根据开发板 uart 通过 `scons --menuconfig` 配置对应 uart 的输出管脚。
54+
5355
## 驱动支持列表
5456

5557
| 驱动 | 支持情况 | 备注 |
@@ -113,7 +115,21 @@ Board Type (milkv-duo) --->
113115
( ) milkv-duos
114116
```
115117

116-
2. 编译
118+
2. 可按照以下方式开启 RT-Smart
119+
120+
```shell
121+
RT-Thread Kernel --->
122+
[*] Enable RT-Thread Smart (microkernel on kernel/userland)
123+
```
124+
125+
并配置内核虚拟起始地址 `0xFFFFFFC000200000`
126+
```shell
127+
RT-Thread Kernel --->
128+
(0xFFFFFFC000200000) The virtural address of kernel start
129+
RT-Thread Components --->
130+
```
131+
132+
3. 编译
117133
```shell
118134
$ scons
119135
```

Diff for: bsp/cvitek/cv18xx_risc-v/.config

+88-17
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
#
55
CONFIG_RT_NAME_MAX=8
66
# CONFIG_RT_USING_ARCH_DATA_TYPE is not set
7-
# CONFIG_RT_USING_SMART is not set
7+
CONFIG_RT_USING_SMART=y
88
# CONFIG_RT_USING_NANO is not set
99
# CONFIG_RT_USING_AMP is not set
1010
# CONFIG_RT_USING_SMP is not set
@@ -17,13 +17,13 @@ CONFIG_RT_THREAD_PRIORITY_MAX=32
1717
CONFIG_RT_TICK_PER_SECOND=1000
1818
CONFIG_RT_USING_HOOK=y
1919
CONFIG_RT_HOOK_USING_FUNC_PTR=y
20-
CONFIG_RT_USING_HOOKLIST=y
20+
# CONFIG_RT_USING_HOOKLIST is not set
2121
CONFIG_RT_USING_IDLE_HOOK=y
2222
CONFIG_RT_IDLE_HOOK_LIST_SIZE=4
23-
CONFIG_IDLE_THREAD_STACK_SIZE=8192
23+
CONFIG_IDLE_THREAD_STACK_SIZE=16384
2424
CONFIG_RT_USING_TIMER_SOFT=y
2525
CONFIG_RT_TIMER_THREAD_PRIO=4
26-
CONFIG_RT_TIMER_THREAD_STACK_SIZE=8192
26+
CONFIG_RT_TIMER_THREAD_STACK_SIZE=16384
2727
# CONFIG_RT_USING_TIMER_ALL_SOFT is not set
2828
CONFIG_RT_USING_CPU_USAGE_TRACER=y
2929

@@ -65,13 +65,13 @@ CONFIG_RT_USING_MESSAGEQUEUE=y
6565
# Memory Management
6666
#
6767
CONFIG_RT_PAGE_MAX_ORDER=11
68-
CONFIG_RT_USING_MEMPOOL=y
69-
CONFIG_RT_USING_SMALL_MEM=y
70-
# CONFIG_RT_USING_SLAB is not set
68+
# CONFIG_RT_USING_MEMPOOL is not set
69+
# CONFIG_RT_USING_SMALL_MEM is not set
70+
CONFIG_RT_USING_SLAB=y
7171
# CONFIG_RT_USING_MEMHEAP is not set
72-
CONFIG_RT_USING_SMALL_MEM_AS_HEAP=y
72+
# CONFIG_RT_USING_SMALL_MEM_AS_HEAP is not set
7373
# CONFIG_RT_USING_MEMHEAP_AS_HEAP is not set
74-
# CONFIG_RT_USING_SLAB_AS_HEAP is not set
74+
CONFIG_RT_USING_SLAB_AS_HEAP=y
7575
# CONFIG_RT_USING_USERHEAP is not set
7676
# CONFIG_RT_USING_NOHEAP is not set
7777
# CONFIG_RT_USING_MEMTRACE is not set
@@ -83,7 +83,6 @@ CONFIG_RT_USING_DEVICE=y
8383
CONFIG_RT_USING_DEVICE_OPS=y
8484
# CONFIG_RT_USING_INTERRUPT_INFO is not set
8585
# CONFIG_RT_USING_THREADSAFE_PRINTF is not set
86-
CONFIG_RT_USING_SCHED_THREAD_CTX=y
8786
CONFIG_RT_USING_CONSOLE=y
8887
CONFIG_RT_CONSOLEBUF_SIZE=256
8988
CONFIG_RT_CONSOLE_DEVICE_NAME="uart0"
@@ -95,11 +94,14 @@ CONFIG_RT_BACKTRACE_LEVEL_MAX_NR=32
9594
CONFIG_ARCH_CPU_64BIT=y
9695
CONFIG_RT_USING_CACHE=y
9796
CONFIG_ARCH_MM_MMU=y
97+
CONFIG_KERNEL_VADDR_START=0xFFFFFFC000200000
9898
CONFIG_ARCH_RISCV=y
9999
CONFIG_ARCH_RISCV_FPU=y
100100
CONFIG_ARCH_RISCV_FPU_D=y
101101
CONFIG_ARCH_RISCV64=y
102+
CONFIG_ARCH_USING_NEW_CTX_SWITCH=y
102103
CONFIG_ARCH_USING_RISCV_COMMON64=y
104+
CONFIG_ARCH_REMAP_KERNEL=y
103105

104106
#
105107
# RT-Thread Components
@@ -132,8 +134,7 @@ CONFIG_FINSH_USING_OPTION_COMPLETION=y
132134
CONFIG_RT_USING_DFS=y
133135
CONFIG_DFS_USING_POSIX=y
134136
CONFIG_DFS_USING_WORKDIR=y
135-
CONFIG_DFS_FD_MAX=16
136-
# CONFIG_RT_USING_DFS_V1 is not set
137+
CONFIG_DFS_FD_MAX=128
137138
CONFIG_RT_USING_DFS_V2=y
138139
CONFIG_RT_USING_DFS_ELMFAT=y
139140

@@ -164,9 +165,22 @@ CONFIG_RT_DFS_ELM_MUTEX_TIMEOUT=3000
164165
CONFIG_RT_USING_DFS_DEVFS=y
165166
CONFIG_RT_USING_DFS_ROMFS=y
166167
# CONFIG_RT_USING_DFS_ROMFS_USER_ROOT is not set
168+
CONFIG_RT_USING_DFS_PTYFS=y
167169
# CONFIG_RT_USING_DFS_CROMFS is not set
168-
# CONFIG_RT_USING_DFS_TMPFS is not set
170+
CONFIG_RT_USING_DFS_TMPFS=y
169171
# CONFIG_RT_USING_DFS_MQUEUE is not set
172+
CONFIG_RT_USING_PAGECACHE=y
173+
174+
#
175+
# page cache config
176+
#
177+
CONFIG_RT_PAGECACHE_COUNT=4096
178+
CONFIG_RT_PAGECACHE_ASPACE_COUNT=1024
179+
CONFIG_RT_PAGECACHE_PRELOAD=4
180+
CONFIG_RT_PAGECACHE_HASH_NR=1024
181+
CONFIG_RT_PAGECACHE_GC_WORK_LEVEL=90
182+
CONFIG_RT_PAGECACHE_GC_STOP_LEVEL=70
183+
# end of page cache config
170184
# end of DFS: device virtual file system
171185

172186
# CONFIG_RT_USING_FAL is not set
@@ -214,7 +228,7 @@ CONFIG_RT_MMCSD_THREAD_PREORITY=22
214228
CONFIG_RT_MMCSD_MAX_PARTITION=16
215229
# CONFIG_RT_SDIO_DEBUG is not set
216230
# CONFIG_RT_USING_SPI is not set
217-
# CONFIG_RT_USING_WDT is not set
231+
CONFIG_RT_USING_WDT=y
218232
# CONFIG_RT_USING_AUDIO is not set
219233
# CONFIG_RT_USING_SENSOR is not set
220234
# CONFIG_RT_USING_TOUCH is not set
@@ -224,7 +238,7 @@ CONFIG_RT_MMCSD_MAX_PARTITION=16
224238
# CONFIG_RT_USING_VIRTIO is not set
225239
CONFIG_RT_USING_PIN=y
226240
CONFIG_RT_USING_KTIME=y
227-
# CONFIG_RT_USING_HWTIMER is not set
241+
CONFIG_RT_USING_HWTIMER=y
228242
# CONFIG_RT_USING_CHERRYUSB is not set
229243
# end of Device Drivers
230244

@@ -256,6 +270,9 @@ CONFIG_RT_USING_POSIX_STDIO=y
256270
CONFIG_RT_USING_POSIX_POLL=y
257271
CONFIG_RT_USING_POSIX_SELECT=y
258272
# CONFIG_RT_USING_POSIX_EVENTFD is not set
273+
CONFIG_RT_USING_POSIX_EPOLL=y
274+
CONFIG_RT_USING_POSIX_SIGNALFD=y
275+
CONFIG_RT_SIGNALFD_MAX_NUM=10
259276
# CONFIG_RT_USING_POSIX_TIMERFD is not set
260277
CONFIG_RT_USING_POSIX_SOCKET=y
261278
CONFIG_RT_USING_POSIX_TERMIOS=y
@@ -367,6 +384,7 @@ CONFIG_LWIP_NETIF_LOOPBACK=0
367384
# CONFIG_RT_LWIP_USING_HW_CHECKSUM is not set
368385
CONFIG_RT_LWIP_USING_PING=y
369386
# CONFIG_LWIP_USING_DHCPD is not set
387+
# CONFIG_RT_LWIP_ENABLE_USER_HOOKS is not set
370388
# CONFIG_RT_LWIP_DEBUG is not set
371389
# CONFIG_RT_USING_AT is not set
372390
# end of Network
@@ -395,6 +413,25 @@ CONFIG_RT_USING_ADT_REF=y
395413
# end of Utilities
396414

397415
# CONFIG_RT_USING_VBUS is not set
416+
CONFIG_RT_USING_LWP=y
417+
CONFIG_LWP_DEBUG=y
418+
# CONFIG_LWP_DEBUG_INIT is not set
419+
CONFIG_RT_LWP_MAX_NR=30
420+
CONFIG_LWP_TASK_STACK_SIZE=16384
421+
CONFIG_RT_CH_MSG_MAX_NR=1024
422+
CONFIG_LWP_TID_MAX_NR=64
423+
CONFIG_RT_LWP_SHM_MAX_NR=64
424+
CONFIG_RT_USING_LDSO=y
425+
# CONFIG_ELF_DEBUG_ENABLE is not set
426+
# CONFIG_ELF_LOAD_RANDOMIZE is not set
427+
CONFIG_LWP_USING_TERMINAL=y
428+
CONFIG_LWP_PTY_MAX_PARIS_LIMIT=64
429+
430+
#
431+
# Memory management
432+
#
433+
# CONFIG_RT_USING_MEMBLOCK is not set
434+
# end of Memory management
398435

399436
#
400437
# Using USB legacy version
@@ -431,6 +468,7 @@ CONFIG_RT_USING_ADT_REF=y
431468
# CONFIG_PKG_USING_WEBTERMINAL is not set
432469
# CONFIG_PKG_USING_FREEMODBUS is not set
433470
# CONFIG_PKG_USING_NANOPB is not set
471+
# CONFIG_PKG_USING_WIFI_HOST_DRIVER is not set
434472

435473
#
436474
# Wi-Fi
@@ -535,6 +573,7 @@ CONFIG_RT_USING_ADT_REF=y
535573
# CONFIG_PKG_USING_ZEPHYR_POLLING is not set
536574
# CONFIG_PKG_USING_MATTER_ADAPTATION_LAYER is not set
537575
# CONFIG_PKG_USING_LHC_MODBUS is not set
576+
# CONFIG_PKG_USING_QMODBUS is not set
538577
# end of IoT - internet of things
539578

540579
#
@@ -562,6 +601,7 @@ CONFIG_RT_USING_ADT_REF=y
562601
# CONFIG_PKG_USING_JSMN is not set
563602
# CONFIG_PKG_USING_AGILE_JSMN is not set
564603
# CONFIG_PKG_USING_PARSON is not set
604+
# CONFIG_PKG_USING_RYAN_JSON is not set
565605
# end of JSON: JavaScript Object Notation, a lightweight data-interchange format
566606

567607
#
@@ -680,6 +720,8 @@ CONFIG_RT_USING_ADT_REF=y
680720
# CONFIG_PKG_USING_RT_VSNPRINTF_FULL is not set
681721
# end of enhanced kernel services
682722

723+
# CONFIG_PKG_USING_AUNITY is not set
724+
683725
#
684726
# acceleration: Assembly language or algorithmic acceleration packages
685727
#
@@ -770,11 +812,29 @@ CONFIG_RT_USING_ADT_REF=y
770812
#
771813
# STM32 HAL & SDK Drivers
772814
#
773-
# CONFIG_PKG_USING_STM32L4XX_HAL_DRIVER is not set
815+
# CONFIG_PKG_USING_STM32F4_HAL_DRIVER is not set
816+
# CONFIG_PKG_USING_STM32F4_CMSIS_DRIVER is not set
817+
# CONFIG_PKG_USING_STM32L4_HAL_DRIVER is not set
818+
# CONFIG_PKG_USING_STM32L4_CMSIS_DRIVER is not set
774819
# CONFIG_PKG_USING_STM32WB55_SDK is not set
775820
# CONFIG_PKG_USING_STM32_SDIO is not set
776821
# end of STM32 HAL & SDK Drivers
777822

823+
#
824+
# Infineon HAL Packages
825+
#
826+
# CONFIG_PKG_USING_INFINEON_CAT1CM0P is not set
827+
# CONFIG_PKG_USING_INFINEON_CMSIS is not set
828+
# CONFIG_PKG_USING_INFINEON_CORE_LIB is not set
829+
# CONFIG_PKG_USING_INFINEON_MTB_HAL_CAT1 is not set
830+
# CONFIG_PKG_USING_INFINEON_MTB_PDL_CAT1 is not set
831+
# CONFIG_PKG_USING_INFINEON_RETARGET_IO is not set
832+
# CONFIG_PKG_USING_INFINEON_CAPSENSE is not set
833+
# CONFIG_PKG_USING_INFINEON_CSDIDAC is not set
834+
# CONFIG_PKG_USING_INFINEON_SERIAL_FLASH is not set
835+
# CONFIG_PKG_USING_INFINEON_USBDEV is not set
836+
# end of Infineon HAL Packages
837+
778838
# CONFIG_PKG_USING_BLUETRUM_SDK is not set
779839
# CONFIG_PKG_USING_EMBARC_BSP is not set
780840
# CONFIG_PKG_USING_ESP_IDF is not set
@@ -948,6 +1008,7 @@ CONFIG_RT_USING_ADT_REF=y
9481008
# CONFIG_PKG_USING_SYSTEM_RUN_LED is not set
9491009
# CONFIG_PKG_USING_BT_MX01 is not set
9501010
# CONFIG_PKG_USING_RGPOWER is not set
1011+
# CONFIG_PKG_USING_BT_MX02 is not set
9511012
# CONFIG_PKG_USING_SPI_TOOLS is not set
9521013
# end of peripheral libraries and drivers
9531014

@@ -969,6 +1030,7 @@ CONFIG_RT_USING_ADT_REF=y
9691030
#
9701031
# Signal Processing and Control Algorithm Packages
9711032
#
1033+
# CONFIG_PKG_USING_APID is not set
9721034
# CONFIG_PKG_USING_FIRE_PID_CURVE is not set
9731035
# CONFIG_PKG_USING_QPID is not set
9741036
# CONFIG_PKG_USING_UKAL is not set
@@ -1020,7 +1082,13 @@ CONFIG_RT_USING_ADT_REF=y
10201082
# CONFIG_PKG_USING_MULTIBUTTON is not set
10211083
# CONFIG_PKG_USING_FLEXIBLE_BUTTON is not set
10221084
# CONFIG_PKG_USING_CANFESTIVAL is not set
1023-
# CONFIG_PKG_USING_ZLIB is not set
1085+
CONFIG_PKG_USING_ZLIB=y
1086+
CONFIG_PKG_ZLIB_PATH="/packages/misc/zlib"
1087+
# CONFIG_ZLIB_USING_SAMPLE is not set
1088+
# CONFIG_PKG_USING_ZLIB_V100 is not set
1089+
# CONFIG_PKG_USING_ZLIB_V123 is not set
1090+
CONFIG_PKG_USING_ZLIB_LATEST_VERSION=y
1091+
CONFIG_PKG_ZLIB_VER="latest"
10241092
# CONFIG_PKG_USING_MINIZIP is not set
10251093
# CONFIG_PKG_USING_HEATSHRINK is not set
10261094
# CONFIG_PKG_USING_DSTR is not set
@@ -1056,6 +1124,7 @@ CONFIG_RT_USING_ADT_REF=y
10561124
# CONFIG_PKG_USING_ARDUINO_MSGQ_C_CPP_DEMO is not set
10571125
# CONFIG_PKG_USING_ARDUINO_SKETCH_LOADER_DEMO is not set
10581126
# CONFIG_PKG_USING_ARDUINO_ULTRASOUND_RADAR is not set
1127+
# CONFIG_PKG_USING_ARDUINO_RTDUINO_SENSORFUSION_SHIELD is not set
10591128
# CONFIG_PKG_USING_ARDUINO_NINEINONE_SENSOR_SHIELD is not set
10601129
# CONFIG_PKG_USING_ARDUINO_SENSOR_KIT is not set
10611130
# CONFIG_PKG_USING_ARDUINO_MATLAB_SUPPORT is not set
@@ -1297,6 +1366,7 @@ CONFIG_BSP_UART_IRQ_BASE=44
12971366
# CONFIG_BSP_USING_ADC is not set
12981367
# CONFIG_BSP_USING_SPI is not set
12991368
# CONFIG_BSP_USING_WDT is not set
1369+
# CONFIG_BSP_USING_TIMER is not set
13001370
# CONFIG_BSP_USING_PWM is not set
13011371
# CONFIG_BSP_USING_RTC is not set
13021372
# CONFIG_BSP_USING_SDH is not set
@@ -1314,5 +1384,6 @@ CONFIG_SOC_TYPE_SG2002=y
13141384
# CONFIG_BOARD_TYPE_MILKV_DUO_SPINOR is not set
13151385
CONFIG_BOARD_TYPE_MILKV_DUO256M=y
13161386
# CONFIG_BOARD_TYPE_MILKV_DUO256M_SPINOR is not set
1387+
# CONFIG_BOARD_TYPE_MILKV_DUOS is not set
13171388
CONFIG_BSP_ROOTFS_TYPE_ROMFS=y
13181389
# CONFIG_BSP_ROOTFS_TYPE_CROMFS is not set

Diff for: bsp/cvitek/cv18xx_risc-v/board/board.c

+1-1
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,6 @@ void rt_hw_board_init(void)
108108
#endif
109109

110110
#ifdef RT_USING_HEAP
111-
rt_kprintf("heap: [0x%08x - 0x%08x]\n", (rt_ubase_t)RT_HW_HEAP_BEGIN, (rt_ubase_t)RT_HW_HEAP_END);
111+
rt_kprintf("heap: [0x%p - 0x%p]\n", (rt_ubase_t)RT_HW_HEAP_BEGIN, (rt_ubase_t)RT_HW_HEAP_END);
112112
#endif /* RT_USING_HEAP */
113113
}

Diff for: bsp/cvitek/cv18xx_risc-v/board/board.h

+6-6
Original file line numberDiff line numberDiff line change
@@ -15,17 +15,17 @@
1515
#include "drv_uart.h"
1616
#include "tick.h"
1717

18+
extern unsigned int __sram_end;
19+
#define RAM_END (rt_size_t)((void *)&__sram_end)
20+
1821
extern unsigned int __bss_start;
1922
extern unsigned int __bss_end;
2023

21-
#ifndef RT_USING_SMART
22-
#define KERNEL_VADDR_START 0x80200000
23-
#endif
24-
2524
#define RT_HW_HEAP_BEGIN ((void *)&__bss_end)
26-
#define RT_HW_HEAP_END ((void *)(KERNEL_VADDR_START + 16 * 1024 * 1024))
25+
#define RT_HW_HEAP_END ((void *)((rt_size_t)RT_HW_HEAP_BEGIN + 8 * 1024 * 1024))
26+
2727
#define RT_HW_PAGE_START RT_HW_HEAP_END
28-
#define RT_HW_PAGE_END ((void *)(KERNEL_VADDR_START + 32 * 1024 * 1024))
28+
#define RT_HW_PAGE_END ((void *)(RAM_END))
2929

3030
void rt_hw_board_init(void);
3131

Diff for: bsp/cvitek/cv18xx_risc-v/link.lds

+5-2
Original file line numberDiff line numberDiff line change
@@ -21,15 +21,18 @@ OUTPUT_ARCH( "riscv" )
2121

2222
MEMORY
2323
{
24-
SRAM : ORIGIN = 0x80200000, LENGTH = 32M
24+
SRAM(wx): ORIGIN = 0x80200000, LENGTH = 32M
2525
}
2626

2727
ENTRY(_start)
2828
SECTIONS
2929
{
30-
. = 0x80200000 ;
30+
. = ORIGIN(SRAM) ;
3131

3232
/* __STACKSIZE__ = 4096; */
33+
__sram_base = ORIGIN(SRAM);
34+
__sram_size = LENGTH(SRAM);
35+
__sram_end = __sram_base + __sram_size;
3336
__text_start = .;
3437
.start :
3538
{

Diff for: bsp/cvitek/cv18xx_risc-v/link_smart.lds

+5-2
Original file line numberDiff line numberDiff line change
@@ -21,15 +21,18 @@ OUTPUT_ARCH( "riscv" )
2121

2222
MEMORY
2323
{
24-
SRAM : ORIGIN = 0xFFFFFFC000200000, LENGTH = 64M
24+
SRAM(wx): ORIGIN = 0xFFFFFFC000200000, LENGTH = 64M
2525
}
2626

2727
ENTRY(_start)
2828
SECTIONS
2929
{
30-
. = 0xFFFFFFC000200000 ;
30+
. = ORIGIN(SRAM) ;
3131

3232
/* __STACKSIZE__ = 4096; */
33+
__sram_base = ORIGIN(SRAM);
34+
__sram_size = LENGTH(SRAM);
35+
__sram_end = __sram_base + __sram_size;
3336
__text_start = .;
3437
.start :
3538
{

0 commit comments

Comments
 (0)