推荐使用ARM官方或Linaro提供的GCC工具链:
# ARM官方工具链 (选择适合的版本)
wget https://developer.arm.com/-/media/Files/downloads/gnu-a/10.3-2021.07/binrel/gcc-arm-10.3-2021.07-x86_64-arm-none-linux-gnueabihf.tar.xz
tar xf gcc-arm-10.3-2021.07-x86_64-arm-none-linux-gnueabihf.tar.xz
export PATH=$PATH:/path/to/gcc-arm-10.3-2021.07-x86_64-arm-none-linux-gnueabihf/bin
# 或者使用包管理器安装 (Ubuntu/Debian)
sudo apt-get install gcc-arm-linux-gnueabihf g++-arm-linux-gnueabihf
sudo apt-get install build-essential git cmake
sudo apt-get install gdb-multiarch openocd
sudo apt-get install binutils-arm-linux-gnueabi
基本编译命令示例:
arm-none-linux-gnueabihf-gcc -mcpu=cortex-a9 -mfloat-abi=hard -mfpu=neon -O2 -o program program.c
常用选项说明:
- -mcpu=
:指定ARM处理器型号(如cortex-m3, cortex-a8等)
- -mfloat-abi=
:浮点ABI(hard/soft/softfp)
- -mfpu=
:浮点单元(neon/vfp等)
- -mthumb
:生成Thumb指令集代码
- -O
:优化级别(-O0到-O3)
CC = arm-none-linux-gnueabihf-gcc
CFLAGS = -mcpu=cortex-a9 -mfloat-abi=hard -mfpu=neon -O2 -Wall
all: program
program: program.o
$(CC) $(CFLAGS) -o $@ $^
%.o: %.c
$(CC) $(CFLAGS) -c -o $@ $<
clean:
rm -f *.o program
cmake_minimum_required(VERSION 3.5)
project(ARM_Project)
set(CMAKE_SYSTEM_NAME Linux)
set(CMAKE_SYSTEM_PROCESSOR arm)
set(CMAKE_C_COMPILER arm-none-linux-gnueabihf-gcc)
set(CMAKE_CXX_COMPILER arm-none-linux-gnueabihf-g++)
add_executable(program program.c)
target_compile_options(program PRIVATE -mcpu=cortex-a9 -mfloat-abi=hard -mfpu=neon -O2)
sudo apt-get install qemu-user-static
qemu-arm-static ./program
arm-none-linux-gnueabihf-gdb program
(gdb) target remote localhost:1234
(gdb) load
(gdb) continue
sudo apt-get install perf-tools-unstable
# 交叉编译时添加-g选项保留调试信息
arm-none-linux-gnueabihf-objdump
:反汇编工具arm-none-linux-gnueabihf-readelf
:查看ELF文件信息arm-none-linux-gnueabihf-size
:查看程序大小以上配置提供了一个完整的ARM交叉编译开发环境,可根据具体项目需求进行调整。