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

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