建立arm-linux交叉工具鏈 crosstool-ng

建立arm-linux交叉工具鏈 crosstool-ng

測試環境:ubuntu 10.4,10.10,11.4,11.10均無壓力。

最近被這個arm-linux交叉編譯器搞了5天,都快被崩潰了。終於成功了,好開心,於是再做一遍,沒問題,在這裏記錄以下流程:

1.確定好自己機子於開發板
tool:crosstool-ng1.93
host:ubuntu 10.04.3.LTS
target:S3Carm9

(前3天我一直用fedora來安裝,最後真的不行了,於是換成ubutu,現在知道編譯過程與主機上的GCC版本和GDB版本以及BINUTILS版本其實是沒有關係的。它提示你ld is too old ,是因爲你下載的工具的版本不對,清自己覈對自己下載的版本跟下面提到的vim .config裏面的規定。)

2.
$sudo passwd -l (設置root密碼
set the unix password:
reset the unix password:
scuess!

(切換到root用戶下,安裝相關工具。以下所有操作都在root用戶下,以後編譯前請su -l ,切換到root下面才編譯)

3.下載這些工具包,通常有error的時候,很多是因爲下面安裝包不完全,如果下面安裝包有找不到的,那麼可能你的ubutu版本對不上,或者你的ubutu版本出現了點小錯誤(我有一天晚上就是因爲cvsd找不到,然後不管了,照樣安裝,導致10多分鐘後才提示gcc編譯不過,然後從新下載)

apt-get install bison flex texinfo automake libtool cvs patch
apt-get install libncurses5*
apt-get install aria2 curl gcj g++ subversion  cvsd gawk
apt-get install glibc*

4.下載安裝用到的工具包:(請千萬要下完整!特別是那個gcc,我之前的gcc原來下了一半然後中斷了,只有26M,就直接拿來用了,一直找不到問題所在,後來多次查看log,才知道原來一直是gcc編譯錯誤,於是從新下載gcc)

binutils-2.19.1.tar.bz2    |    dmalloc-5.5.2.tgz

duma_2_5_15.tar.gz    |    expat-2.0.1.tar.gz

gcc-4.3.2.tar.bz2    |    gdb-6.8.tar.bz2

glibc-2.9.tar.bz2    |     glibc-ports-2.9.tar.bz2

gmp-4.3.2.tar.bz2    |     libelf-0.8.13.tar.gz

linux-2.6.33.7.tar.bz2    |     mpfr-2.4.2.tar.bz2

ncurses-5.7.tar.gz    |     Sstrip.c

strace-4.5.19.tar.bz2

一定要全部下載好,要不然以後的編譯過程中,速度很慢還存在潛在的危險,說不定哪個包自動下載不下來,編譯錯誤,那連原因也找不到。(我就試過這樣)


5.處理一個小問題,具體我也不清楚。見大神網站:
http://hi.baidu.com/caicry/blog/item/f306db639c4281680c33fa1b.html
cd  /usr/bin
mv mawk mawk.bak
ln -s gawk mawk
cd /home

6.安裝crosstool-ng,安裝完之後 ct【tab】【tab】後會出現ct-ng,那麼你安裝成功了!恭喜第一步過了!
mkdir crosstool-ng
cd crosstool-ng
mkdir src
mv /(下載工具包的目錄)  /home/crossrool-ng/src 這裏千萬不要變成/home/crossrool-ng/src/ (將上面下載的源碼工具包全部複製到 src目錄的下)
tar -jzvf crosstool-ng-1.9.3.tar.bz2
cd crosstool-ng-1.9.3
./configure --prefix=/opt/crosstool-ng
make
make install
make clean
echo "PATH=$PATH:/opt/crosstool-ng/bin" >> ~/.bashrc
source ~/.bashrc

打開一個terminal:

$ echo "PATH=$PATH:/opt/crosstool-ng/bin" >> ~/.bashrc  爲後面調用ct-ng命令增加環境變量,讓當前用戶和超級用戶都擁有權限

$ source ~/.bashrc下班了,明天繼續寫。


7.更改編譯事項:

cd /home/crosstool-ng

mkdir  crosstool-ng-1.9.3_build  編譯時的輸出目錄

cd crosstool-ng-1.9.3_build/

cp /opt/crosstool-ng/lib/ct-ng-1.9.3/samples/arm-unknown-linux-gnueabi/crosstool.config .config

 ct-ng menuconfig   一定要在上面建立的crosstool-ng-1.9.3_build目錄下運行

改寫下面的路徑,按照上面的定義,最後的結果如下

Paths and misc options  --->

  (/home/crosstool-ng/src) Local tarballs directory           保存源碼包路徑

  (/opt/crosstool-ng/${CT_TARGET}) Prefix directory  交叉編譯器的安裝路徑

 Target options  --->

           *** Target optimisations ***

           (armv4t) Architecture level

           (arm9tdmi) Emit assembly for CPU   

           (arm920t) Tune for CPU

C compiler --->

*** Additional supported languages:***

取消下面兩個語言的選擇

[*] C++

[ ] Fortran

[ ] Java

Paths and misc options  --->

   *** Build behavior ***

  (4) Number of parallel jobs 

如果是雙核的話,不是在虛擬機下運行的,就填4.在虛擬機下,開2就行了,開4也沒用。弄不好整死機了

保存退出,按enter,我按了個Y鍵,發覺編譯出錯,然後從新 ct-ng menuconfig,發覺剛纔的都沒有保存


8.不過還是建議檢查一下你下載的linuxKERNEL版本於crosstool-ng初始化的版本是否一致:

vim .config

/KERNEL

不一致則修改修改

    CT_KERNEL_VERSION=2.6.32.17

    CT_KERNEL_V_2_6_32_17=y

    CT_LIBC_GLIBC_MIN_KERNEL=2.6.32.17

:wq保存退出


9.開始編譯

.ct-ng build.4(bulid後面有個點,不要忘了。意思爲4線程編譯。一切正確配置的話,那麼要等上30分鐘或者1個小時)

這裏要注意一下的就是,我一開始在fedora下面看到Extracting 'linux-2.6.33.7'好久,然後就ctrl+d中斷程序了,後來才知道,自己設置的src地址錯誤,然後系統自動下載,讓系統自動下載的慢的不行,而且前面顯示的時間對不上,以爲自己編譯錯誤,然後在那裏搞了很久。其實如果這裏你src地址沒有錯,那麼前面的時間基本上於系統時間匹配,而且很快一串這樣的:

[INFO ]  Extracting and patching toolchain components
[EXTRA]    Extracting 'linux-2.6.33.7'
[EXTRA]    Patching 'linux-2.6.33.7'
[EXTRA]    Extracting 'gmp-4.3.2'
[EXTRA]    Patching 'gmp-4.3.2'
[EXTRA]    Extracting 'mpfr-2.4.2'
[EXTRA]    Patching 'mpfr-2.4.2'
[EXTRA]    Extracting 'libelf-0.8.13'
[EXTRA]    Patching 'libelf-0.8.13'
[EXTRA]    Extracting 'binutils-2.19.1'
[EXTRA]    Patching 'binutils-2.19.1'
[EXTRA]    Extracting 'gcc-4.3.2'
[EXTRA]    Patching 'gcc-4.3.2'
[EXTRA]    Extracting 'glibc-2.9'
[EXTRA]    Patching 'glibc-2.9'
[EXTRA]    Extracting 'glibc-ports-2.9'
[EXTRA]    Patching 'glibc-ports-2.9'
[EXTRA]    Extracting 'dmalloc-5.5.2'
[EXTRA]    Patching 'dmalloc-5.5.2'
[EXTRA]    Extracting 'duma_2_5_15'
[EXTRA]    Patching 'duma-2_5_15'
[EXTRA]    Extracting 'gdb-6.8'
[EXTRA]    Patching 'gdb-6.8'
[EXTRA]    Extracting 'ncurses-5.7'
[EXTRA]    Patching 'ncurses-5.7'
[EXTRA]    Extracting 'expat-2.0.1'
[EXTRA]    Patching 'expat-2.0.1'
[EXTRA]    Extracting 'ltrace-0.5.3'
[EXTRA]    Patching 'ltrace-0.5.3'
[EXTRA]    Extracting 'strace-4.5.19'

[EXTRA]    Patching 'strace-4.5.19'


10.最後設置默認路徑,方便以後編譯的時候不用從新安排路徑:

echo "PATH=$PATH:/opt/crosstool-ng/arm-unknown-linux-gnueabi/bin" >> ~/.bashrc             //root家目錄下的.bashrc

source ~/.bashrc立即生效

arm[tab][tab]之後,你會發現好多

arm-unknown-linux-gnueabi-addr2line
arm-unknown-linux-gnueabi-ar
arm-unknown-linux-gnueabi-as
arm-unknown-linux-gnueabi-c++
arm-unknown-linux-gnueabi-cc
arm-unknown-linux-gnueabi-c++filt

more---

11.恭喜你,你交叉工具鏈製作成功了。好開心阿。搞了我5天了。一直被一些小小的問題卡主。如果還是不行的童鞋們,請不要着急與放棄。出錯的原因有以下幾大類:

001:apt-get install 的軟件包安裝不完整(如果還是安裝不了我上面的包,請從新安裝你的ubutu,我之前又一次因爲ubutu安裝不全,直接編譯,error)

002:你下載的工具包錯誤或者版本不對(請仔細覈對你的工具包與版本,記得看一下vim .config,地址上面有)

003:在編譯的時候,會出現[EXTRA]    Extracting 'linux-2.6.33.7',然後很久不動(那麼你的src地址錯誤,請退出,從新檢查ct-ng menuconfig)

004:有時候發覺自己沒錯,但是編譯不過,那麼請你刪除/home/crosstool-ng/ /opt/crosstool-ng/,然後從新在編譯一遍,很有可能你的地址或者其他分配錯誤,或者命令行打錯了,我自己就曾經試過幾遍。


12.最後一步個人認爲比較重要,把系統備份起來咯。詳細請參考我的另外一篇文章

http://blog.csdn.net/chen_zhongming/article/details/6683444


參考資料:

http://blog.chinaunix.net/space.php?uid=20543672&do=blog&cuid=2198589

http://home.eeworld.com.cn/my/space.php?uid=67366&do=blog&id=43600

http://hi.baidu.com/caicry/blog/item/f306db639c4281680c33fa1b.html

最後附上我的成功編譯過程:(如果你跟我有很大差別,那麼很可能你錯了,除了順序)

#.ct-ng build.4

[INFO ]  Performing some trivial sanity checks
[INFO ]  Build started 20110812.205501
[INFO ]  Building environment variables
[EXTRA]  Preparing working directories
[EXTRA]  Installing user-supplied crosstool-NG configuration
[EXTRA]  =================================================================
[EXTRA]  Dumping internal crosstool-NG configuration
[EXTRA]    Building a toolchain for:
[EXTRA]      build  = i686-pc-linux-gnu
[EXTRA]      host   = i686-pc-linux-gnu
[EXTRA]      target = arm-unknown-linux-gnueabi
[EXTRA]  Dumping internal crosstool-NG configuration: done in 0.10s (at 00:02)
[INFO ]  =================================================================
[INFO ]  Retrieving needed toolchain components' tarballs
[INFO ]  Retrieving needed toolchain components' tarballs: done in 0.36s (at 00:03)
[INFO ]  =================================================================
[INFO ]  Extracting and patching toolchain components
[EXTRA]    Extracting 'linux-2.6.33.7'
[EXTRA]    Patching 'linux-2.6.33.7'
[EXTRA]    Extracting 'gmp-4.3.2'
[EXTRA]    Patching 'gmp-4.3.2'
[EXTRA]    Extracting 'mpfr-2.4.2'
[EXTRA]    Patching 'mpfr-2.4.2'
[EXTRA]    Extracting 'libelf-0.8.13'
[EXTRA]    Patching 'libelf-0.8.13'
[EXTRA]    Extracting 'binutils-2.19.1'
[EXTRA]    Patching 'binutils-2.19.1'
[EXTRA]    Extracting 'gcc-4.3.2'
[EXTRA]    Patching 'gcc-4.3.2'
[EXTRA]    Extracting 'glibc-2.9'
[EXTRA]    Patching 'glibc-2.9'
[EXTRA]    Extracting 'glibc-ports-2.9'
[EXTRA]    Patching 'glibc-ports-2.9'
[EXTRA]    Extracting 'dmalloc-5.5.2'
[EXTRA]    Patching 'dmalloc-5.5.2'
[EXTRA]    Extracting 'duma_2_5_15'
[EXTRA]    Patching 'duma-2_5_15'
[EXTRA]    Extracting 'gdb-6.8'
[EXTRA]    Patching 'gdb-6.8'
[EXTRA]    Extracting 'ncurses-5.7'
[EXTRA]    Patching 'ncurses-5.7'
[EXTRA]    Extracting 'expat-2.0.1'
[EXTRA]    Patching 'expat-2.0.1'
[EXTRA]    Extracting 'ltrace-0.5.3'
[EXTRA]    Patching 'ltrace-0.5.3'
[EXTRA]    Extracting 'strace-4.5.19'
[EXTRA]    Patching 'strace-4.5.19'
[INFO ]  Extracting and patching toolchain components: done in 95.34s (at 01:38)
[INFO ]  =================================================================
[INFO ]  Installing kernel headers
[EXTRA]    Installing kernel headers
[EXTRA]    Checking installed headers
[INFO ]  Installing kernel headers: done in 9.36s (at 01:48)
[INFO ]  =================================================================
[INFO ]  Installing GMP
[EXTRA]    Configuring GMP
[EXTRA]    Building GMP
[EXTRA]    Installing GMP
[INFO ]  Installing GMP: done in 73.43s (at 03:01)
[INFO ]  =================================================================
[INFO ]  Installing MPFR
[EXTRA]    Configuring MPFR
[EXTRA]    Building MPFR
[EXTRA]    Installing MPFR
[INFO ]  Installing MPFR: done in 21.41s (at 03:23)
[INFO ]  =================================================================
[INFO ]  Installing binutils
[EXTRA]    Configuring binutils
[EXTRA]    Building binutils
[EXTRA]    Installing binutils
[INFO ]  Installing binutils: done in 45.94s (at 04:08)
[INFO ]  =================================================================
[INFO ]  Installing static core C compiler
[EXTRA]    Configuring static core C compiler
[EXTRA]    Building static core C compiler
[EXTRA]    Installing static core C compiler
[INFO ]  Installing static core C compiler: done in 106.12s (at 05:55)
[INFO ]  =================================================================
[INFO ]  Installing C library headers
[EXTRA]    Configuring C library
[EXTRA]    Installing C library headers
[INFO ]  Installing C library headers: done in 29.85s (at 06:24)
[INFO ]  =================================================================
[INFO ]  Installing C library start files
[EXTRA]    Configuring C library
[WARN ]    Removing "-pipe" for use with glibc>=2.6
[EXTRA]    Building C library start files
[EXTRA]    Installing C library start files
[INFO ]  Installing C library start files: done in 22.55s (at 06:47)
[INFO ]  =================================================================
[INFO ]  Installing shared core C compiler
[EXTRA]    Configuring shared core C compiler
[EXTRA]    Building shared core C compiler
[EXTRA]    Installing shared core C compiler
[INFO ]  Installing shared core C compiler: done in 176.48s (at 09:44)
[INFO ]  =================================================================
[INFO ]  Installing C library
[EXTRA]    Configuring C library
[WARN ]    Removing "-pipe" for use with glibc>=2.6
[EXTRA]    Building C library
[EXTRA]    Installing C library
[EXTRA]    Fixing C library linker scripts
[INFO ]  Installing C library: done in 570.99s (at 19:15)
[INFO ]  =================================================================
[INFO ]  Installing final compiler
[EXTRA]    Configuring final compiler
[EXTRA]    Building final compiler
[EXTRA]    Installing final compiler
[INFO ]  Installing final compiler: done in 231.01s (at 23:06)
[INFO ]  =================================================================
[INFO ]  Installing libelf for the target
[EXTRA]    Configuring libelf
[EXTRA]    Building libelf
[EXTRA]    Installing libelf
[INFO ]  Installing libelf for the target: done in 8.13s (at 23:14)
[INFO ]  =================================================================
[INFO ]  Installing binutils for target
[EXTRA]    Configuring binutils for target
[EXTRA]    Building binutils' libraries (libiberty bfd) for target
[EXTRA]    Installing binutils' libraries (libiberty bfd) for target
[INFO ]  Installing binutils for target: done in 74.03s (at 24:28)
[INFO ]  =================================================================
[INFO ]  Installing dmalloc
[EXTRA]    Configuring dmalloc
[EXTRA]    Building dmalloc
[EXTRA]    Installing dmalloc
[INFO ]  Installing dmalloc: done in 13.41s (at 24:41)
[INFO ]  =================================================================
[INFO ]  Installing D.U.M.A.
[EXTRA]    Copying sources
[EXTRA]    Building libraries 'libduma.a libduma.so.0.0.0'
[EXTRA]    Installing libraries 'libduma.a libduma.so.0.0.0'
[EXTRA]    Installing shared library link
[EXTRA]    Installing wrapper script
[INFO ]  Installing D.U.M.A.: done in 1.44s (at 24:43)
[INFO ]  =================================================================
[INFO ]  Installing cross-gdb
[EXTRA]    Configuring cross-gdb
[EXTRA]    Building cross-gdb
[EXTRA]    Installing cross-gdb
[INFO ]  Installing cross-gdb: done in 139.72s (at 27:02)
[INFO ]  =================================================================
[INFO ]  Installing native gdb
[EXTRA]    Building static target ncurses
[EXTRA]    Building static target expat
[EXTRA]    Configuring native gdb
[EXTRA]    Building native gdb
[EXTRA]    Installing native gdb
[EXTRA]    Cleaning up ncurses
[INFO ]  Installing native gdb: done in 251.87s (at 31:14)
[INFO ]  =================================================================
[INFO ]  Installing gdbserver
[EXTRA]    Configuring gdbserver
[EXTRA]    Building gdbserver
[EXTRA]    Installing gdbserver
[INFO ]  Installing gdbserver: done in 10.12s (at 31:25)
[INFO ]  =================================================================
[INFO ]  Installing ltrace
[EXTRA]    Copying sources to build dir
[EXTRA]    Configuring ltrace
[EXTRA]    Building ltrace
[EXTRA]    Installing ltrace
[INFO ]  Installing ltrace: done in 4.48s (at 31:29)
[INFO ]  =================================================================
[INFO ]  Installing strace
[EXTRA]    Configuring strace
[EXTRA]    Building strace
[EXTRA]    Installing strace
[INFO ]  Installing strace: done in 20.45s (at 31:49)
[INFO ]  =================================================================
[INFO ]  Cleaning-up the toolchain's directory
[INFO ]    Stripping all toolchain executables
[EXTRA]    Installing the populate helper
[EXTRA]    Installing a cross-ldd helper
[EXTRA]    Creating toolchain aliases
[EXTRA]    Removing access to the build system tools
[INFO ]  Cleaning-up the toolchain's directory: done in 0.83s (at 31:50)
[INFO ]  Build completed at 20110812.212650
[INFO ]  (elapsed: 31:49.67)
[INFO ]  Finishing installation (may take a few seconds)...
[31:50] / 
發佈了14 篇原創文章 · 獲贊 3 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章