kurisaw e2aed47b6c [format][version]: synchronize bsp version configuration 2 months ago
..
applications c9c1b9c8d0 Improve c906 smart qemu support 6 months ago
board c9c1b9c8d0 Improve c906 smart qemu support 6 months ago
libcpu 893ae7d7ba fix(risc-v, virt64, plic): use volatile rw for claim and complete 4 months ago
.config e2aed47b6c [format][version]: synchronize bsp version configuration 2 months ago
Kconfig c9c1b9c8d0 Improve c906 smart qemu support 6 months ago
README.md 7178c933f4 Modify reference document link 6 months ago
README_cn.md 7178c933f4 Modify reference document link 6 months ago
SConscript c9c1b9c8d0 Improve c906 smart qemu support 6 months ago
SConstruct c9c1b9c8d0 Improve c906 smart qemu support 6 months ago
link_smart.lds c9c1b9c8d0 Improve c906 smart qemu support 6 months ago
link_stacksize.lds c9c1b9c8d0 Improve c906 smart qemu support 6 months ago
rtconfig.h e2aed47b6c [format][version]: synchronize bsp version configuration 2 months ago
rtconfig.py c9c1b9c8d0 Improve c906 smart qemu support 6 months ago
run.sh c9c1b9c8d0 Improve c906 smart qemu support 6 months ago

README.md

QEMU/RISCV64/C906 VIRT Board Support Package User Guide

English | 中文

1. Introduction

RISC-V is an open and free instruction set architecture (ISA). This project is based on QEMU's RISC-V64 VIRT platform, ported to the C906 processor platform.

2. Building

Working system: take Ubuntu 24.04 as an example:

$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 24.04.2 LTS
Release:        24.04
Codename:       noble

2.1. Installing the toolchain

Note: If the emulator in the above link does not work, you can compile the emulator using the following repository

XUANTIE-RV/qemu

2.2. Setting RT-Thread toolchain environment variables

There are three environment variables related to the RT-Thread toolchain

  • RTT_CC is the toolchain name, which is "gcc" here
  • RTT_CC_PREFIX: is the toolchain prefix, in this case "riscv64-unknown-elf-" for the Standard Edition and "riscv64-unknown-linux-musl-" for the Smart Edition.
  • RTT_EXEC_PATH: the path to the bin folder of the toolchain, e.g. "$HOME/tools/Xuantie-900-gcc-linux-6.6.0-musl64-x86_64-V3.0.2/bin", this is based on the path of the toolchain that was downloaded and unpacked by the user. Thread Standard and Smart versions are two different toolchains, and the path name of RTT_EXEC_PATH should be set to bin.

Note: This may vary for different toolchains RTT_CC_PREFIX, which can be viewed in the toolchain bin folder path. It is recommended to export these three environment variables in the .bashrc file if you use them all the time.

2.3. Downloading the kernel

Assume that the working path is $WORKSPACE.

cd $WORKSPACE
git clone git@github.com:RT-Thread/rt-thread.git

Enter xuantie/virt64/c906 the location of the BSP directory, the latter operation is not otherwise described, the default is in this directory.

cd $WORKSPACE/rt-thread/bsp/xuantie/virt64/c906

2.4. Configuring the kernel

Refresh the configuration file before compiling for the first time.

scons --menuconfig

If you want to use the RT-Thread Smart version, at least turn on the RT_USING_SMART option after entering the configuration menu (see the figure below), and the rest depends on your needs.

(Top) → RT-Thread Kernel
                                        RT-Thread Project Configuration
(24) The maximal size of kernel object name
[ ] Use the data types defined in ARCH_CPU
[*] Enable RT-Thread Smart (microkernel on kernel/userland)
[ ] Enable RT-Thread Nano
...

Save and exit after modification.

2.5. Compiling the kernel

If you have compiled before, you can clean it up:

scons --clean

Or compile directly:

scons -j$(nproc)

The kernel binary file rtthread.bin will be generated in the $WORKSPACE/rt-thread/bsp/xuantie/virt64/c906.

3. Running

3.1. Installing QEMU

Here the qemu emulator is installed by compiling the XUANTIE-RV/qemu repository.


git clone git@github.com:XUANTIE-RV/qemu.git

mkdir build

cd build

../configure --target-list="riscv64-softmmu riscv64-linux-user"

make -j8

make install

After the installation is complete, you can check the version.

$ qemu-system-riscv64 --version
QEMU emulator version 8.2.94 (v6.1.0-22774-ge0ace167ef)
Copyright (c) 2003-2024 Fabrice Bellard and the QEMU Project developers

