close

工作上用了這麼久的cross compile環境總是人家準備好的

所以筆記一下過程好讓自己也可以熟悉怎麼打造一個開發環境

大致上的方法可以參考http://www.gnuarm.com/

 

要準備cross compile環境, 須準備底下幾個pkg

binutils

gcc

newlib

這些pkg都需要把他build成support ARM的binary.

所以這邊的作法都是去抓source來compile成for ARM的pkg

 

binutils抓的是binutils-2.20.1

1. Compile binutils from source

./configure --target=arm-elf --prefix=/toolchain/arm-elf --enable-interwork --enable-multilib

參數解釋如下:

 

A. --target

這裡分成兩種格式 arm-elf 與 arm-linux

參數 arm-linux 所產生的binutils, 在產生target的binary code時會去調用linux所使用的glibc library (for target)

並作dynamic link, 所產生出的binary code適用於有linux os存在的環境

參數 arm-elf 所產生的bintuils, 在產生target的binary code時則不會去調用glibc, 可以自己選擇newlib或uClibc

為static link

Glibc的code size比較大(為了與linux作搭配), 所以除非是要開發linux based的嵌入式環境,

不然大部分會為了省空間而選擇newlib (這部分也有考量到license問題, Glibc是LGPL, newlib是BSD)

當然若要用arm-elf 搭配 static glibc也是可以, 但就是會有license問題 (static link就要公開source code了)

在linux上把glibc弄成dynamic link就是為了解決license的問題

 

B. --prefix

這個參數是用來指定bulid出來的binary是要放在哪個目錄底下

 

C. --enable-interwork

這個選項是for ARM only, 因為ARM處理器有ARM/Thumb mode的分別

並允許程式執行到一半從ARM mode切成Thumb mode, 或反之

因此為了讓binutils可以產生這類mode切換的binary因此需要加這個選項

 

D. --enable-multilib

打開這個選項可以讓binutils具有產生支援不同設定target的binary

舉例來說, 若CPU同時可以支援big/little endian, 那若沒有這個選項時

binutils在產生target的程式碼時:

big endian的binutils會產生出for big endian的target binary

同理little endian的binutils才能產生little endian binary

由於為了能夠讓big/little endian都能夠使用

因此加了這個選項就可以讓binutils同時支援不同設定的target

arrow
arrow
    全站熱搜

    kaogold3 發表在 痞客邦 留言(0) 人氣()