diff --git a/bsp/qemu-virt64-riscv/README.md b/bsp/qemu-virt64-riscv/README.md index 929c8946febacc7765c4ec3f1363e07aa806d2e5..97de017d9f6198062507169b16d44e13a9c73aef 100644 --- a/bsp/qemu-virt64-riscv/README.md +++ b/bsp/qemu-virt64-riscv/README.md @@ -1,5 +1,7 @@ # RT-Smart QEMU SYSTEM RISC-V RV64 BSP +English | [中文](./README_ch.md) + ## 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. diff --git a/bsp/qemu-virt64-riscv/README_ch.md b/bsp/qemu-virt64-riscv/README_ch.md new file mode 100644 index 0000000000000000000000000000000000000000..c9ef9f490c3b69e1a173efb2232c4062cc4f7dd0 --- /dev/null +++ b/bsp/qemu-virt64-riscv/README_ch.md @@ -0,0 +1,28 @@ +# RT-Smart QEMU SYSTEM RISC-V RV64 BSP + +中文 | [English](./README.md) + +## 1. 简介 + +本工程是在QEMU System RISC-V 64 模拟器运行,针对 virt 机器的BSP + +## 2. 构建 + +1. 获取 [rt-smart SDK](http://117.143.63.254:9012/www/rt-smart/) risc-v 64版本. +1. 设置 `RTT_EXEC_PATH` 工具链的 bin 文件夹路径, 如 `/home/user/xxx/yyy/bin` +1. 设置 `RTT_CC_PREFIX` 为工具链前缀, 如 `riscv64-unknown-linux-musl-` +1. 设置 `RTT_CC` 为工具链名称, 如 `gcc` +1. 通过指令 `riscv64-unknown-linux-musl-gcc -v` 查看工具链的 -march 与 -mabi +1. 根据相关信息调整本目录下的 `rtconfig.py:40` 如 `DEVICE = ' -mcmodel=medany -march=rv64imac -mabi=lp64 '` +1. `scons --menuconfig` + * 如果 `-march` 包含 `v`, 选择 `Using RISC-V Vector Extension`, 反之关闭 + * 如果 `-march` 包含 `f/d`, 选择 `Enable FPU`, 反之关闭 +1. `scons` + +## 3. 运行 + +推荐拉取最新的 qemu 发行版在本地构建。使用指令确保qemu可用 `qemu-system-riscv64 --version`。 + +使用 `qemu-nographic.sh`/`qemu-nographic.bat` 启动虚拟机。 + +> if your -march contains characters v, using qemu-v-nographic.* diff --git a/components/lwp/arch/arm/cortex-a/lwp_arch.h b/components/lwp/arch/arm/cortex-a/lwp_arch.h index 4980121dd92e7876fb4a865cd96f92d71db1f8fa..6132ce46d9e8c2310fbea3619df47d46769f10c0 100644 --- a/components/lwp/arch/arm/cortex-a/lwp_arch.h +++ b/components/lwp/arch/arm/cortex-a/lwp_arch.h @@ -30,7 +30,7 @@ extern "C" { rt_inline unsigned long rt_hw_ffz(unsigned long x) { - return __builtin_ffs(~x) - 1; + return __builtin_ffsll(~x) - 1; } rt_inline void icache_invalid_all(void) diff --git a/components/lwp/arch/risc-v/rv64/lwp_arch.h b/components/lwp/arch/risc-v/rv64/lwp_arch.h index 3e8653a0c3c9020f159369a4a39c1aa20045a207..cb7d8831358974f15bc52878170586a8a3162fc4 100644 --- a/components/lwp/arch/risc-v/rv64/lwp_arch.h +++ b/components/lwp/arch/risc-v/rv64/lwp_arch.h @@ -53,7 +53,7 @@ rt_mmu_info* arch_kernel_get_mmu_info(void); rt_inline unsigned long rt_hw_ffz(unsigned long x) { - return __builtin_ffs(~x) - 1; + return __builtin_ffsll(~x) - 1; } rt_inline void icache_invalid_all(void) diff --git a/components/lwp/arch/x86/i386/lwp_arch.h b/components/lwp/arch/x86/i386/lwp_arch.h index d8820eec8b14b212c0a5c11e3d1b4c12bcc97830..6d15aebcd1be5f61a8333f546514c386bdd5c03b 100644 --- a/components/lwp/arch/x86/i386/lwp_arch.h +++ b/components/lwp/arch/x86/i386/lwp_arch.h @@ -37,7 +37,7 @@ void lwp_signal_do_return(rt_hw_stack_frame_t *frame); rt_inline unsigned long rt_hw_ffz(unsigned long x) { - return __builtin_ffs(~x) - 1; + return __builtin_ffsll(~x) - 1; } #ifdef __cplusplus