3.2. Running QEMU

The repository has provided a ready-made execution script, which can be executed directly:

./run.sh

3.2.1. Running RT-Thread Smart version

The following is an example:

$ ./run.sh

OpenSBI v1.4
   ____                    _____ ____ _____
  / __ \                  / ____|  _ \_   _|
 | |  | |_ __   ___ _ __ | (___ | |_) || |
 | |  | | '_ \ / _ \ '_ \ \___ \|  _ < | |
 | |__| | |_) |  __/ | | |____) | |_) || |_
  \____/| .__/ \___|_| |_|_____/|____/_____|
        | |
        |_|

Platform Name             : riscv-virtio,qemu
Platform Features         : medeleg
Platform HART Count       : 1
Platform IPI Device       : aclint-mswi
Platform Timer Device     : aclint-mtimer @ 10000000Hz
Platform Console Device   : uart8250
Platform HSM Device       : ---
Platform PMU Device       : ---
Platform Reboot Device    : syscon-reboot
Platform Shutdown Device  : syscon-poweroff
Platform Suspend Device   : ---
Platform CPPC Device      : ---
Firmware Base             : 0x80000000
Firmware Size             : 323 KB
Firmware RW Offset        : 0x40000
Firmware RW Size          : 67 KB
Firmware Heap Offset      : 0x48000
Firmware Heap Size        : 35 KB (total), 2 KB (reserved), 9 KB (used), 23 KB (free)
Firmware Scratch Size     : 4096 B (total), 328 B (used), 3768 B (free)
Runtime SBI Version       : 2.0

Domain0 Name              : root
Domain0 Boot HART         : 0
Domain0 HARTs             : 0*
Domain0 Region00          : 0x0000000000100000-0x0000000000100fff M: (I,R,W) S/U: (R,W)
Domain0 Region01          : 0x0000000010000000-0x0000000010000fff M: (I,R,W) S/U: (R,W)
Domain0 Region02          : 0x0000000002000000-0x000000000200ffff M: (I,R,W) S/U: ()
Domain0 Region03          : 0x0000000080040000-0x000000008005ffff M: (R,W) S/U: ()
Domain0 Region04          : 0x0000000080000000-0x000000008003ffff M: (R,X) S/U: ()
Domain0 Region05          : 0x000000000c400000-0x000000000c5fffff M: (I,R,W) S/U: (R,W)
Domain0 Region06          : 0x000000000c000000-0x000000000c3fffff M: (I,R,W) S/U: (R,W)
Domain0 Region07          : 0x0000000000000000-0xffffffffffffffff M: () S/U: (R,W,X)
Domain0 Next Address      : 0x0000000080200000
Domain0 Next Arg1         : 0x000000008fe00000
Domain0 Next Mode         : S-mode
Domain0 SysReset          : yes
Domain0 SysSuspend        : yes

Boot HART ID              : 0
Boot HART Domain          : root
Boot HART Priv Version    : v1.10
Boot HART Base ISA        : rv64imafdc
Boot HART ISA Extensions  : zicntr,zihpm
Boot HART PMP Count       : 16
Boot HART PMP Granularity : 2 bits
Boot HART PMP Address Bits: 54
Boot HART MHPM Info       : 16 (0x0007fff8)
Boot HART MIDELEG         : 0x0000000000000222
Boot HART MEDELEG         : 0x000000000000b109
heap: [0x003280c0 - 0x043280c0]

 \ | /
- RT -     Thread Smart Operating System
 / | \     5.2.1 build Jun  9 2025 09:03:23
 2006 - 2024 Copyright by RT-Thread team
lwIP-2.0.3 initialized!
[I/sal.skt] Socket Abstraction Layer initialize success.
[I/utest] utest is initialize success.
[I/utest] total utest testcase num: (1)
[I/drivers.serial] Using /dev/ttyS0 as default console
file system initialization done!
Hello RISC-V
msh />

3.2.2. Running RT-Thread Smart Edition + Root File System

For the Smart kernel, you can also mount the root filesystem during the boot process by specifying the path to the root filesystem image when executing the run.sh script.

Note that the kernel supports fat by default, and if you want to mount an ext4 filesystem, you need to install the lwext4 package, even if you can PKG_USING_LWEXT4

the menuconfig path is (Top) -> RT-Thread online packages -> system). packages -> lwext4: an excellent choice of ext2/3/4 filesystem for microcontrollers.

