对做了b、k扩展的工具链进行构建和测试

首先明确,collab给出的toolchain是没有b、k扩展的,带b、k扩展的分支是如下的链接,我们先构建分支拉取指定下面这三个链接里的新的内容(自行Google,即需要将原先toolchain文件夹里的riscv-gcc等三个文件夹的内容更新成已经做了bk扩展的内容)。
riscv-gcc:https://github.com/pz9115/riscv-gcc/tree/riscv-gcc-experimental
riscv-binutils:https://github.com/pz9115/riscv-binutils-gdb/tree/riscv-binutils-experimental
qemu:https://github.com/plctlab/plct-qemu/tree/plct-k-dev
然后先准备构建需要的很多东西,需要很多包,要提前装避坑(嗯,每个包基本都是自己被报错之后一个个加上去的,看上去很轻松,其实不知道要装什么就会原地兜圈):

sudo apt-get install gcc gawk build-essential bison flex texinfo libglib2.0-dev expect expat libexpat1-dev tcl

以下是缺工具出现的一些bug:


然后需要进入qemu文件夹,riscv-gnu-toolchain/qemu/target/riscv/cpu.c需要使能bk扩展:

vi ~/riscv-gnu-toolchain/qemu/target/riscv/cpu.c     #(根据自己文件夹来啦)
// DEFINE_PROP_BOOL("x-b", RISCVCPU, cfg.ext_b, false),  #将这个注释掉;
DEFINE_PROP_BOOL("x-b", RISCVCPU, cfg.ext_b, true),      #加上这个;
//DEFINE_PROP_BOOL("x-k", RISCVCPU, cfg.ext_k, false),   #将这个注释掉;
DEFINE_PROP_BOOL("x-k", RISCVCPU, cfg.ext_k, true),      #加上这个;

然后再修改一下riscv-gnu-toolchain/scripts/wrapper/qemu/riscv32-unknown-elf-run文件(根据32位和64位需求打开对应的文件改):

vi ~/riscv-gnu-toolchain/scripts/wrapper/qemu/riscv32-unknown-elf-run
qemu-riscv$xlen -cpu rv32,x-b=true -r 5.10 "${qemu_args[@]}" -L ${RISC_V_SYSROOT} "$@"  #(32位就用这个)
qemu-riscv$xlen -cpu rv64,x-b=true -r 5.10 "${qemu_args[@]}" -L ${RISC_V_SYSROOT} "$@"  #(64位就用这个)
#qemu-riscv$xlen -r 5.10 "${qemu_args[@]}" -L ${RISC_V_SYSROOT} "$@"                    #(把这个注释掉)

然后配置环境变量:

vim ~/.bashrc
export RISCV="/opt/riscv" #工具的安装链接(普通用户就不要装在根目录文件里面了,老老实实建一个build文件夹做安装路径)
export PATH=$PATH:$RISCV/bin #该路径下为链接工具
:wq   #保存退出
source ~/.bashrc

然后还是在riscv-gnu-toolchain目录中,新建一个build32和一个build64文件夹做安装路径:

mkdir build32 build64

接下来,构建32位toolchain的步骤:

cd build32
../configure --prefix=$RISCV --with-arch=rv32g_zba_zbb_zbc_zbs_zbkb_zbkc_zbkx_zknd_zkne_zknh_zksed_zksh --with-abi=ilp32d --with-multilib-generator="rv32g_zba_zbb_zbc_zbs_zbkb_zbkc_zbkx_zknd_zkne_zknh_zksed_zksh-ilp32d--"
make newlib

生成的32位:

make report-newlib SIM=qemu

(注:make newlib 和make report-newlib其实可以直接合一起,但是为了更明晰知道自己在make和report过程的问题,建议一步步来,另外,make默认情况下是使用newlib的,SIM默认也是qemu的)

对64位:

cd build64
../configure --prefix=$RISCV --with-arch=rv64g_zba_zbb_zbc_zbs_zbkb_zbkc_zbkx_zknd_zkne_zknh_zksed_zksh --with-abi=lp64d --with-multilib-generator="rv64g_zba_zbb_zbc_zbs_zbkb_zbkc_zbkx_zknd_zkne_zknh_zksed_zksh-lp64d--"
make newlib
make report-newlib

生成的64位:

make report-newlib SIM=qemu


可以看到两边的生成和测试都完美通过,gcc g++ gfortran都 0 bug。

对做了b、k扩展的工具链进行构建和测试相关推荐

  1. linux centos7 使用 crosstool-ng 构建 交叉编译 工具链 即构建各cpu架构平台的gcc编译器

    简介 crosstool-ng,全称是crosstool Next Generation,即下一代crosstool.crosstool是个交叉编译器的制作工具,但是做的不够好,于是有人(Yann E ...

  2. 《Linux学习一》交叉编译工具链的构建工具Crosstool-ng

    索引 (一)下载与安装 (二)使用 (一)下载与安装 1.wget http://crosstool-ng.org/download/crosstool-ng/crosstool-ng-1.25.0. ...

  3. Mastering Embedded Linux Programming 学习 (一)嵌入式交叉编译工具链的构建,基于crosstool-NG

    Mastering Embedded Linux Programming 学习 (一) 一.ubuntu 软件包下载 sudo apt install autoconf automake bison ...

  4. 地平线 旭日X3 SDB开发板 (三) 工具链仿真/板上测试

    文章目录 一.检查模型 二.校准 三.build runtime模型 四.Demo运行测试 4.1 开发机仿真运行(不需要的直接跳到4.2) 4.2 板上运行 五.参考 目前tensorflow,py ...

  5. 属性匹配工具_测试工具链——高效构建Mock服务

    现在,WEB系统的开发一般都采用前后端分离的架构,以及部分公司采用"前台-中台-后台"的组织架构,难免会出现开发进度不一致的情况,导致系统联调或测试需要等到所有依赖开发完成后才能够 ...

  6. gcc mips64编译后无法运行在octeon上运行_编译工具链

    软件的编译过程由一系列的步骤完成,每一个步骤都有一个对应的工具.这些工具紧密地工作在一起,前一个工具的输出是后一个工具的输入,像一根链条一样,我们称这些工具为工具链. Linux系统上,通常只需要使用 ...

  7. 浅谈DevSecOps工具链中的源代码安全保障

    近期,很多企业开始关注DevSecOps,下面根据作者对其理解,简单分析一下在DevSecOps的源代码安全该如何考虑和建设. 主要分5部分: 1.DevSecOps建设的背景和目的 2.安全才是提升 ...

  8. DevOps工具链学习——相关工具知多少

    转载至:https://blog.csdn.net/nklinsirui/article/details/80510535#版本控制 刚刚接触DevOps,作为开发人员,我要做的自然是将DevOps中 ...

  9. 构建操作系统开发的高效工具链

    simpleOS 使用不同的工具链来构建一个简单的操作系统,旨在研究和探讨如何更加高效地进行操作系统开发 本项目地址 https://github.com/iOSPrincekin/simpleOS ...

最新文章

  1. vue页面翻页勾选的记忆功能
  2. 【算法设计】虎溪校园导游系统
  3. 【转】VS 安全开发生命周期(SDL)检查
  4. 网银系统服务器架构设计,网上银行建设架构精选.pdf
  5. 最全 JavaScript Array 方法 详解
  6. 《『若水新闻』客户端开发教程》——01.课程介绍
  7. 信息学奥赛一本通C++语言——1053:最大数输出
  8. CyberArticle和Live Writer的比较
  9. 使用 file_get_contents 获取网站信息报错failed to open stream: HTTP request failed!
  10. python做一个linux网卡,Linux系统Python可以选择不同网卡进行网络访问吗?
  11. python的pip换源_[Python]Pip换源以及设置代理
  12. java awt run_JAVA教程 第五讲 AWT图形用户界面设计(一)
  13. MongoDB 快速入门--高级
  14. php redis 批量发邮件,PHP使用Redis实现订阅发布与批量发送短信
  15. 一个文科毕业生在德国 IT 行业的漫漫求职路
  16. 一个计算机游戏机,我想入手一台游戏主机,ps、xbox、任天堂相比,哪个好?
  17. Ubuntu安装apex教程
  18. 2019互联网公司100强
  19. 【大咖连载】服务设计与实现
  20. optimizer(三) Adam 系列

热门文章

  1. mysql 查询schema_mysql数据库schema是什么
  2. html绝对路径图片无法显示
  3. Element-pagination分页组件修改current-page属性,不能正确渲染当前页码的问题(从组件源码查找问题)
  4. 计算机图形学透视步骤,计算机图形:透视投影
  5. 元素微粒完全获取指南
  6. 安卓webview软键盘遮住底部按钮,又名AndroidBug5497
  7. 在中国“私房菜”馆受虐
  8. 深度学习 --- CNN的变体在图像分类、图像检测、目标跟踪、语义分割和实例分割的简介(附论文链接)
  9. android 模拟屏幕点击
  10. 使用 Python 将绿屏背景替换成自定义图片