Embedded
ARM平台有通用工具鏈/編譯器嗎?
最近,我嘗試為 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 寄存器和浮點寄存器之間的傳輸速度很慢。但是對於連結,系統需要對此達成一致。- 對拇指的支持也是可選的。如果核心支持,您可以使用其中任何一個,但現在不讓編譯器選擇拇指模式將是愚蠢的。