ubuntu9.10 成功配置 交叉編譯環境
在進行嵌入式開發之前,首先要建立一個交叉編譯環境,這是一套編譯器、連接器和libc庫等組成的開發環境。本文具體說明了嵌入式交叉編譯環境的建立過程和具體的操作步驟,希望能夠對各位朋友搭建對應的交叉編譯環境有所幫助。
一、所需軟硬件環境
■ 主機環境
建立交叉編譯工具鏈的主機環境:
Ubuntu 9.10~ubuntu8.04
■ Ubuntu 9.10軟件環境
保證你的 Ubuntu 9.10 安裝瞭如下的軟件:
bison flex build-essential
安裝這些軟件包:
sudo apt-get install bison flex build-essential
■ 相關軟件包
下面所有yourname替換爲你自己的位於/home目錄下的用戶名
首先是準備工作:
需要的安裝包:
crosstool-0.43.tar.gz 可以在http://kegel.com/crosstool/crosstool-0.43.tar.gz
獲得
創建一個文件夾
mkdir /home/yourname/downloads也可以用mkdir ~/downloads
將crosstool-0.43.tar.gz複製到downloads目錄下(下載完成後默認應該實在桌面上)
另外,還有一些安裝包:
【binutils-2.16.1.tar.bz2】http://ftp.gnu.org/gnu/binutils/
【glibc-2.3.2.tar.bz2】http://ftp.gnu.org/gnu/glibc/
【glibc-linuxthreads-2.3.2.tar.bz2】http://ftp.gnu.org/gnu/glibc/
【linux-2.6.26.5.tar.bz2】http://ftp.kernel.org/pub/linux/kernel/v2.6/
【gdb-6.5.tar.bz2】http://ftp.gnu.org/gnu/gdb/
【gcc-4.1.0.tar.bz2】http://ftp.gnu.org/gnu/gcc/gcc-4.1.1/
【gcc-3.3.6.tar.bz2】http://ftp.gnu.org/gnu/gcc/gcc-3.3.6/
這些在安裝過程中會自動下載,也可以自己提前下載好,放在/home/yourname/downloads下面,不過我建議提前下好,要不繫統會單線程下載幾個K每秒呢 還有就要需要修改一下glibc裏的一個文件。
二、具體工作步驟
1、修改系統配置
下面是一些安裝是可能遇到的問題,提前些出來,省得大家忙活半天編譯到一半發現錯了還得重新編譯,如果你想見識一下這些問題,可以直接跳轉到下面的安裝過程。
1.安裝過程中會提示缺少下面兩個包
bison
flex
如果以前沒有裝過,下載安裝一下(具體包名我忘記了,可以直接輸入bison查看,如果沒裝過,會提示你可以下載哪些包安裝,flex類似)
sudo apt-get install bison
sudo apt-get install flex
另外網上說還需要一個mm4,不過我裝的時候沒有提示,好象是安裝flex時,解決依賴性時自動裝上了。
2.還有一個莫名其妙的錯誤,提示說gcc版本太舊或者未安裝,但是你用sudo apt-get install gcc 的時後會發現gcc已經是最新版本了,事實上這個錯誤是因爲gcc版本太新了。解決方法如下:
sudo apt-get install gcc-4.1
cd /usr/bin
sudo rm gcc
ln -s gcc-4.1 gcc
修改sh版本
如果運行
ls -la /bin/sh
看到鏈接的是 dash ,則請運行以下命令
sudo dpkg-reconfigure dash
選擇 no 以刪除 dash
此處如果不改好的話,編譯時會出現錯誤
3.安裝是還出現瞭如下錯誤:
/home/xxs/crosstool-0.43/build/arm-arm9tdmi-linux-gnu/gcc-4.1.1-glibc-2.3.2/build-glibc/csu/version-info.h:1:1:
missing terminating " character
系統在編譯生成version.o時候發現version-info.h文件有錯誤
解決方法是需要修改一個文件
解壓glibc-2.3.2.tar.bz2
找到glibc-2.3.2/csu目錄下的Makefile按如下修改
文件末尾有2處echo
echo
"/"Compiled on a $$os $$version system" /
"on
`date +%Y-%m-%d`.//n/"" ;; /
改爲:
echo
"/"Compiled on a $$os $$version system" /
"on
`date +%Y-%m-%d`.////n/"" ;; /
echo
"/"Available extensions://n/"";
改爲:
echo
"/"Available extensions:////n/"" /
保存並重新壓縮爲glibc-2.3.2.tar.bz2 覆蓋原來downloads目錄下的glibc-2.3.2.tar.bz2
解決好上面的一些小問題就可以開始安裝了
2.解壓軟件包,並進入該目錄,查看重要的腳本文件。
$cd downloads
$tar –zxvf crosstool-0.43.tar.gz
$cd crosstool-0.43
在此目錄下可以看到有很多.sh腳本和.dat配置文件,每一個支持的處理器都有它所相應的腳本。假如選用demo-arm.sh 就是建立目標交叉編譯工具鏈。
進入cross目錄
cd cross-0.43
[xxxx@ ctools]$ echo $HOME
/home/xxxx
[xxxx@ crosstool-0.43]$ vi demo-arm.sh
#!/bin/sh
# This script has one line for each known working toolchain
# for this architecture. Uncomment the one you want.
# Generated by generate-demo.pl from buildlogs/all.dats.txt
TARBALLS_DIR=/home/xxxx/download
RESULT_TOP=/home/xxxx/crosstool
export TARBALLS_DIR RESULT_TOP
GCC_LANGUAGES="c,c++"
export GCC_LANGUAGES
# and chown /opt/crosstool to yourself so you don't need to run as root.
#eval `cat arm.dat gcc-2.95.3-glibc-2.2.2.dat` sh all.sh --notest
……
……
#eval `cat arm.dat gcc-4.1.0-glibc-2.3.2-tls.dat` sh all.sh --notest
eval `cat arm.dat gcc-4.1.0-glibc-2.3.2.dat` sh all.sh --notest
BINUTILS_DIR=binutils-2.16.1
GCC_CORE_DIR=gcc-3.3.6
GCC_DIR=gcc-4.1.0
GLIBC_DIR=glibc-2.3.2
LINUX_DIR=linux-2.6.26.5
LINUX_SANITIZED_HEADER_DIR=linux-libc-headers-2.6.12.0
GLIBCTHREADS_FILENAME=glibc-linuxthreads-2.3.2
GDB_DIR=gdb-6.5
KERNELCONFIG=`pwd`/arm.config
TARGET=arm-linux (該名稱爲目標名稱,我是覺得默認(arm-unknow-linux-gnu) 的太長所以修改了,修改了後要注意了相關目錄的權限)
TARGET_CFLAGS="-O"
TARBALLS_DIR:是下載的工具源碼壓縮包的存放目錄。
RESULT_TOP :是要生成的工具鏈的存放目錄,要有寫權限的目錄,不然無法編譯。
所有使用到的文件(缺少的文件)會在編譯的時候來下載:
binutils-2.16.1
gcc-3.3.6
gcc-4.1.1
glibc-2.3.2
linux-2.6.26.5
linux-libc-headers-2.6.12.0
glibc-linuxthreads-2.3.2
gdb-6.5 這個工程很長需要n小時的時間來
安裝完成後,默認的那裝目錄就是開始創建的那個/opt/crosstools/
1.添加環境變量
gedit ~/.bashrc
在最後添加如下
if [ -d /opt/crosstool/gcc-4.1.0-glibc-2.3.2/arm-linux ]; then
PATH=/opt/crosstool/gcc-4.1.0-glibc-2.3.2/arm-linux/bin:$PATH
fi
就是把安裝的工具bin目錄添加到PATH變量中。
保存
2.source ~/.bashrc
3.重啓終端。
然後可以測試一下
arm-linux-gcc
正常的話就會出現
arm-linux-gcc: no input files
說明程序能用了。
8.恢復我們修改的系統配置:
恢復gcc爲4.3
sudo rm /usr/bin/gcc
sudo ln -s /usr/bin/gcc-4.3 /usr/bin/gcc
重新安裝dash
sudo dpkg-reconfigure dash
選擇 yes 以重新安裝 dash