簡體   English   中英

在Linux上為裸機ARM准備GNU工具鏈

[英]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發行版提供了一個軟件包,則可以安裝該軟件包(在Debian上為“ gcc-arm-none-eabi”)。
  • 您可以下載預編譯的軟件包: 用於ARM嵌入式處理器的GNU工具
  • 您可以嘗試編譯一個。 如果您想要正確的多庫文件,這並不容易。

如果您的Linux發行版提供的軟件包> 4.8.0,則應嘗試使用該軟件包。 如果您要安裝多個版本(並且能夠輕松在它們之間切換),則第二個選項可能更好。 當第二個選項可用時,我停止為ARM編譯GCC。

交叉編譯

  • 在您的Makefile中,必須確保使用了交叉編譯器。 您可以在Makefile中使用$(CC) ,並按以下方式分配它:
TOOLCHAIN = arm-none-eabi-
CC = $(TOOLCHAIN)gcc
  • Cortex-M0的編譯器標志為-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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM