我想为裸机ARM准备GNU工具链,以便与Geany IDE一起使用.有一些像这样的教程:构建裸机的GNU ARM工具链,但我不明白几个步骤.
首先,每个使用Linux操作系统的人都隐式拥有gcc,binutils和gdb,为什么要下载其他人呢?其次所有教程告诉我用这样的东西配置gcc:*./configure --target = arm-elf.它甚至做了什么?难道它只是强迫我使用调用命令行GCC ARM-ELF-GCC,而不是海湾合作委员会或它改变我的gcc内部的一些选项?
到目前为止,我已经准备好了makefile,但我仍然不确定编译器选项.我没有更改任何gcc配置选项,我用这样的标志调用编译器:
CFLAGS = -Wall -std=c99 -march=armv7-m -mtune=cortex-m0
Run Code Online (Sandbox Code Playgroud)
我可以通过使用适当的参数调用gcc来准备工具链,还是需要在gcc配置中进行一些更改?
海湾合作委员会及其目标
GCC始终配置为为特定目标发出二进制文件.所以通常gcc
在Linux上已经可用的目标是"i486-linux-gnu".您无法使用此编译器交叉编译到ARM目标.
因此,您需要安装为该目标配置的另一个GCC; 那么GCC和其他程序通常都有一个指示目标的前缀:在你的情况下,前缀是arm-none-eabi
,然后你用它调用那个GCC arm-none-eabi-gcc
.您可以安装多个GCC,它们不进行交互(如果它们相互作用,您可能搞砸了某些东西 - 如果您手动执行,则始终安装在单独的目录中).
安装
如果您的Linux发行版提供了一个> 4.8.0的软件包,那么您应该尝试一下.如果您想安装多个版本(并且能够轻松地在它们之间切换),第二个选项可能更好.当第二个选项可用时,我停止为ARM编译GCC.
交叉编译
$(CC)
在Makefile中使用,并将其指定为:TOOLCHAIN = arm-none-eabi-
CC = $(TOOLCHAIN)gcc
Run Code Online (Sandbox Code Playgroud)
-mcpu=cortex-m0 -mthumb -mfloat-abi=soft
按惯例分配给CFLAGS
CFLAGS += -mcpu=cortex-m0 -mthumb -mfloat-abi=soft
Run Code Online (Sandbox Code Playgroud)
然后一个(简单的)规则编制.c
到.o
的样子
%.o: %.c
$(CC) $(CFLAGS) -o $@ -c $<
Run Code Online (Sandbox Code Playgroud)
使用arm-elf-
前缀的教程已过时.目前arm-none-eabi-
正在使用中.
归档时间: |
|
查看次数: |
2335 次 |
最近记录: |