news 2026/5/19 13:07:24

保姆级教程:在Ubuntu 22.04上搞定ARM和RISC-V裸机开发环境(arm-gnu-toolchain + riscv-gnu-toolchain)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
保姆级教程:在Ubuntu 22.04上搞定ARM和RISC-V裸机开发环境(arm-gnu-toolchain + riscv-gnu-toolchain)

保姆级教程:在Ubuntu 22.04上搞定ARM和RISC-V裸机开发环境

嵌入式开发的世界里,ARM和RISC-V架构正掀起一场革命。作为一名刚踏入这个领域的开发者,配置好开发环境就像战士磨利自己的剑——这是你征服硬件世界的第一步。本文将带你从零开始,在Ubuntu 22.04系统上搭建完整的ARM64(aarch64)和RISC-V(riscv64)裸机开发环境,让你能够编译操作系统内核、Bootloader或裸机应用程序。

1. 环境准备与工具链概述

在开始之前,我们需要明确几个关键概念。裸机开发指的是在没有操作系统支持的环境下直接与硬件交互的编程方式,这与常规的Linux应用程序开发有本质区别。因此,我们需要专门的交叉编译工具链——这些工具运行在你的x86_64主机上,但生成的却是ARM或RISC-V架构的可执行代码。

对于ARM64架构,我们将使用aarch64-none-elf工具链;而对于RISC-V,则是riscv64-unknown-elf工具链。这两种工具链的主要区别在于:

  • 获取方式:ARM工具链可直接从官网下载预编译版本,而RISC-V工具链通常需要从源码编译
  • 依赖管理:ARM工具链开箱即用,RISC-V工具链需要处理子模块和依赖
  • 安装位置:ARM工具链可放在任意目录,RISC-V工具链推荐安装在/opt/riscv

提示:在开始安装前,请确保你的Ubuntu 22.04系统已更新到最新状态:

sudo apt update && sudo apt upgrade -y

2. ARM64工具链安装指南

ARM官方提供了预编译的工具链,这大大简化了我们的安装过程。以下是详细步骤:

2.1 下载工具链

访问ARM官方工具链下载页面:

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

在页面中找到"x86_64 Linux hosted cross toolchains"部分,选择"AArch64 bare-metal target (aarch64-none-elf)"对应的最新版本。截至本文撰写时,最新稳定版本是13.2.Rel1,文件名通常为:

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

下载完成后,使用以下命令解压:

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

2.2 安装与环境变量配置

为了保持系统整洁,建议将工具链移动到/opt目录:

sudo mv arm-gnu-toolchain-x86_64-aarch64-none-elf /opt/

然后编辑你的~/.bashrc文件,添加以下内容:

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

使更改立即生效:

source ~/.bashrc

2.3 验证安装

运行以下命令验证工具链是否安装成功:

aarch64-none-elf-gcc --version

你应该看到类似这样的输出:

aarch64-none-elf-gcc (Arm GNU Toolchain 13.2.Rel1 (Build arm-13.7)) 13.2.0 Copyright (C) 2023 Free Software Foundation, Inc.

3. RISC-V工具链编译安装

与ARM不同,RISC-V工具链需要从源代码编译。这个过程更为复杂,但同时也更灵活。

3.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

3.2 获取源代码

官方推荐的方法是直接克隆仓库:

git clone https://github.com/riscv/riscv-gnu-toolchain

然而,由于网络问题,你可能需要添加--recursive参数:

git clone --recursive https://github.com/riscv/riscv-gnu-toolchain

如果仍然遇到问题,可以考虑使用国内镜像源:

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

3.3 编译与安装

进入工具链目录并开始编译:

cd riscv-gnu-toolchain ./configure --prefix=/opt/riscv make -j$(nproc)

编译过程可能需要数小时,取决于你的机器性能。完成后,添加环境变量:

echo 'export PATH=$PATH:/opt/riscv/bin' >> ~/.bashrc source ~/.bashrc

3.4 验证安装

检查工具链是否正常工作:

riscv64-unknown-elf-gcc --version

预期输出类似:

riscv64-unknown-elf-gcc (GCC) 12.2.0 Copyright (C) 2022 Free Software Foundation, Inc.

4. 常见问题与解决方案

在实际安装过程中,你可能会遇到以下问题:

4.1 网络连接问题

症状:git clone或子模块更新失败

解决方案

  1. 使用--recursive参数
  2. 尝试国内镜像源
  3. 手动下载子模块并放置到正确位置

4.2 编译错误

症状:make过程中出现错误

