超详细新手教程

一、前言

本文包含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)。

本文参照RISC-V的官方文档结合自己机器的实际情况实验得出,文中难免有些纰漏,还请指正。如有更多需要,请参照RISC-V官方网站:https://www.riscv.org编译器使用的gcc-4.8.4(此次编译安装需要c++ 11的支持,gcc版本大于4.8即可)。可能很多人会现在虚拟机测试安装,请务必找一个稍大些的硬盘来安装,至少要准备40G。

或者查看其gitHub:https://github.com/riscv

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-dev gawk bison flex gperf libtool patchutils bc zlib1g-dev texinfo device-tree-compiler 

二、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-fesvrriscv-isa-sim。这是在主机上模拟RISC-V二进制文件所需的两个组件。但是我们还是会构建riscv64-unknown-linux-gnu-gccriscv64-unknown-elf-gcc以用来做更多的事情。

2.获取和编译源码

1.在GitHub上获取riscv-tools

$ git  clone  https://github.com/riscv/riscv-tools.git

2.使用git命令更新所需的代码库

$ cd  $TOP/riscv-tools

$ git  submodule  update  --init  --recursive

这一步需要下载大量的文件(大约3.7G),需要耐心等待.如果发生网络连接失败或者是下载速度过于慢的话,可以查看目录下的.gitmodules文件,其中包含更新的网址,可以手动下载或者在网上找其他的资源链接。

构建GCC还需要flex, bison, autotools, libmpc, libmpfr, libgmp这些包,如果你没有的话可以执行

$ 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/pkspike自动找到了这个。然后,riscv-pk接收要运行的程序的名称作为其参数。

如果你这里出错了,hello并不能运行的话,你可以查看$RISCV/riscv/bin目录下是否有riscv64-unknown-linux-gnu-gcc等,然后查看日志以寻找问题。

将在Linux内核的引导之间保持不变。这将在随后的内核引导过程中造成一

到这里为止,你几乎已经可以体验到RISC-V的各种工具了,此时你可以查阅资料,深入了解他们的使用,但仅仅是这样还是不够的下一步我们还需要下载Linux内核,使用我们装好的riscv64-unknown-linux-gnu-gcc来交叉编译内核,具体该如何操作呢,让我们下期再分享。

参考文献

[1] RISC-Vofficial network:https://riscv.org/software-tools/

[2]README of RISC-VGNU Compiler Toolchain:

https://github.com/riscv/riscv-gnu-toolchain

RISC-V Tools编译安装三部曲之一相关推荐

  1. 初识Nginx及编译安装Nginx

    初识Nginx及编译安装Nginx 环境说明: 系统版本    CentOS 6.9 x86_64 软件版本    nginx-1.12.2 1.什么是Nginx? 如果你听说或使用过Apache软件 ...

  2. 二进制编译安装mysql(centos6、7)和源码编译bind

      一.二进制编译安装mysql   centos6.7大体上都是相同的,只是有几步不同也都标记出来了,具体步骤如下: ①下载安装包并导入到centos里进行解压. ②创建软连接或者修改mariadb ...

  3. centos7.9编译安装构建系统gn+ninja

    1 前言 环境Win10主机+VMware15.5+Centos7.9 登录用户:root Ninja 是Google推出的注重速度的构建工具,一般在Unix/Linux上的程序通过make/make ...

  4. 25. 文件系统——源程序的编译安装(make,make install,ldd,ldconfig -v)

    一.源文件结构概述 GNU组织提供的都是源代码,供用户自行编译使用.比如著名的apache web服务器就是典型的源文件: 我们可以下载这个源代码,在windows平台上通过firezillar上传到 ...

  5. (1)编译安装lamp三部曲之apache-技术流ken

    简介 采用yum安装lamp简单,快捷,在工作中也得到了普遍应用.但是如果我们需要某些特定模块功能,以及制定安装位置等,就需要用到编译安装了,接下来将编译安装lamp之apache. 系统环境及服务版 ...

  6. RISC V (RV32+RV64) 架构 整体介绍

    文章目录 riscv 市场 芯片介绍 软件介绍 开发板介绍 PC介绍 riscv 架构 编程模型(指令集/寄存器/ABI/SBI) 运行状态 指令集 寄存器 riscv32和riscv64两者的区别 ...

  7. Windows 10下编译安装Hadoop2.6

    转自:https://www.linuxidc.com/Linux/2016-08/134131.htm Windows 10下安装Hadoop2.6,Windows10下编译64位Hadoop2.x ...

  8. 在CentOS 6.6 64bit上编译安装LLVM3.7,Clang,Libc++和libc++abi

    一.简介 LLVM LLVM(之前称为低级虚拟机Low Level Virtual Machine)是一种非常强大的编译器基础架构框架,专门为使用您喜爱的编程语言编写的程序的编译时.链接时和运行时优化 ...

  9. 源码编译安装httpd及其常见错误

    一.编译安装的整体步骤 1.在官网下载源码,并解压 2.切换到其目录中 3.执行./configure 4.编译 二.编译中及安装后配置常见的参数及其说明 编译中配置 1)指定安装路径 --prefi ...

最新文章

  1. 计算机教研活动心得体会,信息技术研修教研活动总结
  2. 计算机健康教育应用的意义,健康教育路径计算机模块的建立与应用  (3)
  3. [Android1.5]打开多个Activity,返回到第一个Activity的问题
  4. serial driver 2
  5. python笔试编程题_Python——面试编程题
  6. sizeof你真的弄明白了吗?
  7. Android 系统 (128)---ODM 开发用户常见需求文档(二)
  8. Linux下rpm安装软件
  9. vue element 调用后台下载文件
  10. Adobe CS3教程安装问题
  11. 芝麻信用商家接入指南
  12. 记一次npm安装依赖奇怪的gyp报python错误
  13. VSCode配置同步|VSCode高级玩家宝典之第三篇
  14. echarts 实现横坐标只显示第一个和最后一个自定义的内容
  15. 按键android手机排行榜,【直板全键盘手机推荐】直板键盘手机排行榜
  16. 【给小白玩的脚本】自动发歌词、发弹幕
  17. 视频教程-红孩儿网狐Cocos经典棋牌开发教程-手游开发
  18. Javascript 设计模式之外观模式【讲师辅导】-曾亮-专题视频课程
  19. 如何有效阅读他人代码(一)
  20. Python|函数——自定义函数

热门文章

  1. 高中英才计划计算机研究设计计划,高中生英才计划.docx
  2. linux搭建直播步骤,Linux 下 nginx + rtmp 搭建直播服务
  3. iisnbsp;访问输入用户名和密码问题
  4. PTA 数据结构课程设计 7-10 旅游规划
  5. anaconda创建虚拟环境Solving environment: failed
  6. 海思3559kernel移植(一):一路next的默认模式
  7. r720 linux 双系统,联想R720拯救者i5 7300黑苹果MacOS10.14.2安装和双系统引导
  8. 【鱼骨图】【数学史】行列式、矩阵论的历史
  9. 用不规则矢量多边形裁切栅格数据的方法比较
  10. 城市防汛应急管理智慧:可视化平台之气象预警