1. 从零编写最小可启动Bootloader
任务目标
在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,请检查命令前缀。