解决方案

  1. 确保所有依赖已安装
  2. 检查错误信息中缺少的库
  3. 尝试降低并行编译等级(如make -j2

4.3 环境变量不生效

症状:命令找不到

解决方案

  1. 确认~/.bashrc修改正确
  2. 执行source ~/.bashrc
  3. 检查路径是否存在拼写错误

5. 工具链使用示例

现在,让我们通过一个简单的裸机程序来测试我们的工具链。

5.1 ARM64示例

创建hello_arm.c

void _start() { while(1); }

编译:

aarch64-none-elf-gcc -nostdlib -ffreestanding -c hello_arm.c -o hello_arm.o aarch64-none-elf-ld -Ttext=0x80000 hello_arm.o -o hello_arm.elf

5.2 RISC-V示例

创建hello_riscv.c

void _start() { while(1); }

编译:

riscv64-unknown-elf-gcc -nostdlib -ffreestanding -c hello_riscv.c -o hello_riscv.o riscv64-unknown-elf-ld -Ttext=0x80000000 hello_riscv.o -o hello_riscv.elf

6. 进阶配置与优化

6.1 多版本管理

如果你需要同时使用多个版本的工具链,可以考虑以下目录结构:

/opt/toolchains/ ├── arm/ │ ├── 12.2/ │ └── 13.2/ └── riscv/ ├── 11.1/ └── 12.2/

然后通过修改.bashrc中的PATH变量来切换版本。

6.2 编译优化

对于大型项目,编译RISC-V工具链时可以尝试这些优化:

make -j$(nproc) BUILD_STAGE1_CXXFLAGS="-O3 -march=native" BUILD_STAGE2_CXXFLAGS="-O3 -march=native"

6.3 自动化脚本

创建一个安装脚本可以简化未来的环境搭建:

#!/bin/bash # install_arm_toolchain.sh VERSION="13.2.rel1" wget https://developer.arm.com/-/media/Files/downloads/gnu/$VERSION/binrel/arm-gnu-toolchain-$VERSION-x86_64-aarch64-none-elf.tar.xz tar xvf arm-gnu-toolchain-$VERSION-x86_64-aarch64-none-elf.tar.xz sudo mv arm-gnu-toolchain-$VERSION-x86_64-aarch64-none-elf /opt/ echo 'export PATH=$PATH:/opt/arm-gnu-toolchain-$VERSION-x86_64-aarch64-none-elf/bin' >> ~/.bashrc

7. 开发环境维护

保持工具链更新是重要的维护工作:

  • ARM工具链:定期检查官网获取最新版本
  • RISC-V工具链:可以定期git pull并重新编译
  • 依赖管理:使用apt list --installed记录当前安装的依赖

对于团队开发,考虑使用Docker容器来封装整个开发环境,确保所有成员使用相同的工具链版本。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/19 13:07:21

redis安装(Ubuntu)

1.更新系统软件包 sudo apt update2.安装Redis sudo apt install redis-server进入系统用cd / 返回根目录,然后再换到/usr/local/src 3.验证Redis是否运行 sudo systemctl status redis-server4.配置Redis(可选) Redis配置文件位置:/etc/redi…

作者头像 李华
网站建设 2026/5/19 13:07:20

论文查重焦虑?这个AI降重神器让我直呼救星!

论文查重焦虑?这个AI降重神器让我直呼救星! 前言 **从事海外平台服务多年,我们深知每一位出海客户的不易。 凭借丰富的实操经验与真实的成功案例,帮助过无数客户成功处理。 多年老店,诚信经营,是我们最根本…

作者头像 李华
网站建设 2026/5/19 13:05:46

如何用OBS实时字幕插件打造无障碍直播新体验

如何用OBS实时字幕插件打造无障碍直播新体验 【免费下载链接】OBS-captions-plugin Closed Captioning OBS plugin using Google Speech Recognition 项目地址: https://gitcode.com/gh_mirrors/ob/OBS-captions-plugin OBS-captions-plugin是一个基于Google Speech Rec…

作者头像 李华
网站建设 2026/5/19 13:04:06

Sunshine游戏串流:5步打造你的家庭游戏共享中心

Sunshine游戏串流:5步打造你的家庭游戏共享中心 【免费下载链接】Sunshine Self-hosted game stream host for Moonlight. 项目地址: https://gitcode.com/GitHub_Trending/su/Sunshine 你是否曾梦想过在客厅大电视上畅玩书房里的PC游戏?或者想在…

作者头像 李华
网站建设 2026/5/19 13:03:15

Node-RED Docker部署进阶:如何优雅管理多用户权限与自定义主题?

Node-RED Docker部署进阶:多用户权限与主题定制实战指南 在企业级物联网和自动化流程开发中,Node-RED作为可视化编程工具正被越来越多团队采用。但当多个开发者需要协作时,默认的单用户模式会带来权限混乱、界面风格不统一等问题。本文将深入…

作者头像 李华