轉自:http://hi.baidu.com/%D0%A1%85%C4%B6%AA/blog/item/b4c68e044df8e101728b65ec.html
1.下載製作交叉編譯環境的工具:crosstool(crosstool-0.43.tar.gz)
2.下載編譯過程需要用到的源代碼:
binutils-2.15.tar.bz2
gcc-3.4.5.tar.bz2
glibc-2.3.6.tar.bz2
glibc-linuxthreads-2.3.6.tar.bz2
linux-2.6.26.5.tar.bz2
linux-libc-headers-2.6.12.0.tar.bz2
說明:具體版本號可以有一些不同,後面說講如何設置。
以上七個軟件建議放在同一目錄下,如~/linux/download 目錄下。
3.編譯過程需要用到以下幾個軟件,系統本身沒有安裝,可以運行安裝命令提前做好,因爲編譯一次至少要花半個小時,如果因爲依賴軟件沒有安裝中途會報錯退出,只有從頭再來,那樣很浪費時間的。
sudo apt-get install bison flex build-essential patch libncurses5-dev
具體工作步驟:
1、修改系統配置
1.1 將GCC版本設置爲4.1
Ubuntu 10.10 默認安裝的 gcc 版本爲4.4,這個版本對於語法要求較高,編譯會出錯,目前不宜選用,於是選擇了gcc-4.1,但並不需要卸載gcc-4.4。
sudo apt-get install gcc-4.1
sudo rm /usr/bin/gcc (刪除GCC,它只是個到gcc-4.3.2的軟鏈接文件)
sudo ln -s /usr/bin/gcc-4.1 /usr/bin/gcc (建立GCC到gcc-4.1的軟鏈接)
1.2、修改sh版本
如果運行
ls -la /bin/sh
看到鏈接的是 dash ,則請運行以下命令
sudo dpkg-reconfigure dash
選擇 no 以刪除 dash
此處如果不改好的話,編譯時會出現錯誤
2.解壓軟件包,並進入該目錄,查看重要的腳本文件。
$cd downloads
$tar –zxvf crosstool-0.43.tar.gz
$cd crosstool-0.43
在此目錄下可以看到有很多.sh腳本和.dat配置文件,每一個支持的處理器都有它所相應的腳本。http://www.linuxidc.com/假如選用demo-arm- softfloat.sh 就是建立目標爲支持軟浮點的arm交叉編譯工具鏈。
3.修改demo-arm-softfloat.sh
$vim demo-arm-softfloat.sh
修改下面兩句
TARBALLS_DIR=$HOME/downloads //表示下載的源碼的存放目錄
RESULT_TOP=/opt/crosstools //表示生成的工具鏈的存放目錄
爲:
TARBALLS_DIR=/home/linux/downloads(源碼存放目錄)
RESULT_TOP=/home/linux/crosstools(生成工具鏈目錄)
4.修改 gcc-3.4.5-glibc-2.3.6.dat
$ vim gcc-3.4.5-glibc-2.3.6.dat
修改內容爲:
BINUTILS_DIR=binutils-2.15
GCC_DIR=gcc-3.4.5
GLIBC_DIR=glibc-2.3.6
LINUX_DIR=linux-2.6.26.5(內核版本)
LINUX_SANITIZED_HEADER_DIR=linux-libc-headers-2.6.12.0
GLIBCTHREADS_FILENAME=glibc-linuxthreads-2.3.6
5.修改glibc-2.3.6.tar.bz2包內的configure文件
將
case $ac_prog_version in
'') ac_prog_version="v. ?.??, bad"; ac_verc_fail=yes;;
2.1[3-9]*) 《--------------------------------------------3920行
ac_prog_version="$ac_prog_version, ok"; ac_verc_fail=no;;
*) ac_prog_version="$ac_prog_version, bad"; ac_verc_fail=yes;;
修改爲
case $ac_prog_version in
'') ac_prog_version="v. ?.??, bad"; ac_verc_fail=yes;;
2.[1-2][0-9]*) 《--------------------------------------------3920行
ac_prog_version="$ac_prog_version, ok"; ac_verc_fail=no;;
*) ac_prog_version="$ac_prog_version, bad"; ac_verc_fail=yes;;
還有3981行也有這樣的代碼 一個是ld,一個是ar
6.$ ./ demo-arm-softfloat.sh
這個過程較長(半個小時左右)
7.修改環境變量
修改環境變量有多種方法我們介紹兩種
(1)第一種方法:在當前用戶目錄的.bashrc中添加如下內容
$export PATH=$PATH:/home/linux/crosstool/gcc-3.4.5-glibc-2.3.6/arm-softfloat-linux-gnu/bin:
(2)第二種方法:或直接修改/home/linux/.bashrc
cd /home/linux
vim .bashrc
添加如下內容:
PATH=$PATH:/home/linux/crosstool/gcc-3.4.5-glibc-2.3.6/arm-softfloat-linux-gnu/bin:
然後
source .bashrc
8.執行如下命令
$ arm-softfloat-linux-gnu-gcc -v
顯示
Reading specs from /home/david/project/crosstool/gcc-3.4.5-glibc-2.3.6/arm-softfloat-linux-gnu/lib/gcc/arm-softfloat-linux-gnu/3.4.5/specs
Configured with: /home/david/downloads/crosstool-0.43/build/arm-softfloat-linux-gnu/gcc-3.4.5-glibc-2.3.6/gcc-3.4.5/configure --target=arm-softfloat-linux-gnu --host=i686-host_pc-linux-gnu --prefix=/home/david/project/crosstool/gcc-3.4.5-glibc-2.3.6/arm-softfloat-linux-gnu --with-float=soft --with-headers=/home/david/project/crosstool/gcc-3.4.5-glibc-2.3.6/arm-softfloat-linux-gnu/arm-softfloat-linux-gnu/include --with-local-prefix=/home/david/project/crosstool/gcc-3.4.5-glibc-2.3.6/arm-softfloat-linux-gnu/arm-softfloat-linux-gnu --disable-nls --enable-threads=posix --enable-symvers=gnu --enable-__cxa_atexit --enable-languages=c,c++ --enable-shared --enable-c99 --enable-long-long
Thread model: posix
gcc version 3.4.5
ok交叉編譯環境創建成功!
9.恢復我們修改的系統配置:
恢復gcc爲4.4
sudo rm /usr/bin/gcc
sudo ln -s /usr/bin/gcc-4.4 /usr/bin/gcc
重新安裝dash
sudo dpkg-reconfigure dash
選擇 yes 以重新安裝 dash