IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> riscv-gnu-toolchain工具链-从下载到运行 -> 正文阅读

[系统运维]riscv-gnu-toolchain工具链-从下载到运行

reference:
利用码云镜像快速拉取riscv-gnu-toolchain工具链
RISC-V GNU编译环境搭建与运行实践
riscv各种版本gcc工具链编译与安装

1.拉取riscv-gnu-toolchain源码

riscv-gnu-toolchain是riscv的gcc交叉编译工具链
github地址为:https://github.com/riscv/riscv-gnu-toolchain/tree/master

正常拉取的步骤为:

git clone  git@github.com:riscv/riscv-gnu-toolchain.git
cd riscv-gnu-toolchain
git submodule update --init --recursive

但由于外网原因,往往会卡在拉取子模块的阶段(有时有梯子也挺慢的)。
这些子模块包括:

riscv-qemu
riscv-newlib(100MB)
riscv-binutils(394MB)
riscv-gdb(394MB)
riscv-dejagnu(3MB)
riscv-glibc(155MB)
riscv-gcc (1.3GB)

为了解决这个问题,可以拉取码云上的riscv-gnu-toolchain镜像。
码云地址为:https://gitee.com/mirrors/riscv-gnu-toolchain

git clone  https://gitee.com/mirrors/riscv-gnu-toolchain
cd riscv-gnu-toolchain

然而码云上的子模块的地址仍然为github的地址,所以需要分别拉取其子模块在码云上的镜像。(虽然挺麻烦的,但总的来说还是挺快的)

riscv-newlib:https://gitee.com/mirrors/riscv-newlib
riscv-binutils:https://gitee.com/mirrors/riscv-binutils-gdb
riscv-gdb:https://gitee.com/mirrors/riscv-binutils-gdb(riscv-gdb和riscv-binutils为同一个仓库下的不同分支)
riscv-dejagnu:https://gitee.com/mirrors/riscv-dejagnu
riscv-glibc:https://gitee.com/mirrors/riscv-glibc
riscv-gcc:https://gitee.com/mirrors/riscv-gcc

需要注意的是,riscv-gnu-toolchain工具链下子模块拉取的不都是其主分支,我们可以通过其最近的一次commit来判断是那个分支,下图红框处:

这里我直接列出其子模块对应的分支:(工具链可能会更新,要使用最新版本大家自行切换具体分支)

riscv-binutils:riscv-binutils-2.35
riscv-dejagnu:master
riscv-gcc:riscv-gcc-10.2.0
riscv-gdb:fsf-gdb-10.1-with-sim
riscv-glibc:riscv-glibc-2.29
riscv-newlib:master

git clone https://gitee.com/mirrors/riscv-dejagnu

在这里插入图片描述

git clone -b riscv-gcc-10.2.0 https://gitee.com/mirrors/riscv-gcc

在这里插入图片描述

git clone -b riscv-glibc-2.29 https://gitee.com/mirrors/riscv-glibc

在这里插入图片描述

git clone https://gitee.com/mirrors/riscv-newlib

在这里插入图片描述

git clone -b riscv-binutils-2.35 https://gitee.com/mirrors/riscv-binutils-gdb  riscv-binutils

在这里插入图片描述

 git clone -b fsf-gdb-10.1-with-sim https://gitee.com/mirrors/riscv-binutils-gdb  riscv-gdb

在这里插入图片描述

2.编译工具链

安装依赖

sudo apt-get install autoconf automake autotools-dev curl libmpc-dev libmpfr-dev libgmp-dev \
gawk build-essential bison flex texinfo gperf libtool patchutils bc zlib1g-dev libexpat-dev

在这里插入图片描述
在~/.bashrc中添加环境变量
在这里插入图片描述

编译riscv-gnu-toolchain
riscv-gnu-toolchain 工具链分elf-gcc,linux-gnu-gcc两个版本,以及他们对应的32位和64位版本。两个的主要区别在于:

riscv32-unknown-elf-gcc,riscv64-unknown-elf-gcc:使用的riscv-newlib库(面向嵌入式的C库),而且只支持静态链接,不支持动态链接。
riscv32-unknown-linux-gnu-gcc,riscv64-unknown-linux-gnu-gcc:使用的是glibc标准库,支持动态链接。
个人认为从名字上便可以区分两者的使用场景,如果是编译简单,较小的elf程序,使用elf-gcc版本即可,如果编译比较大的程序或者需要动态库(比如编译linux,或opencv库等),推荐使用linux-gnu-gcc版本。

以riscv32为例:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

../configure --prefix=$RISCV --with-arch=rv32gc --with-abi=ilp32d

观察其生成的makefile文件:
在这里插入图片描述

make -j4      #wait...
make install  #No action

在这里插入图片描述
其他编译选项:

# 默认生成64位的编译工具:riscv64-unknown-elf-***
../configure --prefix=$RISCV
make -j4
# 安装至设定的$RISCV路径
make install 

# 生成32位的编译工具:riscv32-unknown-elf-***
../configure --prefix=$RISCV --with-arch=rv32gc --with-abi=ilp32d
make -j4
make install

# 编译linux-gnu-gcc版本(默认64位):riscv64-unknown-linux-gnu-***
../configure --prefix=$RISCV
make linux -j4
make install

查看其配置信息:
在这里插入图片描述

编译运行测试下:
在这里插入图片描述
因为本机为x86架构,所有exec是不能执行的.但可以看到生成了可执行文件.

3.安装QEMU

https://www.qemu.org/docs/master/
https://www.qemu.org/download/

首先安装好依赖:

 sudo apt-get install libglib2.0-dev ninja-build  build-essential zlib1g-dev pkg-config libglib2.0-dev  \
binutils-dev libboost-all-dev autoconf libtool libssl-dev  libpixman-1-dev libpython-dev  \
 virtualenv libmount-dev   libpixman-1-dev

然后按步骤安装:

wget https://download.qemu.org/qemu-6.2.0.tar.xz
tar xvJf qemu-6.2.0.tar.xz
cd qemu-6.2.0
mkdir build
cd build
../configure
make -j4   #wait...

在这里插入图片描述

4.测试

回到helloworld目前下,使用gcc编译c代码,生成的可执行文件可以被qemu中编译出来的qemu-riscv32执行:
在这里插入图片描述

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2022-01-08 14:27:52  更:2022-01-08 14:29:13 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/16 6:37:31-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码