Preparing GNU toolchain for bare metal ARM on Linux
我想为裸机ARM准备GNU工具链,以将其与Geany IDE一起使用。 有一些这样的教程:为Bare Metal构建GNU ARM工具链,但是我不明白几个步骤。
首先,每个隐式使用Linux OS的人都有gcc,binutils和gdb,那么为什么要下载其他文件呢? 其次,所有教程都告诉我使用以下方式配置gcc:*。/ configure --target = arm-elf。 它甚至做什么? 只是强迫我使用arm-elf-gcc而不是gcc在命令行中调用gcc还是改变了我的gcc的某些内部选项?
到目前为止,我已经准备了makefile,但是我仍然不确定编译器选项。 我没有更改任何gcc配置选项,而是使用以下标志调用编译器:
1 | CFLAGS = -Wall -std=c99 -march=armv7-m -mtune=cortex-m0 |
我可以仅使用带有适当参数的gcc来准备工具链,还是需要在gcc配置中进行一些更改?
海湾合作委员会及其目标
GCC始终配置为发出特定目标的二进制文件。因此,通常在Linux上已经可用的
因此,您需要安装为该目标配置的另一个GCC。那么GCC和其他程序通常都有一个表示目标的前缀:在您的情况下,前缀为
正在安装
- 如果您的Linux发行版提供了一个软件包,则可以安装该软件包(在Debian上是" gcc-arm-none-eabi")。
- 您可以下载预编译的软件包:用于ARM嵌入式处理器的GNU工具。
- 您可以尝试编译一个。如果您想要正确的多库文件,这并不容易。
如果您的Linux发行版提供的软件包> 4.8.0,则应尝试使用该软件包。
如果您要安装多个版本(并且可以轻松在它们之间切换),则第二个选项可能更好。当第二个选项可用时,我停止了为ARM编译GCC。
交叉编译
-
在您的Makefile中,必须确保使用了交叉编译器。您可以在Makefile中使用
$(CC) ,并按以下方式分配它:
1 2 | TOOLCHAIN = arm-none-eabi- CC = $(TOOLCHAIN)gcc |
-
Cortex-M0的编译器标志为
-mcpu=cortex-m0 -mthumb -mfloat-abi=soft ,按惯例已分配给CFLAGS
1 | CFLAGS += -mcpu=cortex-m0 -mthumb -mfloat-abi=soft |
然后,一个(简单的)规则将
1 2 | %.o: %.c $(CC) $(CFLAGS) -o $@ -c $< |
使用