ubuntu9.10 成功配置 交叉編譯環境

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

 配置 crosstool-0.43
[xxxx@ ctools]$ echo $HOME
/home/xxxx
如果不是/home/xxxx,則要export HOME=/home/xxxx(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
set -ex
TARBALLS_DIR=/home/xxxx/download
RESULT_TOP=/home/xxxx/crosstool

export TARBALLS_DIR RESULT_TOP
GCC_LANGUAGES="c,c++"
export GCC_LANGUAGES
# Really, you should do the mkdir before running this,
# and chown /opt/crosstool to yourself so you don't need to run as root.
mkdir -p $RESULT_TOP
#eval `cat arm.dat gcc-2.95.3-glibc-2.1.3.dat` sh all.sh --notest
#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
echo Done.
注意:cat arm.dat gcc-4.1.0-glibc-2.3.2.dat而不是默認的gcc-4.1.0-glibc-2.3.6-tls.dat
[xxxx@ crosstool-0.43]$ vi gcc-4.1.1-glibc-2.3.2.dat
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
[xxxx@ crosstool-0.43]$ vi arm.dat
KERNELCONFIG=`pwd`/arm.config
TARGET=arm-linux    (該名稱爲目標名稱,我是覺得默認(arm-unknow-linux-gnu) 的太長所以修改了,修改了後要注意了相關目錄的權限)
TARGET_CFLAGS="-O"

【說明】紅色部分爲修改/增加部分
TARBALLS_DIR:是下載的工具源碼壓縮包的存放目錄。
RESULT_TOP :是要生成的工具鏈的存放目錄,要有寫權限的目錄,不然無法編譯。
[xxxx@ crosstool-0.43]$ ./demo-arm.sh
系統將開始編譯
所有使用到的文件(缺少的文件)會在編譯的時候來下載:
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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章