Skip to content

Commit 81c7bf8

Browse files
authored
Merge pull request #4711 from bigmagic123/rv64
Rv64 qemu virt Support M-Mode
2 parents 126af8e + d6f5fbc commit 81c7bf8

30 files changed

+1326
-495
lines changed

bsp/qemu-riscv-virt64/.config

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -213,6 +213,7 @@ CONFIG_RT_LIBC_FIXED_TIMEZONE=8
213213
# CONFIG_RT_USING_RYM is not set
214214
# CONFIG_RT_USING_ULOG is not set
215215
# CONFIG_RT_USING_UTEST is not set
216+
# CONFIG_RT_USING_RT_LINK is not set
216217

217218
#
218219
# RT-Thread Utestcases
@@ -335,6 +336,7 @@ CONFIG_RT_LIBC_FIXED_TIMEZONE=8
335336
# CONFIG_PKG_USING_HELIX is not set
336337
# CONFIG_PKG_USING_AZUREGUIX is not set
337338
# CONFIG_PKG_USING_TOUCHGFX2RTT is not set
339+
# CONFIG_PKG_USING_NUEMWIN is not set
338340

339341
#
340342
# tools packages
@@ -492,6 +494,7 @@ CONFIG_RT_LIBC_FIXED_TIMEZONE=8
492494
# CONFIG_PKG_USING_LIBNFC is not set
493495
# CONFIG_PKG_USING_MFOC is not set
494496
# CONFIG_PKG_USING_TMC51XX is not set
497+
# CONFIG_PKG_USING_TCA9534 is not set
495498

496499
#
497500
# AI packages
@@ -519,6 +522,7 @@ CONFIG_RT_LIBC_FIXED_TIMEZONE=8
519522
# CONFIG_PKG_USING_FLEXIBLE_BUTTON is not set
520523
# CONFIG_PKG_USING_CANFESTIVAL is not set
521524
# CONFIG_PKG_USING_ZLIB is not set
525+
# CONFIG_PKG_USING_MINIZIP is not set
522526
# CONFIG_PKG_USING_DSTR is not set
523527
# CONFIG_PKG_USING_TINYFRAME is not set
524528
# CONFIG_PKG_USING_KENDRYTE_DEMO is not set
@@ -558,7 +562,8 @@ CONFIG_BOARD_virt=y
558562
CONFIG_RT_USING_USERSPACE=y
559563

560564
#
561-
# General Purpose UARTs
565+
# RISCV qemu virt64 configs
562566
#
563567
# CONFIG_BSP_USING_UART1 is not set
568+
# CONFIG_RISCV_S_MODE is not set
564569
CONFIG___STACKSIZE__=16384

bsp/qemu-riscv-virt64/README.md

