RISC-VTools编译安装三部曲之⼀
超详细新⼿教程
⼀、前⾔
本⽂包含RISC-VGCC/Newlib Toolchain、GNUtoolchain for RISC-V, ISA Simulator等编译安装。
笔者所⽤OS为:Ubuntu 14.04.5 LTS (GNU/Linux 4.4.0-31-generic x86_64)。
1.需要设置的三个环境变量
$ export TOP=/home/lh/RISCV
这⾥路径可以⾃定义到⾃⼰的⽬录下
$ export RISCV=$TOP/riscv
$ export PATH=$PATH:$RISCV/bin
这三个变量可以写到~/.bashrc⾥⾯,然后使⽤命令:source ~/.bashrc就可以使这三个变量永久有效,不然每次打开终端都需要重新设置这三个变量。
2.⼀些必要的库和环境
$ sudo apt-get install autoconf automake build-essential autotools-dev curl device-tree-compiler pkg-config libmpc-dev libmpfr-dev libgmp-dev libusb-1.0-0
⼆、RISC-V GCC/Newlib Toolchain的编译安装
1.RISC-V toolchain包含以下组件
·riscv-gnu-toolchain, RISC-V的交叉编译器。
·riscv-fesvr, ⼀种“前端”服务器,它在主机⽬标接⼝(HTIF)上为主机和⽬标处理器之间提供服务(它还提供了虚拟化控制台和磁盘设备)。
·riscv-isa-sim, ISA模拟器与执⾏的标准。
·riscv-pk,⼀个代理内核,⽤于服务构建并链接到RISC-V Newlib端⼝的代码⽣成的系统调⽤(这不适⽤于Linux,因为它处理系统调⽤)。·riscv-opcodes, 模拟器可执⾏的所有RISC-V操作码
·riscv-tests, ⼀组assembly tests以及benchmarks
实际上,在这个列表中,我们只需要构建riscv-fesvr和riscv-isa-sim。这是在主机上模拟RISC-V⼆进制⽂件所需的两个组件。但是我们还是会构建riscv64-unknown-linux-gnu-gcc和riscv64-unknown-elf-gcc以⽤来做更多的事情。
2.获取和编译源码
1.在GitHub上获取riscv-tools
2.使⽤git命令更新所需的代码库
$ cd $TOP/riscv-tools
$ git submodule update --init --recursive
这⼀步需要下载⼤量的⽂件(⼤约3.7G),需要耐⼼等待.如果发⽣⽹络连接失败或者是下载速度过于慢的话,可以查看⽬录下的⽂件,其
中包含更新的⽹址,可以⼿动下载或者在⽹上其他的资源链接。
构建GCC还需要flex, bison, autotools, libmpc, libmpfr, libgmp这些包,如果你没有的话可以执⾏
gnu编译器
$ sudo apt-get install autoconf automake autotools-dev curl device-tree-compiler libmpc-devlibmpfr-dev libgmp-dev gawk build-essential bison flex texinfo gperf libtool patchutilsbc zlib1g-dev
配置如下的环境变量:
$export TOP=$(pwd)
如:exportTOP=/home/lh/RISCV
$ export RISCV=$TOP/riscv
$ export PATH=$PATH:$RISCV/bin
设置完之后可以使⽤echo $TOP来查看⾃⼰的设置是否正确。
为了构建完整的⼯具链,我们需要运⾏下⾯的脚本,随后开始构建riscv64-unknown-linux-gnu-gcc,在这之前
我们先来看⼀下⽬录下的脚本:
1. build.sh
(这个脚本是安装最为全⾯的⼀个,可以看到包括了RISC-V ISA simulator, proxy kernel,and GNU toolchain.之后我们使⽤的便是这⼀个。)
2. build-spike-pk.sh
3. build-spike-only.sh
4. build-rv32ima.sh
5. regression.sh
$ ./build.sh这⾥我们根据⾃⼰的需要运⾏不同的脚本即可。这⾥笔者选择的build.sh。
经过漫长的等待,运⾏结果如下图,我们可以看到RISC-V Toolchaininstallation completed。
三、Testing Your Toolchain
现在你已经有toolchain了,现在让我们来测试⼀下,退出rsicv-tools的⽬录,然后使⽤⼀个echo命令来⽣成⼀个hello word程序。
$ cd $TOP
$echo -e '#include <stdio.h>\n int main(void) { printf("Helloworld!\\n"); return 0; }' > hello.c
然后使⽤riscv64-unknown-elf-gcc来编译这个.c⽂件
$ riscv64-unknown-elf-gcc -o hello hello.c
然后你会发现并不能使⽤./hello来运⾏这个程序,你需要使⽤下⾯的命令,因为我们这个测试程序涉及⼀个系统调⽤,⽆法由我们的x86系统来处理。我们需要proxykernel来运⾏程序,它本⾝通过spike,即RISC-Varchitectural simulator来运⾏。使⽤下⾯的命令运
⾏hello。
$ spike pk hello
⾮常恭喜,此时你终于再次看到了熟悉的Hello world了,其实RISC-V体系结构模拟器spike以要运⾏的⼆进制⽂件的路径作为它的参数。这个⼆进制⽂件是pk,位于$RISCV/riscv-elf/bin/pk。spike⾃动到了这个。然后,riscv-pk接收要运⾏的程序的名称作为其参数。
如果你这⾥出错了,hello并不能运⾏的话,你可以查看$RISCV/riscv/bin⽬录下是否有riscv64-unknown-linux-gnu-gcc等,然后查看⽇志以寻问题。
将在Linux内核的引导之间保持不变。这将在随后的内核引导过程中造成⼀
到这⾥为⽌,你⼏乎已经可以体验到RISC-V的各种⼯具了,此时你可以查阅资料,深⼊了解他们的使⽤,但仅仅是这样还是不够的下⼀步我们还需要下载Linux内核,使⽤我们装好的riscv64-unknown-linux-gnu-gcc来交叉编译内核,具体该如何操作呢,让我们下期再分享。
参考⽂献
[2]README of RISC-VGNU Compiler Toolchain:
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论