本文记录ubuntu下RISC-V开发环境的搭建过程,主要针对嵌入式系统。
依赖安装
1 | sudo apt update |
GNU Tool
当中包含了gcc, newlib, glibc,binutils,gdb,qemu, DejaGnu
下载
1 | git clone --recursive https://github.com/riscv/riscv-gnu-toolchain |
编译
编译工具链
risc-v可以编译为linux(glibc)或者newlib,下面列出的命令是编译成Newlib为32bit嵌入式系统使用1
2
3cd 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编译方式如下1
2cd 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代码
下载
1 | git clone https://github.com/riscv/riscv-tools.git |
编译
RISC-V Tool依赖GNU Tool,因此要先编译setup好GNU Tool后才能编译RISC-V Tool1
2
3cd 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
处理方法1
2
3
4# 查找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,执行1
:%s/json/console/g