歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> 建立ARM Linux GCC交叉編譯環境

建立ARM Linux GCC交叉編譯環境

日期:2017/3/1 11:18:05   编辑:Linux編程

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,我也沒辦法了。。。

Copyright © Linux教程網 All Rights Reserved