aarch64-none-elf-gcc与aarch64-linux-gnu-gcc

发布于:2025-04-02 ⋅ 阅读:(19) ⋅ 点赞:(0)

1. 场景描述

在Ubuntu 24.04.1 LTS x86_64架构下交叉编译能跑在aarch64架构下裸机程序,遇到缺aarch64-none-elf-gcc的情况,做此记录。

2. aarch64-none-elf-gcc与aarch64-linux-gnu-gcc

  • 运行环境
    • aarch64-none-elf-gcc 生成的代码是 裸机程序(不依赖操作系统),适用于编写 OS 内核、Bootloader、嵌入式软件。
    • aarch64-linux-gnu-gcc 生成的代码依赖 GNU/Linux 运行环境,适用于 Linux 平台的应用开发。
  • 标准库
    • aarch64-none-elf-gcc 可能使用 newlib 或者 没有标准 C 库,因为裸机环境中通常没有 glibc。
    • aarch64-linux-gnu-gcc 依赖 glibc 或者 musl,适用于 Linux 用户态开发。
  • 链接方式
    • aarch64-none-elf-gcc 不会 链接 Linux 运行时 (glibc),通常使用裸机运行时或者手写的 start-up 代码。
    • aarch64-linux-gnu-gcc 需要 兼容 Linux 的 glibc 运行库,可以运行在 Linux 发行版上。
  • 适用场景
    • 编写 AArch64 内核、Bootloader、裸机程序:用 aarch64-none-elf-gcc。
    • 编写 Linux 用户态程序(比如运行在 ARM 服务器上的 C 代码):用 aarch64-linux-gnu-gcc。

差别汇总如下表所示:

编译器 目标架构 运行环境 主要用途
aarch64-none-elf-gcc AArch64 裸机(bare-metal) 无操作系统 用于编译嵌入式系统、OS 内核、Bootloader
aarch64-linux-gnu-gcc AArch64 Linux 用户空间 用于编译 Linux 应用程序、库

3. 安装配置

3.1 aarch64-linux-gnu-gcc

在Ubuntu 24.04.1 LTS需要aarch64-linux-gnu-gcc编译器,仅仅需要通过apt进行包安装即可

apt-get install gcc-aarch64-linux-gnu

提供的命令如下图所示:
在这里插入图片描述

3.2 aarch64-none-elf-gcc

3.2.1 工具链下载

下载地址:

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

根据实验平台(x86_64上交叉编译AArch64)需要下载相关版本

wget https://developer.arm.com/-/media/Files/downloads/gnu/14.2.rel1/binrel/arm-gnu-toolchain-14.2.rel1-x86_64-aarch64-none-elf.tar.xz

3.2.2 配置环境变量

解压

xz -d arm-gnu-toolchain-14.2.rel1-x86_64-aarch64-none-elf.tar.xz 
tar -xvf arm-gnu-toolchain-14.2.rel1-x86_64-aarch64-none-elf.tar -C /opt/

设置环境变量
vim ~/.bashrc

export TOOLCHAIN=/opt/arm-gnu-toolchain-14.2.rel1-x86_64-aarch64-none-elf
export PATH=$PATH:$TOOLCHAIN/bin

使环境变量生效

source .bashrc

提供的命令如下图所示:
在这里插入图片描述现在就可以基于aarch64-none-elf-gcc编译器交叉编译aarch64裸机程序了。

注:ELF(Executable and Linkable Format),ELF(可执行与可链接格式)是一种 文件格式,用于存储可执行文件、目标文件、共享库 和 核心转储(core dump)。它是 Linux 及大多数 Unix 系统 上的标准可执行文件格式。


网站公告

今日签到

点亮在社区的每一天
去签到