RISC-V开发环境搭建
本文记录ubuntu下RISC-V开发环境的搭建过程,主要针对嵌入式系统。
依赖安装 链接到标题
sudo apt update
sudo apt upgrade
sudo apt install autoconf automake autotools-dev curl libmpc-dev libmpfr-dev libgmp-dev libusb-1.0-0-dev gawk build-essential bison flex texinfo gperf libtool patchutils bc zlib1g-dev device-tree-compiler pkg-config libexpat-dev dkms libnewlib-dev
GNU Tool 链接到标题
当中包含了gcc, newlib, glibc,binutils,gdb,qemu, DejaGnu
下载 链接到标题
git clone --recursive https://github.com/riscv/riscv-gnu-toolchain
编译 链接到标题
编译工具链 链接到标题
risc-v可以编译为linux(glibc)或者newlib,下面列出的命令是编译成Newlib为32bit嵌入式系统使用
cd risc-gnu-toolchain/
./configure --prefix=/home/frank/opt/riscv/gnu-toolchain-32/ --with-arch=rv32imc --with-abi=ilp32
make
该编译过程将会使用newlib编译gcc/gdb/binutils,对于–with-abi还可以选取rv32i, rv32iac, rv32im, rv32imac,rv32imacf,对于–with-abi可以选取ilp32,ilp32f,ilp32d, 编译完成后的工具链会被放在home/frank/opt/riscv/gnu-toolchain-32/下
编译qemu 链接到标题
risc-v的qemu需要单独编译,32位的risc-v qemu编译方式如下
cd qemu
./configure --target-list=riscv32-linux-user && make -j4
设置环境变量 链接到标题
export PATH=$PATH:/home/frank/opt/riscv/gnu-toolchain-32/bin
RISC-V Tool 链接到标题
当中包含了Spike(ISA模拟器),riscv-opcodes(模拟器的opcode), openocd,pk(模拟器的bootloader和转发器),isa test代码
下载 链接到标题
git clone https://github.com/riscv/riscv-tools.git
cd riscv-tools
git submodule update --init --recursive
编译 链接到标题
RISC-V Tool依赖GNU Tool,因此要先编译setup好GNU Tool后才能编译RISC-V Tool
cd riscv-tools/
export RISCV=/home/frank/opt/riscv/riscv-tool
./build.sh
编译的结果会放到/home/frank/opt/riscv/riscv-tool下
设置环境变量 链接到标题
export PATH=$PATH:/home/frank/opt/riscv/riscv-tool/bin
问题处理 链接到标题
1.编译riscv-tool提示-mcmodel=medany找不到 链接到标题
原因是没有设置gun toolchain环境变量,找不到riscv64-unknown-elf-gcc,使用x86 gcc编译导致 注意目前pk和riscv-test都只支持64bit编译,如果要模拟用32bit,还是使用qemu
2.编译qemu时提示ERROR: pixman >= 0.21.8 not present 链接到标题
处理方法
# 查找pixman依赖包
sudo apt-cache search pixman
# 安装依赖包
sudo apt-get install libpixman-1-dev
3.编译qemu时提示Could not lex literal_block as “json” 链接到标题
原因是sphinx的问题,参考 https://lists.sr.ht/~philmd/qemu/%3C5D0975BE02000048000A1D94%40prv-mh.provo.novell.com%3E 鉴于sphinx处理比较麻烦,因此参考下文处理 https://blog.csdn.net/t_sing_winter/article/details/104528516 将docs/interop/bitmaps.rst中的json替换为console,使用vim打开bitmaps.rst,执行
:%s/json/console/g