构建 aarch64 以及 riscv64 交叉编译工具链(裸机)

构建 aarch64 以及 riscv64 交叉编译工具链(裸机)

因为我的需求是构建裸机的程序,所以我选择了裸机相关的交叉工具链

其他工具链也类似,在给出的两个官方链接中提供了所有的交叉工具链,选择合适的工具构建即可

一、ARM64

使用的工具链为:aarch64-none-elf-xxx

aarch64-none-linux-gnu 用于编译在 ARM64 架构的 Linux 内核以及在 Linux 系统上运行的程序

aarch64-none-elf 用于编译在无操作系统环境(裸机)下运行的程序,可以用来编译自定义操作系统等

arm工具链(下载会比较慢):

https://developer.arm.com/downloads/-/arm-gnu-toolchain-downloads

例如:我的操作系统为 ubuntu22.04.3,平台架构为 x86_64

找到其中的 x86_64 Linux hosted cross toolchains,和我的操作系统和平台架构是一致的

下载对应的部分即可

我这里是 aarch64-none-elf-xxx,所以下载如下内容

AArch64 bare-metal target (aarch64-none-elf)

  • arm-gnu-toolchain-13.2.rel1-x86_64-aarch64-none-elf.tar.xz

下载下来的压缩包里包含了可执行文件位于 bin 目录下,即不需要我们本地编译

为了在任意位置可以使用,将其添加到环境变量中

vim ~/.bashrc
# 添加如下内容, 注:我对本地文件夹进行了改名,这个路径需要根据情况进行修改
export PATH=$PATH:/home/jingyu/arm-gnu-toolchain-x86_64-aarch64-none-elf/bin

有时候为了更清晰,可以选择将其 mv/opt 文件夹下,环境变量一致即可

RISCV64 则是源码编译时通过设置 --prefix 参数指定了/opt/riscv 的路径。

二、RISCV64

使用的工具链为:riscv64-unknown-elf-xxx

工具链官方仓库:https://github.com/riscv-collab/riscv-gnu-toolchain

仓库 README 说:

This repository uses submodules, but submodules will fetch automatically on demand, so --recursive or git submodule update --init --recursive is not needed.

# 1、官网的意思是,在构建时会自动下载需要的包
git clone https://github.com/riscv/riscv-gnu-toolchain
# 2、先 clone 仓库,然后添加仓库里的子模块
git clone https://github.com/riscv/riscv-gnu-toolchain
cd riscv-gnu-toolchain
git submodule update --init --recursive
# 3、尽管有魔法,但是我上述两种方式都不成功,在 clone 时指定 --recursive 参数能成功下载
git clone https://github.com/riscv/riscv-gnu-toolchain --recursive

其他老哥的方案(借助gitee):https://blog.csdn.net/limanjihe/article/details/122373942

我使用的是 ubuntu,所以需要以下依赖(其他操作系统查仓库)

sudo apt-get install 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

我要安装的是 riscv64-unknown-elf-xxx 交叉编译工具,对应的是 Newlib 部分

要构建 Newlib 交叉编译器,请选择一个安装路径(可写)。例如 /opt/riscv 则添加 /opt/riscv/bin 到您的PATH. 然后,只需运行以下命令:

# 在 riscv-gnu-toolchain 内进行如下操作
./configure --prefix=/opt/riscv
make	# 可能权限会不够, 使用 sudo make 即可, 使用 -j4 (根据实际情况选择) 参数可以加快编译

然后就能够使用 riscv64-unknown-elf-xxx

添加到环境变量中

vim ~/.bashrc
# 添加如下内容, 注:我对本地文件夹进行了改名,这个路径需要根据情况进行修改
export PATH=$PATH:/opt/riscv/bin

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/637259.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于JavaWeb+SSM+Vue智能社区服务小程序系统的设计和实现

基于JavaWebSSMVue智能社区服务小程序系统的设计和实现 滑到文末获取源码Lun文目录前言主要技术系统设计功能截图订阅经典源码专栏Java项目精品实战案例《500套》 源码获取 滑到文末获取源码 Lun文目录 目录 1系统概述 1 1.1 研究背景 1 1.2研究目的 1 1.3系统设计思想 1 2相…

【排序算法】六、快速排序(C/C++)

「前言」文章内容是排序算法之快速排序的讲解。(所有文章已经分类好,放心食用) 「归属专栏」排序算法 「主页链接」个人主页 「笔者」枫叶先生(fy) 目录 快速排序1.1 原理1.2 Hoare版本(单趟)1.3 快速排序完整代码&…

Excel 根据日期按月汇总公式

Excel 根据日期按月汇总公式 数据透视表日期那一列右击,选择“组合”,步长选择“月” 参考 Excel 根据日期按月汇总公式Excel如何按着日期来做每月求和

Linux内存管理:(九)内存规整

文章说明: Linux内核版本:5.0 架构:ARM64 参考资料及图片来源:《奔跑吧Linux内核》 Linux 5.0内核源码注释仓库地址: zhangzihengya/LinuxSourceCode_v5.0_study (github.com) 1. 引言 伙伴系统以页面为单位来管…

leetcode:每日温度---单调栈

题目: 给定一个整数数组 temperatures ,表示每天的温度,返回一个数组 answer ,其中 answer[i] 是指对于第 i 天,下一个更高温度出现在几天后。如果气温在这之后都不会升高,请在该位置用 0 来代替。 示例&…

js数组的截取和合并

