Skip to content

Latest commit

 

History

History
183 lines (125 loc) · 5.51 KB

README.md

File metadata and controls

183 lines (125 loc) · 5.51 KB

在 D1 上运行 Core-V-MCU BSP

需要准备的依赖项

  1. 一台运行 Ubuntu 的 x86_64 PC,虚拟机/WSL 亦可,用于编译 bsp 本体。如使用笔者提供的 bsp elf 二进制,可忽略此项。
  2. 一块采用了 D1 SoC 的开发板(如荔枝派 RV / 哪吒 D1),并在上面安装 openEuler RISC-V 23.03 preview。

理论上其他采用 RV64 SoC 且运行 openEuler RISC-V 的开发板也通用。

编译 BSP

Note: 可直接下载笔者编译好的 BSP 二进制,跳过编译部分。文件位于本目录下,见此处

sha256sum: 37022bfc82187beb9647b91b4f39295affecf74763472243b672541762df27a1

此部分在 Ubuntu 23.04 x86_64 下进行。

  1. 新建一个工作目录,比如:mkdir rt-thread && cd rt-thread

  2. 安装 unzipgit

sudo apt install -y unzip git

  1. 下载并解压 rv32 工具链。
wget https://github.com/Yaochenger/openhw-/raw/master/toolchain/gcc_riscv32.zip
unzip gcc_riscv32.zip
  1. 准备编译环境,执行如下命令:
wget https://gitee.com/RT-Thread-Mirror/env/raw/master/install_ubuntu.sh
bash install_ubuntu.sh --gitee

Note: Ubuntu 23.04 下可能提示未找到 qemu 软件包,可以忽略这个报错。

  1. 下载 RT-Thread 源码。
git clone --depth=1 https://github.com/RT-Thread/rt-thread
cd rt-thread/bsp/core-v-mcu/core-v-cv32e40p
  1. 修改 rtconfig.py 中指定的默认 toolchain 路径。

将第 15 行的:

EXEC_PATH   = r'D:\RT-ThreadStudio\repo\Extract\ToolChain_Support_Packages\RISC-V\RISC-V-GCC-RV32\2022-04-12\bin'

修改为:

EXEC_PATH   = '~/rt-thread/gcc_riscv32/bin'

修改完成后,执行如下命令进行编译:

source ~/.env/env.sh
scons --exec-path="$HOME/rt-thread/gcc_riscv32/bin"

编译结束后会有类似如下输出:

riscv32-unknown-elf-size rtthread.elf
   text    data     bss     dec     hex filename
  65440   91796   71028  228264   37ba8 rtthread.elf
scons: done building targets.

可以看到输出一个 rtthread.elf,稍候我们会用到它。

编译 QEMU for RV64

Note: 可直接下载笔者编译好的 QEMU 二进制,跳过较为耗时的编译部分。文件位于本目录下,见此处。下载后直接 tar -xf qemu.tar.zst 解压即可。需要安装 zstd

注意,仍需按照第一步安装相关依赖库。

sha256sum: d11ce6ebe893ff3def0d42ea3df4640d0e13ac9ff16e1c749ef33f71a2fb3c2c

Core-V-MCU 目前需要使用 QEMU 进行模拟,相关支持暂未合入 QEMU 主线,需要使用 PLCT Lab 提供的 QEMU 源码进行编译。

本部分在开发板上进行。

  1. 安装依赖包
sudo dnf install -y git glib2-devel libfdt-devel pixman-devel zlib-devel bzip2 ninja-build python3 \
                    libaio-devel libcap-ng-devel libiscsi-devel capstone-devel \
                    gtk3-devel vte291-devel ncurses-devel \
                    libseccomp-devel nettle-devel libattr-devel libjpeg-devel \
                    brlapi-devel libgcrypt-devel lzo-devel snappy-devel \
                    librdmacm-devel libibverbs-devel cyrus-sasl-devel libpng-devel \
                    libuuid-devel pulseaudio-libs-devel curl-devel libssh-devel \
                    systemtap-sdt-devel libusbx-devel
  1. 拉取源码:
git clone https://github.com/plctlab/plct-qemu --depth=1 -b plct-corev-upstream-sync-dma
cd plct-qemu
  1. 使用 oErv 23.03 / GCC 10.3.1 进行编译时,直接编译会出现报错,需要修改两处源码。

net/dump.c 第 89 行:

if (writev(s->fd, dumpiov, cnt + 1) != sizeof(hdr) + caplen) {

修改为:

if (writev(s->fd, &dumpiov[0], cnt + 1) != sizeof(hdr) + caplen) {

include/qemu/int128.h 第 183 行:

#if __has_builtin(__builtin_bswap128)

修改为:

#if 0
  1. 配置并编译 QEMU(只编译需要的 riscv32 部分以节省时间):
mkdir build && cd build
../configure --target-list=riscv32-softmmu
make -j$(nproc)

编译完成后,应当能够在当前目录下看到 qemu-system-riscv32 二进制。

  1. 将先前编译好的 rtthread.elf 文件复制到 qemu-system-riscv32 同一目录下,执行:
./qemu-system-riscv32 -M core_v_mcu -bios none -kernel rtthread.elf -nographic -monitor none -serial stdio

Tab 可查看支持的指令。

运行输出如下:

[openeuler@openeuler-riscv64 build]$ ./qemu-system-riscv32 -M core_v_mcu -bios none -kernel rtthread.elf -nographic -monitor none -serial stdio

 \ | /
- RT -     Thread Operating System
 / | \     5.0.1 build May 15 2023 20:06:28
 2006 - 2022 Copyright by RT-Thread team
Hello RT-Thread!
msh >
RT-Thread shell commands:
pin              - pin [option]
clear            - clear the terminal screen
version          - show RT-Thread version information
list             - list objects
help             - RT-Thread shell help.
ps               - List threads in the system.
free             - Show the memory usage in the system.

msh >

参考资料

Core-V-MCU BSP 说明

QEMU Wiki

aarch64:qemu6.2.0 compile error

lore.kernel.org