工具鏈介紹


約定

我的博客
原文鏈接

注意: 除非另有指定,本文檔假定:

  • ARM Cortex-M3 處理器的小端模式
  • ARM EABI 應用二進制接口
  • GNU GCC 工具鏈

工具鏈

一個完整的軟件工具鏈包括如下程序: 將源代碼轉化為二進制機器碼;將單獨的匯編/編譯的代碼模塊鏈接到一起;反匯編二進制代碼;轉換格式。

以匯編源碼文件作為起始文件,.s 文件,經過匯編器匯編生成 .o 目標文件,目標文件與鏈接文件 .ld 文件進行鏈接,通過鏈接器生成可執行文件,並進一步生成 .bin 文件以及可反匯編的 .lst 文件。

一個典型的 GNU 匯編工具鏈包括上面的過程,以及下面的程序:

  • as 作為匯編器,將高級編程語言轉換為二進制機器碼。它通常以 .s 作為輸入,輸出 .o 目標文件
  • ld 作為鏈接器,解析多個目標文件的外部符號引用並分配數據段,輸出一個單個的可執行文件。它通常以 .o 目標文件以及 .ld 鏈接腳本作為輸入,以 .out 可執行文件作為輸出
  • objcopy.bin 文件復制並轉化為 .bin 文件
  • objdump 通常用來反匯編

以 C/C++ 作為源碼

如果你希望寫 C/C++ 文件或混合 匯編/C 代碼,編譯時,你需要編譯器。GNU Compiler Collection (GCC) 包含所有的工具。C/C++ 編譯器 (gcc/g++) 以 C/C++ 作為源碼,以及預匯編的目標感i奧文件,以及預編譯的二進制文件,以這些輸入生成目標文件,輸出可執行文件。

在這個過程中會用到如下的程序:

  • ar 從文檔中創建、調整、提取出實例
  • nlmconv 將目標代碼轉化為 NLM
  • nm 從目標文件中列出符號
  • ranlib 從文檔中生成一個內容索引
  • readelfELF 格式的目標文件中展示信息
  • size 展示目標或文檔的段以及他們的大小
  • strip 忽略嵌入到目標文件中的符號

安裝

開發新的硬件平台的軟件,第一步是安裝開發軟件需要的工具鏈。包括確定安裝匯編器、鏈接器、編譯器、軟件庫、仿真器、程序以及其他目標架構支持的工具。在本例中,我們的目標是 ARM Cortex-M3 處理器,基於 ARMv7 架構。考慮到花費的代價以及可獲取程度,我們這里使用 GNU GCC 編譯鏈。GCC 是極受歡迎的開源工具鏈,可以用在諸如 Intel x86ARM v4/5/6/7TI MSPAtmel AVR 等架構的設備上。因為大部分 GCC 工具是可以免費下載的,它們可以被任何人使用。注意: 當開發用的主機與目標架構不同時,會將工具鏈稱為 交叉編譯鏈 (即,如果你希望在基於 x86 的架構的 Linux 設備上開發 ARM 架構的軟件,那么你需要這么一個交叉編譯鏈)。

Unix 交叉編譯器的名命傳統可能會令人迷惑。如果你想要查找一個 ARM 編譯器,那么你可能找到如下幾個工具鏈: arm-none-linux-gnueabiarm-none-eabiarm-eabi,以及 arm-softfloat-linux-gnuUnix 交叉編譯器使用如下的名命方式: arch[-vendor][-os]-abi。其中:

  • arch 為目標架構,在我們的示例情景下是 ARM
  • vendor 為工具鏈提供者
  • os 為目標操作系統,如果有的話,用來決定鏈接以及系統調用應用的庫 (比如: newlibglibccrt0 等)
  • abi 指定使用應用程序二進制接口,確保不同的工具生成的二進制內容可以進行交互操作

下面的一些例子解釋:

  • arm-none-eabi 目標架構為 ARM 架構,沒有提供者,目標不為操作系統(即,目標為裸機程序),並遵守 ARM EABI
  • arm-none-linux-gnueabi 是可以安裝到基於 Debian 的系統 (使用包管理工具 apt,包名為 gcc-arm-linux-gnueabi)。這個工具鏈目標為 ARM 架構,沒有提供者,創建運行在 Linux 操作系統上的可執行程序,遵守 GNU EABI
  • arm-eabi 安卓 ARM 編譯器

安裝編譯鏈

對於 linux 系統,只需要將編譯鏈所在的路徑導入到環境變量 PATH 中即可,如下命令:

export PATH="tool_chain/bin_path/:$PATH"

當然這一種安裝方式只是臨時的安裝,只在當前終端下有效。如果希望啟動就生效,一種選擇是寫入到啟動腳本中,比如 ubuntu 中編輯 /etc/profile 文件。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM