一般在開發嵌入式系統時會先在主機端作開發,接著在主機端產生代碼後再放到目標板上執行程式,直接在主機端開發會有較好的開發效率
但一般主機端大部分是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