Lines changed: 136 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,136 @@
1+
# QEMU/RISCV64 VIRT板级支持包说明
2+
3+
## 1. 简介
4+
5+
RISC-V是一种开放和免费的指令集体系结构(ISA)。本工程是在QEMU的RISCV64 VIRT版本上进行的一份移植。
6+
7+
## 2. 编译说明
8+
9+
首先可以下载交叉编译工具链,建议采用sifive的工具链进行编译。
10+
```
11+
https://www.sifive.com/software
12+
```
13+
选择对应的平台即可。
14+
15+
这里推荐在Ubuntu上进行开发工作。
16+
17+
解压工具链到指定的目录。
18+
19+
```
20+
export RTT_EXEC_PATH=~/gcc/bin
21+
```
22+
23+
进入到`rt-thread/bsp/qemu-riscv-virt64`目录进行输入
24+
```
25+
scons
26+
```
27+
可以看到正常生成`rtthread.elf``rtthread.bin`文件。
28+
29+
## 3. 执行
30+
31+
本工程提供了riscv64的两种可配置运行模式,默认运行在M-Mode下。
32+
33+
*M-Mode*
34+
35+
首先安装`qemu-system-riscv64`
36+
37+
```
38+
sudo apt install qemu-system-misc
39+
```
40+
直接输入
41+
```
42+
./qemu-nographic.sh
43+
```
44+
可以看到程序运行
45+
46+
```
47+
heap: [0x80035804 - 0x86435804]
48+
49+
\ | /
50+
- RT - Thread Operating System
51+
/ | \ 4.0.4 build May 21 2021
52+
2006 - 2021 Copyright by rt-thread team
53+
Hello RISC-V!
54+
msh />
55+
```
56+
57+
*S-Mode*
58+
59+
如果运行在S-Mode下,那么需要通过menuconfig选择配置
60+
61+
```
62+
scons --menuconfig
63+
```
64+
选择如下:
65+
```
66+
RISCV qemu virt64 configs --->
67+
[*] RT-Thread run in riscv smode
68+
```
69+
保存后,重新`scons`编译即可。
70+
71+
要让rt-thread运行在S-Mode,首先需要启动opensbi,然后通过opensbi启动rt-thread。
72+
73+
自行编译的qemu或者下载的高版本的qemu内置opensbi,执行`./qemu-nographic-smode.sh`即可正常运行。
74+
75+
通过`sudo apt install qemu-system-misc`安装的qemu版本较低,可自行编译opensbi。
76+
77+
```
78+
git clone [email protected]:riscv/opensbi.git
79+
cd opensbi
80+
make PLATFORM=generic CROSS_COMPILE=~/gcc/bin/riscv64-unknown-elf-
81+
```
82+
最后生成的`/build/platform/generic/firmware/fw_jump.elf`则是需要的文件。
83+
84+
输入以下的命令即可运行:
85+
86+
```
87+
qemu-system-riscv64 -nographic -machine virt -m 256M -kernel rtthread.bin -bios ~/opensbi/build/platform/generic/firmware/fw_jump.elf
88+
```
89+
可以看到如下的结果
90+
```
91+
OpenSBI v0.9
92+
____ _____ ____ _____
93+
/ __ \ / ____| _ \_ _|
94+
| | | |_ __ ___ _ __ | (___ | |_) || |
95+
| | | | '_ \ / _ \ '_ \ \___ \| _ < | |
96+
| |__| | |_) | __/ | | |____) | |_) || |_
97+
\____/| .__/ \___|_| |_|_____/|____/_____|
98+
| |
99+
|_|
100+
101+
Platform Name : riscv-virtio,qemu
102+
Platform Features : timer,mfdeleg
103+
.
104+
.
105+
.
106+
Boot HART ISA : rv64imafdcsu
107+
Boot HART Features : scounteren,mcounteren
108+
Boot HART PMP Count : 16
109+
Boot HART PMP Granularity : 4
110+
Boot HART PMP Address Bits: 54
111+
Boot HART MHPM Count : 0
112+
Boot HART MHPM Count : 0
113+
Boot HART MIDELEG : 0x0000000000000222
114+
Boot HART MEDELEG : 0x000000000000b109
115+
heap: [0x80235a58 - 0x86635a58]
116+
117+
\ | /
118+
- RT - Thread Operating System
119+
/ | \ 4.0.4 build May 21 2021
120+
2006 - 2021 Copyright by rt-thread team
121+
Hello RISC-V!
122+
msh />
123+
```
124+
## 4. 支持情况
125+
126+
| 驱动 | 支持情况 | 备注 |
127+
| ------ | ---- | :------: |
128+
| UART | 支持 | UART0 |
129+
| PLIC | 支持 | - |
130+
| CLIC | 支持 | - |
131+
132+
## 5. 联系人信息
133+
134+
维护人:[bernard][1]
135+
136+
[1]: https://github.com/BernardXiong

bsp/qemu-riscv-virt64/SConstruct

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,11 @@ stack_size = 4096
3131

3232
stack_lds = open('link_stacksize.lds', 'w')
3333
if GetDepend('__STACKSIZE__'): stack_size = GetDepend('__STACKSIZE__')
34-
stack_lds.write('__STACKSIZE__ = %d;' % stack_size)
34+
stack_lds.write('__STACKSIZE__ = %d;\r\n' % stack_size)
35+
if GetDepend('RISCV_S_MODE'): start_addr = int(0x80200000)
36+
else: start_addr = int(0x80000000)
37+
stack_lds.write('__START_ADDR__ = 0x%x;' % start_addr)
38+
3539
stack_lds.close()
3640

3741
# make a building
Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
11
/*
2-
* Copyright (c) 2006-2018, RT-Thread Development Team
2+
* Copyright (c) 2006-2021, RT-Thread Development Team
33
*
44
* SPDX-License-Identifier: Apache-2.0
55
*
66
* Change Logs:
77
* Date Author Notes
8+
* 2021-05-20 bigmagic first version
89
*/
910

1011
#include <rtthread.h>
@@ -14,9 +15,7 @@
1415

1516
int main(void)
1617
{
17-
void rt_hw_uart_start_rx_thread();
18-
rt_hw_uart_start_rx_thread();
19-
printf("Hello RISC-V\n");
18+
printf("Hello RISC-V!\n");
2019

2120
return 0;
2221
}

bsp/qemu-riscv-virt64/driver/Kconfig

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11

22

3-
menu "General Purpose UARTs"
3+
menu "RISCV qemu virt64 configs"
44

55
menuconfig BSP_USING_UART1
66
bool "Enable UART1"
@@ -14,5 +14,8 @@ menuconfig BSP_USING_UART1
1414
default 21
1515
endif
1616

17-
endmenu
17+
config RISCV_S_MODE
18+
bool "RT-Thread run in riscv smode"
19+
default y
1820

21+
endmenu

0 commit comments

Comments
 (0)