Embedded

ARM平台有通用工具鏈/編譯器嗎?

  • October 23, 2017

最近,我嘗試為 arm 平台製作自己的交叉編譯工具鏈。我注意到使用 GCC 的 autoconf 腳本,我必須傳遞如下變數:

--with-cpu=cortex-m4 \
--with-fpu=fpv4-sp-d16 \
--with-float=hard \
--with-mode=thumb \

所以似乎不同的 ARM 平台應該有不同的工具鏈/編譯器,因為我必須配置 cpu、fpu 等。但後來我發現這些工具鏈有某種預製的二進製文件。

https://developer.arm.com/open-source/gnu-toolchain/gnu-rm/downloads

我嘗試了這個工具鏈並編譯了一個hello world程序並在我的目標ARM板上嘗試了它,然後它顯示“分段錯誤”。好的,至少不是“無法執行二進製文件:執行格式錯誤”

但我仍然想知道,它為什麼不起作用?或者它是否應該實際工作?

在建構工具鏈本身時,您必須配置要支持的功能。您可以建構一個“苗條”編譯器,只支持您想要的目標所需的功能。

但是您也可以支持 ARM 平台必須提供的所有功能並獲得一個笨拙的編譯器。

對於功能本身,您應該在不同類型之間有所不同:

  • 不需要優化標誌-mcpu,它們只是為了優化某個 ARM 處理器的程式碼
  • fpu另一方面,您的 ARM 核心的功能必須完全可以使用 fpu。
  • float=hard取決於作業系統,而不是處理器:它允許將浮點數傳遞給浮點寄存器中的函式,這可以大大加快速度,因為 ARM 寄存器和浮點寄存器之間的傳輸速度很慢。但是對於連結,系統需要對此達成一致。
  • 對拇指的支持也是可選的。如果核心支持,您可以使用其中任何一個,但現在不讓編譯器選擇拇指模式將是愚蠢的。

引用自:https://unix.stackexchange.com/questions/399907