当前位置: 首页 > news >正文

RISC-V交叉工具链riscv-gnu-toolchain编译

文章目录

    • 1、下载
    • 2、编译
      • 1. 依赖安装
      • 2. 编译
    • 3、运行

1、下载

$ sudo apt-get install git wget build-essential 
$ git clone https://github.com/riscv-collab/riscv-gnu-toolchain
$ git checkout 2023.06.02

注意上面 clone 的仓库,我们称其为构建脚本仓库,其并不包含 gcc 等工具源码,这些源码以 git 的 submodule 的形式作为子仓库的内容发布,所以需要继续更新子仓库。

$ git submodule update --init --recursiveSubmodule 'binutils' (https://sourceware.org/git/binutils-gdb.git) registered for path 'binutils'
Submodule 'dejagnu' (https://git.savannah.gnu.org/git/dejagnu.git) registered for path 'dejagnu'
Submodule 'gcc' (https://gcc.gnu.org/git/gcc.git) registered for path 'gcc'
Submodule 'gdb' (https://sourceware.org/git/binutils-gdb.git) registered for path 'gdb'
Submodule 'glibc' (https://sourceware.org/git/glibc.git) registered for path制作交叉工具链 riscv-gnu-toolchain

注意:
使用上诉命令通过 submodule 方式下载困难的话,可以手工通过下载并切换到指定的分支。如 binutils 可通过以下方式下载并切换到指定的分支,地址和分支可以在根目录下的 .gitignore 文件中获取。

$ git clone https://sourceware.org/git/binutils-gdb.git binutils
$ git checkout binutils-2_40-branch

2、编译

1. 依赖安装

$ sudo apt-get install -y autoconf automake autotools-dev curl python3 python3-pip libmpc-dev libmpfr-dev libgmp-dev gawk build-essential bison flex texinfo gperf libtool patchutils bc zlib1g-dev libexpat-dev ninja-build git cmake libglib2.0-dev

2. 编译

riscv-gnu-toolchain 支持通过不同的编译命令和参数,生成不同版本的 toolchain。
分别支持:

  • 32bit 和 64bit
  • Newlib、glibc 和 musl 版本
  1. 编译 Newlib 版本:使用 make 命令
$ ./configure --prefix=${PWD}/riscv-newlib
$ make -j8

编译完成后,在 ${PWD}/riscv-newlib/bin 目录下生成 riscv64-unknown-elf-gcc

  1. 编译 glibc 版本:使用 make linx 命令
$ ./configure --prefix=${PWD}/riscv64-linux
$ make linux -j8

默认编译的版本为 RV64GC (64-bit), 需要编译 RV32GC (32bit) 版本可以使用以下命令编译

$ ./configure --prefix=${PWD}/riscv32-linux --with-arch=rv32gc --with-abi=ilp32d
$ make linux -j8
  • 支持的架构是rv32i或rv64i加上标准扩展 a/m/f/d/g
  • 支持的ABI是ilp32(32位软浮点),ilp32d(32位硬浮点),ilp32f(32位,在寄存器中使用单精度,在内存中使用双精度,仅限特定用途),lp64,lp64f,lp64d(相同,但使用64位长和指针)。
  1. 编译 musl libc 版本:使用 make musl 命令
$ ./configure --prefix=${PWD}/riscv64-musl
$ make musl -j8
  1. 同时编译支持 32bit 和 64bit 版本
$ ./configure --prefix=${PWD}/riscv --enable-multilib

然后使用 makemake linuxmake musl 编译对应的版本。

注:
musl 只支持 64bit 系统。

更多的配置信息可以通过 ./configure --help 查看。

3、运行

测试 toolchain 是否安装成功

$ riscv64-unknown-linux-gnu-gcc -v

相关文章:

RISC-V交叉工具链riscv-gnu-toolchain编译

文章目录 1、下载2、编译1. 依赖安装2. 编译 3、运行 1、下载 $ sudo apt-get install git wget build-essential $ git clone https://github.com/riscv-collab/riscv-gnu-toolchain $ git checkout 2023.06.02注意上面 clone 的仓库,我们称其为构建脚本仓库&…...

我能“C“——指针进阶(上)

目录 指针的概念 1. 字符指针 2. 指针数组 3. 数组指针 3.1 数组指针的定义 3.2 &数组名VS数组名 3.3 数组指针的使用 4. 数组参数、指针参数 4.1 一维数组传参 4.2 二维数组传参 4.3 一级指针传参 4.4 二级指针传参 5. 函数指针 阅读两段有趣的代码&…...

SQLServer2008数据库还原失败 恢复失败

源地址:http://www.taodudu.cc/news/show-1609349.html?actiononClick 还原数据库问题解决方案 在还原数据库“Dsideal_school_db”时,有时会遇见上图中的问题“因为数据库正在使用,所以无法获得对数据库的独占访问权”,此时我们…...

【微服务部署】04-ForwardedHeaders

文章目录 1. ForwardedHeaders1.1 场景1.2 关键的HTTP头1.3 核心处理要点 1. ForwardedHeaders 1.1 场景 获取用户IP获取用户请求的原始URL 1.2 关键的HTTP头 X-Forwarded-ForX-Forwarded-ProtoX-Forwarded-Host 1.3 核心处理要点 设置PathBase设置ForwardedHeaders中间件…...

JVM 垃圾收集器

重点:CMS,G1,ZGC 主要垃圾收集器如下,图中标出了它们的工作区域、垃圾收集算法,以及配合关系。 Serial 收集器 Serial 收集器是最基础、历史最悠久的收集器。 如同它的名字(串行)&#xff0c…...

CSS 样式使用link和@import有什么区别

在页面导入样式时,使用link和import有以下区别: 位置:link标签可以放置在HTML文档的head或body中的任何位置,而import规则必须出现在CSS样式表的顶部。 加载方式:当浏览器解析到link标签时,会立即请求并加…...

LeetCode-2511-最多可以摧毁的敌人城堡数目

题目链接 代码实现: class Solution {/** 找 1 -> -1 的时候,经过0的最大个数* 解题思路:双指针*/public int captureForts(int[] forts) {int len forts.length;if(len1){return 0;}int max Integer.MIN_VALUE;boolean flag false;boo…...

iOS开发Swift-2-图片视图、App图标-赏月App

1.创建新项目 点击File - New - Project。 选择Single View App,点击Next。 填写文件信息,点击Next。 选择文件位置,点击Create。 修改App显示名称为 “赏月”。 2.设置背景色 选择Main,点击View界面,选择右边属性&…...

node18 vue2启动报错 error:0308010C:digital envelope routines::unsupported

出现原因 貌似是因为是因为 node 17版本开始发布的OpenSSL3.0, 而OpenSSL3.0对允许算法和密钥大小增加了严格的限制,可能会对生态系统造成一些影响。 解决方法 第一种方法降低node版本 降低到17以下即可 ,如项目不能降低版本 看后面的解决方式 第二…...

Java8实战-总结18

Java8实战-总结18 使用流筛选和切片用谓词筛选筛选各异的元素截短流跳过元素 使用流 流让你从外部迭代转向内部迭代。这样&#xff0c;就用不着写下面这样的代码来显式地管理数据集合的迭代(外部迭代)了&#xff1a; List<Dish> vegetarianDishes new ArrayList<>…...

ARM编程模型-指令流水线

流水线技术通过多个功能部件并行工作来缩短程序执行时间&#xff0c;提高处理器核的效率和吞吐率&#xff0c;从而成为微处理器设计中最为重要的技术之一。 1. 3级流水线 到ARM7为止的ARM处理器使用简单的3级流水线&#xff0c;它包括下列流水线级。 &#xff08;1&#xff0…...

邮件营销:高效的节日宣传方式

每个国家都有当地的传统节日&#xff0c;像是我国刚过去的端午节&#xff0c;即将迎来的中秋节、国庆节。我们除了会进行一些传统习俗外&#xff0c;各路商家还会趁这个机会开启促销活动。 对于公司来讲&#xff0c;抓住每一次营销活动都可能会带来更高的营销额&#xff0c;或…...

Leetcode109. 有序链表转换二叉搜索树

力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 给定一个单链表的头节点 head &#xff0c;其中的元素 按升序排序 &#xff0c;将其转换为高度平衡的二叉搜索树。 本题中&#xff0c;一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度…...

基于Googlenet深度学习网络的人脸身份识别matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 matlab2022a 3.部分核心程序 ..................................................................... % 定义修改的范围 …...

vue2 生命周期,工程化开发入门

一、今日目标 1.生命周期 生命周期介绍生命周期的四个阶段生命周期钩子声明周期案例 2.工程化开发入门 工程化开发和脚手架项目运行流程组件化组件注册 二、Vue生命周期 思考&#xff1a;什么时候可以发送初始化渲染请求&#xff1f;&#xff08;越早越好&#xff09;什么…...

Elasticsearch 分布式搜索——聚合

1.聚合的种类 聚合常见的有三类&#xff1a; **桶&#xff08;Bucket&#xff09;**聚合&#xff1a;用来对文档做分组 TermAggregation&#xff1a;按照文档字段值分组&#xff0c;例如按照品牌值分组、按照国家分组Date Histogram&#xff1a;按照日期阶梯分组&#xff0c;例…...

苹果将在iPhone16系列中引入微透镜阵列技术,亮度更高、功耗更低

根据韩国媒体The Elec的报道&#xff0c;苹果公司正与其主要供应商三星和LG展开合作&#xff0c;以评估并衡量是否有必要在明年的iPhone 16系列中引入微透镜&#xff08;micro-lens&#xff09;技术来升级屏幕。 这项方案集中在OLED屏幕架构上&#xff0c;计划采用微透镜阵列&…...

Window10 安装 Lua

1、下载地址&#xff1a;https://luabinaries.sourceforge.net/download.html 2、下载 3、解压后共有4个文件&#xff0c;这里我把这几个文件放到如下目录 D:\Program Files\lua-5.4.2\bin 4、定义环境变量 5、打开 powershell&#xff0c;运行 lua54 -v PS C:\Windows\syste…...

Centos替代方案分析(Ubuntu篇)

最受欢迎Linux操作系统 在上百个Linux版本中&#xff0c;Ubuntu和CentOS是最受欢迎的开源操作系统&#xff0c;以其稳定性、高性能和广泛的社区支持而闻名。Ubuntu以友好的用户界面和多样的应用程序生态系统吸引着广大用户&#xff0c;适用于桌面和服务器。而CentOS则因其与RH…...

关于计数以及Index返回订单号升级版可以控制年月日累计(不重复)(sqlite)

1数据库创建&#xff1a; RAGMA foreign_keys false;-- ---------------------------- -- Table structure for OrderSIndex -- ---------------------------- DROP TABLE IF EXISTS "OrderSIndex"; CREATE TABLE "OrderSIndex" ("Id" INTEGER…...

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?

编辑&#xff1a;陈萍萍的公主一点人工一点智能 未来机器人的大脑&#xff1a;如何用神经网络模拟器实现更智能的决策&#xff1f;RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战&#xff0c;在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…...

MPNet:旋转机械轻量化故障诊断模型详解python代码复现

目录 一、问题背景与挑战 二、MPNet核心架构 2.1 多分支特征融合模块(MBFM) 2.2 残差注意力金字塔模块(RAPM) 2.2.1 空间金字塔注意力(SPA) 2.2.2 金字塔残差块(PRBlock) 2.3 分类器设计 三、关键技术突破 3.1 多尺度特征融合 3.2 轻量化设计策略 3.3 抗噪声…...

SkyWalking 10.2.0 SWCK 配置过程

SkyWalking 10.2.0 & SWCK 配置过程 skywalking oap-server & ui 使用Docker安装在K8S集群以外&#xff0c;K8S集群中的微服务使用initContainer按命名空间将skywalking-java-agent注入到业务容器中。 SWCK有整套的解决方案&#xff0c;全安装在K8S群集中。 具体可参…...

模型参数、模型存储精度、参数与显存

模型参数量衡量单位 M&#xff1a;百万&#xff08;Million&#xff09; B&#xff1a;十亿&#xff08;Billion&#xff09; 1 B 1000 M 1B 1000M 1B1000M 参数存储精度 模型参数是固定的&#xff0c;但是一个参数所表示多少字节不一定&#xff0c;需要看这个参数以什么…...

ESP32 I2S音频总线学习笔记(四): INMP441采集音频并实时播放

简介 前面两期文章我们介绍了I2S的读取和写入&#xff0c;一个是通过INMP441麦克风模块采集音频&#xff0c;一个是通过PCM5102A模块播放音频&#xff0c;那如果我们将两者结合起来&#xff0c;将麦克风采集到的音频通过PCM5102A播放&#xff0c;是不是就可以做一个扩音器了呢…...

Module Federation 和 Native Federation 的比较

前言 Module Federation 是 Webpack 5 引入的微前端架构方案&#xff0c;允许不同独立构建的应用在运行时动态共享模块。 Native Federation 是 Angular 官方基于 Module Federation 理念实现的专为 Angular 优化的微前端方案。 概念解析 Module Federation (模块联邦) Modul…...

OpenLayers 分屏对比(地图联动)

注&#xff1a;当前使用的是 ol 5.3.0 版本&#xff0c;天地图使用的key请到天地图官网申请&#xff0c;并替换为自己的key 地图分屏对比在WebGIS开发中是很常见的功能&#xff0c;和卷帘图层不一样的是&#xff0c;分屏对比是在各个地图中添加相同或者不同的图层进行对比查看。…...

【Oracle】分区表

个人主页&#xff1a;Guiat 归属专栏&#xff1a;Oracle 文章目录 1. 分区表基础概述1.1 分区表的概念与优势1.2 分区类型概览1.3 分区表的工作原理 2. 范围分区 (RANGE Partitioning)2.1 基础范围分区2.1.1 按日期范围分区2.1.2 按数值范围分区 2.2 间隔分区 (INTERVAL Partit…...

python报错No module named ‘tensorflow.keras‘

是由于不同版本的tensorflow下的keras所在的路径不同&#xff0c;结合所安装的tensorflow的目录结构修改from语句即可。 原语句&#xff1a; from tensorflow.keras.layers import Conv1D, MaxPooling1D, LSTM, Dense 修改后&#xff1a; from tensorflow.python.keras.lay…...

Xen Server服务器释放磁盘空间

disk.sh #!/bin/bashcd /run/sr-mount/e54f0646-ae11-0457-b64f-eba4673b824c # 全部虚拟机物理磁盘文件存储 a$(ls -l | awk {print $NF} | cut -d. -f1) # 使用中的虚拟机物理磁盘文件 b$(xe vm-disk-list --multiple | grep uuid | awk {print $NF})printf "%s\n"…...