rt-thread/bsp/qemu-virt64-riscv
Yaochenger de4f237482
[atomic]添加arm与risc-v下的常用原子操作函数 (#7053)
* Update Kconfig
* Update trap_gcc.S
* Update bsp/hifive1/drivers/SConscript

Co-authored-by: Man, Jianting (Meco) <920369182@qq.com>
* Update SConscript
* [atomic]提交一份arm与risc-v架构下的常用原子操作函数
* 修改变量类型
* 更新rtatomic.h与atomic_port.c
* 更新rt-thread\libcpu\arm\common\atomic_port.c
* 更新include/rtatomic.h与libcpu/arm/common/SConscript
* 更新include/rtatomic.h
* 修正格式与Kconfig
* 修正格式与文件结构

* 规范文件格式与文件重命名
* 添加测试用例与CI
* 添加函数声明
* 修改virt64/SConscript 添加atomic_riscv.c
  * 1.规范代码风格
  * 2.添加RISC-V64原子指令支持 解决在RV64下编译器将32-bit运算结果扩展为64-bit 导致判断错误
* 添加C11标准库原子操作测试

---------

Co-authored-by: Man, Jianting (Meco) <920369182@qq.com>
2023-03-23 20:06:50 +08:00
..
applications format Kconfig and sconscript 2023-01-08 22:52:13 -05:00
driver [rt-smart] PV_OFFSET as a variable (#6904) 2023-02-14 23:08:32 +08:00
.config Add ADT Kconfig and fix MMU kconfig issue in Cortex-A (#6901) 2023-02-06 01:11:04 +08:00
.gitignore sync branch rt-smart. (#6641) 2022-12-03 12:07:44 +08:00
Kconfig [atomic]添加arm与risc-v下的常用原子操作函数 (#7053) 2023-03-23 20:06:50 +08:00
README.md sync branch rt-smart. (#6641) 2022-12-03 12:07:44 +08:00
README_ZH.md [bsp][readme] 增加scons --exec-path=xxx 命令的使用说明 2022-10-10 09:42:44 +08:00
README_ch.md sync branch rt-smart. (#6641) 2022-12-03 12:07:44 +08:00
SConscript [bsp] rename qemu-riscv-virt64 to qemu-virt64-riscv 2022-05-25 10:05:23 +08:00
SConstruct [rt-smart] PV_OFFSET as a variable (#6904) 2023-02-14 23:08:32 +08:00
link.lds format link scripts 2023-01-08 22:52:13 -05:00
link_stacksize.lds format link scripts 2023-01-08 22:52:13 -05:00
qemu-dbg.sh [rt-smart] kernel virtual memory management layer (#6809) 2023-01-08 21:08:55 -05:00
qemu-dumpdtb.sh [bsp] rename qemu-riscv-virt64 to qemu-virt64-riscv 2022-05-25 10:05:23 +08:00
qemu-nographic-smode.sh [bsp] rename qemu-riscv-virt64 to qemu-virt64-riscv 2022-05-25 10:05:23 +08:00
qemu-nographic.bat sync branch rt-smart. (#6641) 2022-12-03 12:07:44 +08:00
qemu-nographic.sh sync branch rt-smart. (#6641) 2022-12-03 12:07:44 +08:00
qemu-v-dbg.sh [rt-smart] kernel virtual memory management layer (#6809) 2023-01-08 21:08:55 -05:00
qemu-v-nographic.sh sync branch rt-smart. (#6641) 2022-12-03 12:07:44 +08:00
rtconfig.h Add ADT Kconfig and fix MMU kconfig issue in Cortex-A (#6901) 2023-02-06 01:11:04 +08:00
rtconfig.py [BSP] Add color build for qemu gcc config. (#6924) 2023-02-11 17:14:55 +08:00
smart-env.bat sync branch rt-smart. (#6641) 2022-12-03 12:07:44 +08:00

README.md

RT-Smart QEMU SYSTEM RISC-V RV64 BSP

English | 中文

1. Introduction

QEMU can emulate both 32-bit and 64-bit RISC-V CPUs. Use the qemu-system-riscv64 executable to simulate a 64-bit RISC-V machine, qemu-system-riscv32 executable to simulate a 32-bit RISC-V machine.

QEMU has generally good support for RISC-V guests. It has support for several different machines. The reason we support so many is that RISC-V hardware is much more widely varying than x86 hardware. RISC-V CPUs are generally built into “system-on-chip” (SoC) designs created by many different companies with different devices, and these SoCs are then built into machines which can vary still further even if they use the same SoC.

For most boards the CPU type is fixed (matching what the hardware has), so typically you dont need to specify the CPU type by hand, except for special cases like the virt board.

2. Building

It's tedious to properly build a kernel since each RISC-V toolchain is specified to one RISC-V ISA. So you have to use different toolchain for different RISC-V ISAs. Here we focus on 2 types of ISA: rv64imafdcv and rv64imac.

If you are not sure what kinds of ISA you need, then rv64imac should satisfied your case most time. Given a riscv toolchain, you can check the ISA it supports like this:

root@a9025fd90fd4:/home/rtthread-smart# riscv64-unknown-linux-musl-gcc -v
Using built-in specs.
COLLECT_GCC=riscv64-unknown-linux-musl-gcc
COLLECT_LTO_WRAPPER=/home/rtthread-smart/tools/gnu_gcc/riscv64-linux-musleabi_for_x86_64-pc-linux-gnu/bin/../libexec/gcc/riscv64-unknown-linux-musl/10.1.0/lto-wrapper
Target: riscv64-unknown-linux-musl
Configured with: /builds/alliance/risc-v-toolchain/riscv-gcc/configure --target=riscv64-unknown-linux-musl --prefix=/builds/alliance/risc-v-toolchain/install-native/ --with-sysroot=/builds/alliance/risc-v-toolchain/install-native//riscv64-unknown-linux-musl --with-system-zlib --enable-shared --enable-tls --enable-languages=c,c++ --disable-libmudflap --disable-libssp --disable-libquadmath --disable-libsanitizer --disable-nls --disable-bootstrap --src=/builds/alliance/risc-v-toolchain/riscv-gcc --disable-multilib --with-abi=lp64 --with-arch=rv64imac --with-tune=rocket 'CFLAGS_FOR_TARGET=-O2   -mcmodel=medany -march=rv64imac -mabi=lp64 -D __riscv_soft_float' 'CXXFLAGS_FOR_TARGET=-O2   -mcmodel=medany -march=rv64imac -mabi=lp64 -D __riscv_soft_float'
Thread model: posix
Supported LTO compression algorithms: zlib
gcc version 10.1.0 (GCC) 

The -march=*** is what you are looking for. And the -mabi=*** is also an important message to configure compiling script.

Steps to build kernel:

  1. in $RTT_ROOT/bsp/qemu-virt64-riscv/rtconfig.py:40, make sure -march=*** and -mabi=*** is identical to your toolchain
  2. if your -march contains characters v/d/f, then: configure kernel by typing scons --menuconfig and select Using RISC-V Vector Extension / Enable FPU
  3. scons

3. Execution

It's recommended to clone the latest QEMU release and build it locally. Make sure QEMU is ready by typing qemu-system-riscv64 --version in your shell.

Using qemu-nographic.sh or qemu-nographic.bat to start simulation.

if your -march contains characters v, using qemu-v-nographic.*