查看: 2250|回复: 0
收起左侧

RISC-V Tools编译安装三部曲之一

[复制链接]

  离线 

  • TA的每日心情
    奋斗
    2021-1-15 13:53
  • 签到天数: 26 天

    [LV.4]

    发表于 2020-8-11 12:16:37 | 显示全部楼层 |阅读模式

    有人预言,RISC-V或将是继Intel和Arm之后的第三大主流处理器体系。欢迎访问全球首家只专注于RISC-V单片机行业应用的中文网站

    您需要 登录 才可以下载或查看,没有帐号?立即注册

    x
    本帖最后由 新ちゃん 于 2020-8-20 23:06 编辑

    超详细新手教程

    RISC-V Tools编译安装三部曲之一

    RISC-V Tools编译安装三部曲之二

    RISC-V Tools编译安装三部曲之三


    一、前言


    本文包含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.需要设置的三个环境变量

    1. $ export  TOP=/home/lh/RISCV
    复制代码

    这里路径可以自定义到自己的目录下

    1. $ export  RISCV=$TOP/riscv
    2. $ export  PATH=$PATH:$RISCV/bin
    复制代码

    这三个变量可以写到~/.bashrc里面,然后使用命令:source ~/.bashrc就可以使这三个变量永久有效,

    不然每次打开终端都需要重新设置这三个变量。


    2.一些必要的库和环境

    1. $ 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-fesvr和riscv-isa-sim。

    这是在主机上模拟RISC-V二进制文件所需的两个组件。


    但是我们还是会构建riscv64-unknown-linux-gnu-gcc和riscv64-unknown-elf-gcc以用来做更多的事情。


    2.获取和编译源码

    1.在GitHub上获取riscv-tools

    1. $ git  clone  https://github.com/riscv/riscv-tools.git
    复制代码

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

    1. $ cd  $TOP/riscv-tools
    2. $ git  submodule  update  --init  --recursive
    复制代码

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


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

    1. $ 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
    复制代码

    配置如下的环境变量:

    1. $export TOP=$(pwd)
    复制代码

    如:exportTOP=/home/lh/RISCV

    1. $ export RISCV=$TOP/riscv
    2. $ export PATH=$PATH:RISCV/bin
    复制代码

    设置完之后可以使用echo $TOP来查看自己的设置是否正确。

    为了构建完整的工具链,我们需要运行下面的脚本,随后开始构建riscv64-unknown-linux-gnu-gcc,在这之前


    我们先来看一下目录下的脚本:

    1. build.sh

    (这个脚本是安装最为全面的一个,可以看到包括了RISC-V ISA simulator, proxy kernel,and GNU toolchain.之后我们使用的便是这一个。)


    国内芯片技术交流-RISC-V Tools编译安装三部曲之一risc-v单片机中文社区(1)



    2. build-spike-pk.sh


    国内芯片技术交流-RISC-V Tools编译安装三部曲之一risc-v单片机中文社区(2)


    3. build-spike-only.sh


    国内芯片技术交流-RISC-V Tools编译安装三部曲之一risc-v单片机中文社区(3)


    4. build-rv32ima.sh


    国内芯片技术交流-RISC-V Tools编译安装三部曲之一risc-v单片机中文社区(4)


    5. regression.sh


    国内芯片技术交流-RISC-V Tools编译安装三部曲之一risc-v单片机中文社区(5)


    $ ./build.sh这里我们根据自己的需要运行不同的脚本即可。这里笔者选择的build.sh


    经过漫长的等待,运行结果如下图,我们可以看到RISC-V Toolchaininstallation completed


    国内芯片技术交流-RISC-V Tools编译安装三部曲之一risc-v单片机中文社区(6)



    三、Testing Your Toolchain


    现在你已经有toolchain了,现在让我们来测试一下,退出rsicv-tools的目录,然后使用一个echo命令来生成一个hello word程序。

    1. $ cd $TOP

    2. $echo -e '#include <stdio.h>\n int main(void) { printf("Helloworld!\\n"); return 0; }' > hello.c
    复制代码

    然后使用riscv64-unknown-elf-gcc来编译这个.c文件

    1. $ riscv64-unknown-elf-gcc  -o  hello hello.c
    复制代码

    然后你会发现并不能使用 ./hello 来运行这个程序,你需要使用下面的命令,因为我们这个测试程序涉及一个系统调用,无法由我们的x86系统来处理。我们需要proxykernel来运行程序,它本身通过spike,即RISC-Varchitectural simulator来运行。使用下面的命令运行hello

    1. $ spike pk hello
    复制代码

    国内芯片技术交流-RISC-V Tools编译安装三部曲之一risc-v单片机中文社区(7)


    非常恭喜,此时你终于再次看到了熟悉的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来交叉编译内核,具体该如何操作呢,让我们下期再分享。


    参考文献

    [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单片机中文网





    上一篇:Linux 获得了其首款基于 RISC-V 的多核开源处理器
    下一篇:RISC-V
    RISCV作者优文
    全球首家只专注于RISC-V单片机行业应用的中文网站
    回复

    使用道具 举报

    高级模式
    B Color Image Link Quote Code Smilies

    本版积分规则

    关闭

    RISC-V单片机中文网上一条 /2 下一条



    版权及免责声明|RISC-V单片机中文网 |网站地图

    GMT+8, 2024-4-26 23:05 , Processed in 0.639195 second(s), 49 queries .

    快速回复 返回顶部 返回列表