在JavaScript中,你可以使用slice()方法来截取数组,使用concat()方法来合并数组。 截取数组 slice()方法返回一个新的数组对象,这个对象是一个由原数组的一部分浅复制而来。它接受两个参数,第一个参数是开始截取的位置&#xff08…

代码随想录day24

回溯算法 回溯的本质是穷举,穷举所有可能,然后选出我们想要的答案,如果想让回溯法高效一些,可以加一些剪枝的操作。 回溯法,一般可以解决如下几种问题: 1、组合问题:N个数里面按一定规则找出k个…

天龙八部资源提取工具(提取+添加+修改+查看+教程)

可以提取,添加,修改,查看天龙八部里面的数据。非常好用。 天龙八部资源提取工具(提取添加修改查看教程) 下载地址: 链接:https://pan.baidu.com/s/1XOMJ1xvsbD-UUQOv3QfHPQ?pwd0kd0 提取码&…

赛车游戏简单单车C语言版

#include<stdio.h> #include<easyx.h> #include<time.h>#define WIDTH 512 #define HEIGHT 768//定义一个汽车类 struct FCar {//坐标float x, y;// 汽车种类int type;//汽车速度float speed; };//定义全局变量 图片坐标 IMAGE BG_IMG; //背景图片坐标 float…

unity 矩阵探究

public void MatrixTest1(){ ///Matrix4x4 是列矩阵&#xff0c;就是一个vector4表示一列&#xff0c;所以在c#中矩阵和Vector4只能矩阵右乘坐标。但是在shader中是矩阵左乘坐标&#xff0c;所以在shader中是行矩阵 Matrix4x4 moveMatrix1 new Matrix4x4(new Vector4(1,0,0,0)…

pip问题们

pip问题们 下载指定版本已经安装的库列表保存到文本文件中根据依赖文件批量安装库离线安装库&#xff08; .whl 文件&#xff09;pip install githttps:xxxx安装失败解决方法 下载指定版本 安装特定版本的package&#xff0c;通过使用, >, <, >, <来指定一个版本号…

hql(hive sql)中的join及踩过的坑

1 几种join方式 join join对应于inner join 内连接。 当多张表进行join的时候&#xff0c;所有表中与on条件中匹配的数据才会显示。 hql&#xff08;即hive sql&#xff09;的on子句中只支持and&#xff0c;不支持 or&#xff0c;也不支持null的对比。 left outer join 左外连…

2024 年 Vue.js 会发生什么

就像前端开发世界的其他部分一样&#xff0c;Vue 世界发展得很快。在这篇文章中&#xff0c;我想了解一下 Vue 的现状&#xff0c;并分享我对 2024 年发展趋势的预测。 Vue 2 生命周期结束 随着 Vue.js 社区的不断发展&#xff0c;2024 年标志着 Vue 2 生命周期的结束&#x…

logstack 日志技术栈-04-opensource 开源工具 SigNoz+Graylog

3. SigNoz SigNoz 是一个日志收集和分析工具&#xff0c;可以收集和管理来自各种来源的日志、指标、跟踪和异常。 它为使用 OpenTelemetry 检测应用程序提供本机支持&#xff0c;以防止供应商锁定&#xff0c;将收集到的数据存储在 ClickHouse 中&#xff0c;然后在用户友好的…

【实战】SpringBoot自定义 starter及使用

文章目录 前言技术积累SpringBoot starter简介starter的开发步骤 实战演示自定义starter的使用写在最后 前言 各位大佬在使用springboot或者springcloud的时候都会根据需求引入各种starter&#xff0c;比如gateway、feign、web、test等等的插件。当然&#xff0c;在实际的业务…

大模型 RAG 优化 收集一

痛点1&#xff1a;文档切分粒度不好把控&#xff0c;既担心噪声太多又担心语义信息丢失 问题1&#xff1a;如何让LLM简要、准确回答细粒度知识&#xff1f; 问题2&#xff1a;如何让LLM回答出全面的粗粒度&#xff08;跨段落&#xff09;知识&#xff1f; 分析&#xff1a;文…

灵活扩展:深入理解MyBatis插件机制

第1章&#xff1a;MyBatis插件的重要性 大家好&#xff0c;我是小黑&#xff0c;咱们今天要聊的是MyBatis插件&#xff0c;MyBatis&#xff0c;大家都不陌生&#xff0c;它是一个ORM&#xff08;对象关系映射&#xff09;框架&#xff0c;让咱们在操作数据库时能更加优雅。但今…

web漏洞总结大全(基础)

前言 本文章是和cike_y师傅一起写的&#xff0c;cike_y博客&#xff1a;https://blog.csdn.net/weixin_53912233?typeblog 也欢迎大家对本文章进行补充和指正&#xff0c;共同维护这个项目&#xff0c;本文的github项目地址&#xff1a; https://github.com/baimao-box/Sum…

Haxe-UnrealEngine5

Haxe-UnrealEngine5 结论 UE C header > External/**.hx.hx > .h/.cpp&#xff0c;和 UE C 一起编译使用 hxcpp 来调试 .hx good&#xff1a; 理论上不仅限反射代码走 UE C&#xff0c;无需维护 backend&#xff0c;比如 Lua Binding理论上接近 UE C 的性能 bad&…

六、Netty核心模块组件

目录 6.1 BootStrap&#xff0c;ServerBootStrap6.2 Future&#xff0c;ChannelFuture6.3 Channel6.4 Selector6.5 ChannelHandler 以及其实现类6.6 Pipeline 和 ChannelPipeline6.7 ChannelHandlerContext6.8 ChannelOption6.9 EventLoopGroup和其实现类 NioEventLoopGroup6.1…