crosstool 和ezx-cross的區別,ezx-crosstool是將crosstool精簡後加上浮點運算,以及ezx平台的其他一些補丁,適用於ezx平台。
在編譯ezx-crosstool時,可能出現PATH_MAX not defined,之類的錯誤,刪除printf語句下面的PATH_MAX即可。
雖然網上的教程和工具已經很多了,但是安裝的時間還是超出了我的估計。
現在寫出完整的建立過程。中間借鑒了很多人的經驗,復制粘貼了他們的教程。。感謝。。
終端可以設置程序關閉時不自動關閉。。。我浪費了很多時間才發現的,這樣才能看見錯誤。
一.電腦補丁和安裝
1.sudo apt-get install Bison flex build-essential patch libncurese5-dev
2.降低gcc版本
(1)第一種方法:直接在終端輸入安裝gcc-4.1
sudo apt-get install gcc-4.1
(2)第二種方法:下載下列軟件包:
gcc-4.1_4.1.2-23Ubuntu3_i386.deb
gcc-4.1-base_4.1.2-23ubuntu3_i386.deb
cpp-4.1_4.1.2-23ubuntu3_i386.deb
然後sudo dpkg –i *.deb
安裝就可以了
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的軟鏈接)
3、修改sh版本
如果運行
ls -la /bin/sh
看到鏈接的是 dash ,則請運行以下命令
sudo dpkg-reconfigure dash
選擇 no 以刪除 dash
二.軟件准備
1.下載crosstool-0.43.tar.gz,這個是最重要的。
6個軟件,這6個軟件版本不是規定的,可以更新。下好了是為了安裝快速,否則crosstool會自動下載,耽誤時間。
glibc-2.3.6.tar.gz
linux-2.6.26.5.tar.gz
crosstool-0.43.tar.gz
binutils-2.15.tar.gz
glibc-linuxthreads-2.3.3.tar.gz
linux-libc-headers-2.6.12.0.tar.bz2
2 .修改demo-arm-softfloat.sh
$vim demo-arm-softfloat.sh
修改下面兩句
TARBALLS_DIR=/home/linux/downloads(你下載下面那6個軟件的存放目錄)
RESULT_TOP=/home/linux/crosstools(生成工具鏈目錄)
3.修改 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
終端運行demo-arm-softfloat.sh(半小時左右)
此時可能出現的錯誤:
(1)編譯到glibc的時候,在配置的時候會檢測gcc的版本,configure 腳本認為gcc-4.3.2版本太老(其實是因為當時gcc還沒有這麼高的版本,只要不是3.2到4.1之間的版本,都認為too old),不能編譯。
這是可以解決的,方法就是修改glibc-2.3.2根目錄下的configure 文件中的第1275行:
test -n "$CC" && break
done
if test -z "$CC"; then
ac_verc_fail=yes
else
# Found it, now check the version.
echo "$as_me:$LINENO: checking version of $CC" >&5
echo $ECHO_N "checking version of $CC... $ECHO_C" >&6
ac_prog_version=`$CC -v 2>&1 | sed -n 's/^.*version /([egcygnustpi-]*[0-9.]*/).*$//1/p'`
case $ac_prog_version in
'') ac_prog_version="v. ?.??, bad"; ac_verc_fail=yes;;
3.[2-9]*|4.[0- 3]*)
ac_prog_version="$ac_prog_version, ok"; ac_verc_fail=no;;
*) ac_prog_version="$ac_prog_version, bad"; ac_verc_fail=yes;;
(2)編譯gcc-3.3.6的時候,出現以下錯誤:
/usr/include/bits/fcntl2.h:51: error: call to '__open_missing_mode' declared with attribute error: open with O_CREAT in second argument needs 3 arguments
在gcc-3.3.6/gcc/collect2.c中的第1575行改為:
redir_handle = open (redir, O_WRONLY | O_TRUNC | O_CREAT, 0777 );
glibc-2.3.2/login/tst-grantpt.c也有一個類似錯誤,第44行:
fd = open (file, O_RDWR | O_CREAT, 0777 );
(3)*** buffer overflow detected ***: arm-9tdmi-linux-gnu-ar terminated
沒辦法,只能放棄gcc-4.3.2。
(4)In file included from version.c:33:
/home/tekkaman/working/crosstool-0.43/build/arm-9tdmi-linux-gnu/gcc-4.1.1-glibc-2.3.2/build-glibc/csu/version-info.h:2:1: missing terminating " character
/home/tekkaman/working/crosstool-0.43/build/arm-9tdmi-linux-gnu/gcc-4.1.1-glibc-2.3.2/build-glibc/csu/version-info.h:3:1: missing terminating " character
解決辦法:
sudo mv /bin/sh /bin/sh.old
sudo ln -sf bash /bin/sh
(5)configure: error: no termcap library found
用新立得安裝libncurses5-dev(或是apt-get install libncurses5-dev)即可。
如果這時候還沒看見done,我也沒辦法了。。。