建立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
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
一定要全部下載好,要不然以後的編譯過程中,速度很慢還存在潛在的危險,說不定哪個包自動下載不下來,編譯錯誤,那連原因也找不到。(我就試過這樣)
5.處理一個小問題,具體我也不清楚。見大神網站:
http://hi.baidu.com/caicry/blog/item/f306db639c4281680c33fa1b.html
cd /usr/bin
6.安裝crosstool-ng,安裝完之後 ct【tab】【tab】後會出現ct-ng,那麼你安裝成功了!恭喜第一步過了!
mv /(下載工具包的目錄) /home/crossrool-ng/src 這裏千萬不要變成/home/crossrool-ng/src/ (將上面下載的源碼工具包全部複製到 src目錄的下)
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-addr2linearm-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 ] 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] /