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

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

任务目标

在x86_64主机上安装ARM交叉编译工具链,编写一个简单的C程序,交叉编译生成ARM可执行文件,并验证该文件确实为ARM架构且可在目标板上运行。

环境与依赖

  • 主机系统:Ubuntu 20.04/22.04 x86_64(其他Linux发行版命令略有差异)
  • 目标架构:ARM 32位(armv7,适用于多数车载i.MX6/AM335x平台)
  • 工具链:gcc-arm-linux-gnueabihf(CodeSourcery/ Linaro 的发行版打包版本)

安装交叉编译工具链

sudo apt update
sudo apt install -y gcc-arm-linux-gnueabihf binutils-arm-linux-gnueabihf

安装完成后确认版本:

arm-linux-gnueabihf-gcc --version

编写并交叉编译测试程序

创建 hello_auto.c:

#include <stdio.h>

int main(void) {
    printf("Automotive Embedded Linux: cross-compile OK\n");
    return 0;
}

执行交叉编译:

arm-linux-gnueabihf-gcc -o hello_auto hello_auto.c

验证编译产物

检查生成文件的架构类型:

file hello_auto

预期输出(确定性结果):

hello_auto: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux-armhf.so.3, for GNU/Linux 3.2.0, not stripped

若输出中显示 ARM 而非 x86-64,说明交叉编译成功。

在目标板上运行

将可执行文件拷贝到目标板(以scp为例,IP地址按实际修改):

scp hello_auto root@192.168.1.100:/root/
ssh root@192.168.1.100 "chmod +x /root/hello_auto && /root/hello_auto"

目标板串口/终端输出以下内容即验证通过:

Automotive Embedded Linux: cross-compile OK

常见问题

  • 编译时提示缺少头文件:确认已安装 libc6-dev-armhf-cross(sudo apt install -y libc6-dev-armhf-cross)。
  • 目标板提示无法执行:确认目标板是ARM 32位且支持硬浮点(armhf)。若目标板为armel软浮点,需改用 arm-linux-gnueabi 工具链重新编译。
  • 动态链接问题:若目标板rootfs精简缺少动态链接器,可改用静态编译:arm-linux-gnueabihf-gcc -static -o hello_auto hello_auto.c。

验证路径总结

  1. 主机执行 file hello_auto 确认ARM架构 → 交叉编译正确
  2. 目标板执行 ./hello_auto 输出预期字符串 → 运行验证通过