1. 搭建嵌入式交叉编译环境

搭建嵌入式交叉编译环境 学习卡片

任务目标

在x86_64 Linux主机上安装ARM交叉编译工具链,编写一个最小C程序并交叉编译为ARM目标文件,通过file命令验证生成文件的架构类型,确认工具链工作正常。

环境与依赖

  • 主机系统:Ubuntu 22.04 LTS(x86_64)
  • 工具链:gcc-arm-linux-gnueabihf(ARM 32位硬浮点)
  • 安装命令:sudo apt update && sudo apt install -y gcc-arm-linux-gnueabihf

关键完整代码

创建文件 hello_arm.c:

#include <stdio.h>

int main(void) {
    printf("ARM cross-compile OK\n");
    return 0;
}

编译与验证

在终端依次执行以下命令:

# 交叉编译(生成ARM 32位可执行文件)
arm-linux-gnueabihf-gcc -o hello_arm hello_arm.c

# 验证目标文件架构
file hello_arm

# 查看文件类型(ELF 32-bit LSB executable, ARM)
readelf -h hello_arm | grep Machine

通过判定标准

  • file hello_arm 输出包含 ELF 32-bit LSB executable, ARM, EABI5,确认生成的是ARM架构目标文件而非x86文件。
  • readelf -h 输出中 Machine 字段显示为 ARM。
  • 编译过程无报错,生成的可执行文件存在。

若需在目标板上运行,可将 hello_arm 通过 scp 或 adb push 传输至ARM设备,执行后输出 ARM cross-compile OK。本案例仅验证交叉编译工具链可用性,不涉及实际板卡部署。

常见问题

  • 命令找不到:确认工具链已安装,或使用完整路径 /usr/bin/arm-linux-gnueabihf-gcc。
  • 缺少32位库:若主机为纯64位系统且未启用多架构,安装 libc6-dev-i386 即可。
  • 架构不符:若输出显示 x86-64,说明误用了本机 gcc,请检查命令前缀。