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

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

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

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

一、ARM64

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

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

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

其中的none 表示的是 通用的、无特定的系统供应商 的含义

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)

下载下来的压缩包里包含了可执行文件位于 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

相关推荐

  1. 构建 aarch64 以及 riscv64 交叉编译工具裸机

    2024-01-16 19:16:06       53 阅读
  2. rocketmq交叉编译aarch64 GNU/Linux

    2024-01-16 19:16:06       47 阅读
  3. LINUX交叉编译arm/aarch64简单脚本

    2024-01-16 19:16:06       44 阅读
  4. Qemu 启动 Linux(aarch64riscv64

    2024-01-16 19:16:06       49 阅读
  5. 交叉编译aarch64的Qt5.12.2,附带Mysql插件编译

    2024-01-16 19:16:06       23 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-01-16 19:16:06       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-01-16 19:16:06       100 阅读
  3. 在Django里面运行非项目文件

    2024-01-16 19:16:06       82 阅读
  4. Python语言-面向对象

    2024-01-16 19:16:06       91 阅读

热门阅读

  1. Python中loguru的配置和使用

    2024-01-16 19:16:06       52 阅读
  2. [HarmonyOS]第一课:运行HelloWorld

    2024-01-16 19:16:06       54 阅读
  3. 《设计模式的艺术》笔记 - 建造者模式

    2024-01-16 19:16:06       38 阅读
  4. GBASE南大通用ExecuteScalar 方法

    2024-01-16 19:16:06       61 阅读
  5. 聊聊PowerJob的QueryConvertUtils

    2024-01-16 19:16:06       47 阅读
  6. liunx常用命令

    2024-01-16 19:16:06       47 阅读
  7. fs 模块

    2024-01-16 19:16:06       49 阅读
  8. 重装系统备份及初始化笔记

    2024-01-16 19:16:06       56 阅读
  9. RSA非对称加密

    2024-01-16 19:16:06       48 阅读
  10. HTML 入门 干货 总结

    2024-01-16 19:16:06       56 阅读