If you can't find the package in the menu, you can exit menuconfig and run pkgs --upgrade to update the package index before trying to enable the package.
After checking this option, you will also need to update the software and install the source code into the packages directory of bsp as follows (you only need to do this once):

source ~/.env/env.sh 
pkgs --update 

Save and recompile the kernel.

For more information on how to make a root filesystem, please refer to https://www.rt-thread.org/document/site/#/rt-thread-version/rt-thread-smart/quick-start/qemu-xuantie/quickstart, which will not be repeated here.

The example is as follows:

$ bash run.sh ext4.img

OpenSBI v1.4
   ____                    _____ ____ _____
  / __ \                  / ____|  _ \_   _|
 | |  | |_ __   ___ _ __ | (___ | |_) || |
 | |  | | '_ \ / _ \ '_ \ \___ \|  _ < | |
 | |__| | |_) |  __/ | | |____) | |_) || |_
  \____/| .__/ \___|_| |_|_____/|____/_____|
        | |
        |_|

Platform Name             : riscv-virtio,qemu
Platform Features         : medeleg
Platform HART Count       : 1
Platform IPI Device       : aclint-mswi
Platform Timer Device     : aclint-mtimer @ 10000000Hz
Platform Console Device   : uart8250
Platform HSM Device       : ---
Platform PMU Device       : ---
Platform Reboot Device    : syscon-reboot
Platform Shutdown Device  : syscon-poweroff
Platform Suspend Device   : ---
Platform CPPC Device      : ---
Firmware Base             : 0x80000000
Firmware Size             : 323 KB
Firmware RW Offset        : 0x40000
Firmware RW Size          : 67 KB
Firmware Heap Offset      : 0x48000
Firmware Heap Size        : 35 KB (total), 2 KB (reserved), 9 KB (used), 23 KB (free)
Firmware Scratch Size     : 4096 B (total), 328 B (used), 3768 B (free)
Runtime SBI Version       : 2.0

Domain0 Name              : root
Domain0 Boot HART         : 0
Domain0 HARTs             : 0*
Domain0 Region00          : 0x0000000000100000-0x0000000000100fff M: (I,R,W) S/U: (R,W)
Domain0 Region01          : 0x0000000010000000-0x0000000010000fff M: (I,R,W) S/U: (R,W)
Domain0 Region02          : 0x0000000002000000-0x000000000200ffff M: (I,R,W) S/U: ()
Domain0 Region03          : 0x0000000080040000-0x000000008005ffff M: (R,W) S/U: ()
Domain0 Region04          : 0x0000000080000000-0x000000008003ffff M: (R,X) S/U: ()
Domain0 Region05          : 0x000000000c400000-0x000000000c5fffff M: (I,R,W) S/U: (R,W)
Domain0 Region06          : 0x000000000c000000-0x000000000c3fffff M: (I,R,W) S/U: (R,W)
Domain0 Region07          : 0x0000000000000000-0xffffffffffffffff M: () S/U: (R,W,X)
Domain0 Next Address      : 0x0000000080200000
Domain0 Next Arg1         : 0x000000008fe00000
Domain0 Next Mode         : S-mode
Domain0 SysReset          : yes
Domain0 SysSuspend        : yes

Boot HART ID              : 0
Boot HART Domain          : root
Boot HART Priv Version    : v1.10
Boot HART Base ISA        : rv64imafdc
Boot HART ISA Extensions  : zicntr,zihpm
Boot HART PMP Count       : 16
Boot HART PMP Granularity : 2 bits
Boot HART PMP Address Bits: 54
Boot HART MHPM Info       : 16 (0x0007fff8)
Boot HART MIDELEG         : 0x0000000000000222
Boot HART MEDELEG         : 0x000000000000b109
heap: [0x003404c0 - 0x043404c0]

 \ | /
- RT -     Thread Smart Operating System
 / | \     5.2.1 build Jun 13 2025 09:43:35
 2006 - 2024 Copyright by RT-Thread team
[I/utest] utest is initialize success.
[I/utest] total utest testcase num: (1)
[I/drivers.serial] Using /dev/ttyS0 as default console
[W/DFS.fs] mount / failed with file system type: elm
file system initialization done!
Hello RISC-V
msh />/ # 
/ # 
/ # ls
bin         lib         proc        sbin        usr
dev         lost+found  root        services    var
etc         mnt         run         tmp
/ #

4. Contact Information

If you are interested in making an inquiry, please contact: business@rt-thread.com