[Atmel][Sama5d3-xp] - 由Crosstool-ng取得toolchain

一般在開發嵌入式系統時會先在主機端作開發,接著在主機端產生代碼後再放到目標板上執行程式,直接在主機端開發會有較好的開發效率
但一般主機端大部分是x86的系統,如果想要產生可以在ARM或是其他硬體架構可以執行的程式碼,就需要cross-compiler等相關工具的幫忙,而toolchain就像一個懶人包,裡面包含了特定硬體架構下要產生程式碼所需要用到的所有工具

我們可以使用Crosstool-ng來得到需要的toolcahin

前置作業

安裝ct-ng需要有以下package才可以安裝及編譯

sudo apt-get install autoconf automake libtool-bin libexpat1-dev libncurses5-dev bison flex patch curl cvs texinfo git bc build-essential subversion gawk python-dev gperf unzip pkg-config wget help2man

不同版本的ct-ng所需的package有可能不完全相同,或是某些package已經停止支援必須使用替代的package,這部分可由印出來的log得知來增加或更新需要的package

下載安裝ct-ng

我們可由github得到相關的檔案

git clone https://github.com/crosstool-ng/crosstool-ng.git
cd crosstool-ng

進入到ct-ng目錄之後即可以開始安裝,初始設定會將安裝路徑設在/usr/local/,也可以安裝在local端(目前所在的路徑),我們選擇安裝在local端

autoreconf
./configure --enable-local
make
make install

ct-ng即可使用(因為是安裝在local端,所以必須在此路徑下使用)

配置toolchain

在產生toolchain之前,我們必須先配置好我們需要的toolchain,如果想得知ct-ng可支援產生的toolchain可使用./ct-ng list-samples

Sama5d3-Xplained使用的是ARM Cortex-A5的架構,因此直接輸入以下指令

./ct-ng arm-cortexa5-linux-uclibcgnueabihf

也可以客製化的設定需要的功能

./ct-ng menuconfig
  • Toolchain options裡面的Tuples’s alias可以設定使用cross compiler gcc時要下的指令,我們改成arm-linux來取代原本很長的arm-cortexa5-linux-uclibcgnueabihf
  • 打開c-library裡的Add support for IPV6

產生toolchain

輸入指令

./ct-ng build

等後一段不短的時間之後即可在home底下看到x-tools,裡面即是產生出來的toolchain,接著將bin資料夾的路徑export之後即可使用arm-linux-相關指令

export PATH=$PATH:/home/xxx/x-tools/arm-cortexa5-linux-uclibcgnueabihf/bin

可輸入arm-linux-gcc確認是否可正常使用,若不想每次都重新export此bin檔也可將此段指令加入bashrc

vim ~/.bashrc