[英]Difference between the GNU ARM Embedded Toolchain and normal gcc/g++ with bare metal ARM architecture
[英]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。 它甚至做什么? 難道它只是強迫我用,而不是手臂 的gcc-ELF-GCC調用命令行的GCC,它改變我的gcc內部的一些選項?
到目前為止,我已經准備了makefile,但是我仍然不確定編譯器選項。 我沒有更改任何gcc配置選項,而是使用以下標志調用編譯器:
CFLAGS = -Wall -std=c99 -march=armv7-m -mtune=cortex-m0
我可以僅使用帶有適當參數的gcc來准備工具鏈,還是需要在gcc配置中進行一些更改?
海灣合作委員會及其目標
GCC始終配置為發出特定目標的二進制文件。 因此,通常在Linux上已經可用的gcc
具有目標“ i486-linux-gnu”。 您不能使用此編譯器交叉編譯為ARM目標。
因此,您需要安裝為該目標配置的另一個GCC。 那么GCC和其他程序通常都有一個表示目標的前綴:在您的情況下,前綴是arm-none-eabi
,然后您使用arm-none-eabi-gcc
調用該GCC。 您可以安裝多個GCC,但它們不會相互作用(如果相互作用,則可能是您搞砸了-如果手動進行,請始終安裝在單獨的目錄中)。
安裝
如果您的Linux發行版提供的軟件包> 4.8.0,則應嘗試使用該軟件包。 如果您要安裝多個版本(並且能夠輕松在它們之間切換),則第二個選項可能更好。 當第二個選項可用時,我停止為ARM編譯GCC。
交叉編譯
$(CC)
,並按以下方式分配它: TOOLCHAIN = arm-none-eabi-
CC = $(TOOLCHAIN)gcc
-mcpu=cortex-m0 -mthumb -mfloat-abi=soft
,這是按慣例分配給CFLAGS
CFLAGS += -mcpu=cortex-m0 -mthumb -mfloat-abi=soft
然后,一個簡單的規則將.c
編譯為.o
%.o: %.c
$(CC) $(CFLAGS) -o $@ -c $<
使用arm-elf-
前綴的教程已過時。 當前正在使用arm-none-eabi-
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.