Sunday, December 21, 2008


Ubuntu 8.10 64bit
一、设置交叉编译环境
所用包:
crosstool-0.43
gcc-3.3.6
gcc-4.1.1
glibc-2.3.2
binutils-2.16.1
linux-libc-headers-2.6.12.0
linux-2.6.27.6
事先必须安装的包:bison flex build-essential patch libncurses5-dev(patch可能会找不到,没有太大关系)

1. Ubuntu 8.10 默认安装的 gcc 版本为4.3.2,根据多人反映,用此版本编译会出错,目前不宜选用
于是选择了 gcc-4.1.1 ,但并不需要卸载 gcc-4.3.2
在 Ubuntu 8.10 不要去下 gcc-4.1.1 的源码来编译(自行下载源码编译会发现遇到更多的问题),直接在终端输入
sudo apt-get install gcc-4.1
安装就可以了


然后是
sudo rm /usr/bin/gcc (删除GCC,它只是个到gcc-4.3.2的软链接文件)
sudo ln -s /usr/bin/gcc-4.1 /usr/bin/gcc (建立GCC到gcc-4.1的软链接)

编译完成后可以运行以下命令修改回来
sudo rm /usr/bin/gcc
sudo ln -s /usr/bin/gcc-4.3 /usr/bin/gcc

如果运行
ls -la /bin/sh
看到链接的是 dash ,则请运行以下命令
sudo dpkg-reconfigure dash
选择 no 以删除 dash ,编译完成可再运行此命令选择 yes 以重新安装 dash
此处如果不改好的话,编译时会出现错误。
cd crosstool-0.43
cp demo-arm.sh arm.sh
vi arm.sh

修改如下:
set -ex
TARBALLS_DIR=$HOME/downloads//crosstool 所在目录
RESULT_TOP=/home/luis/crosstool//安装目录
export TARBALLS_DIR RESULT_TOP
GCC_LANGUAGES="c,c++"
export GCC_LANGUAGES
#eval `cat arm9tdmi.dat gcc-3.2.3-glibc-2.2.5.dat` sh all.sh --notest
#eval `cat arm9tdmi.dat gcc-3.2.3-glibc-2.3.2.dat` sh all.sh --notest
#eval `cat arm9tdmi.dat gcc-3.2.3-glibc-2.3.2-tls.dat` sh all.sh --notest
#eval `cat arm9tdmi.dat gcc-3.3.6-glibc-2.2.5.dat` sh all.sh --notest
#eval `cat arm9tdmi.dat gcc-3.3.6-glibc-2.3.2.dat` sh all.sh --notest
#eval `cat arm9tdmi.dat gcc-3.3.6-glibc-2.3.2-tls.dat` sh all.sh --notest
#eval `cat arm9tdmi.dat gcc-3.4.5-glibc-2.2.5.dat` sh all.sh --notest
#eval `cat arm9tdmi.dat gcc-3.4.5-glibc-2.3.2.dat` sh all.sh --notest
#eval `cat arm9tdmi.dat gcc-3.4.5-glibc-2.3.2-tls.dat` sh all.sh --notest
#eval `cat arm9tdmi.dat gcc-3.4.5-glibc-2.3.5.dat` sh all.sh --notest
#eval `cat arm9tdmi.dat gcc-3.4.5-glibc-2.3.5-tls.dat` sh all.sh --notest
#eval `cat arm9tdmi.dat gcc-3.4.5-glibc-2.3.6.dat` sh all.sh --notest
#eval `cat arm9tdmi.dat gcc-3.4.5-glibc-2.3.6-tls.dat` sh all.sh --notest
#eval `cat arm9tdmi.dat gcc-4.0.2-glibc-2.3.2.dat` sh all.sh --notest
#eval `cat arm9tdmi.dat gcc-4.0.2-glibc-2.3.2-tls.dat` sh all.sh --notest
#eval `cat arm9tdmi.dat gcc-4.0.2-glibc-2.3.5.dat` sh all.sh --notest
#eval `cat arm9tdmi.dat gcc-4.0.2-glibc-2.3.5-tls.dat` sh all.sh --notest
#eval `cat arm9tdmi.dat gcc-4.0.2-glibc-2.3.6.dat` sh all.sh --notest
#eval `cat arm9tdmi.dat gcc-4.0.2-glibc-2.3.6-tls.dat` sh all.sh --notest
#eval `cat arm9tdmi.dat gcc-4.1.0-glibc-2.3.2.dat` sh all.sh --notest
#eval `cat arm9tdmi.dat gcc-4.1.0-glibc-2.3.2-tls.dat` sh all.sh --notest
eval `cat arm.dat gcc-4.1.1-glibc-2.3.2.dat` sh all.sh --notest

修改 crosstool-0.43 目录下 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.1
GLIBC_DIR=glibc-2.3.2
LINUX_DIR=linux-2.6.27.6
LINUX_SANITIZED_HEADER_DIR=linux-libc-headers-2.6.12.0
GLIBCTHREADS_FILENAME=glibc-linuxthreads-2.3.2
GDB_DIR=gdb-6.5//事先下载好gdb-6.5放在定义的源代码目录下

arm.dat文件
KERNELONFIG='pwd'/arm.config//内核的配置
TARGET=arm-linux-//编译生成的工具链的名称
TARGET_CFLAGS="-O"

在终端中进入 crosstool-0.43 目录执行
./arm.sh
注:不要以root用户登录进行编译
好的机器大概半个钟头便可以编译完成,编译过程中可能会出现变量已经already set 的错误,只要运行一次Unset就可以了.
错误信息
crosstool: glibc refuses to build if LD_LIBRARY_PATH is set. Please unset it before running this script.


这个问题好解决,unset一下就行了
$ unset LD_LIBRARY_PATH

添加目录
在终端中输入以下命令
sudo gedit /etc/environment

在PATH结尾的分号前添加 Crosstool 的 bin 目录(此处我即使加了路径,在终端下也无法识别,所以每次编译都是手动定义好路径)

1 Comment:

  1. Anonymous said...
    呵呵,是不是写下来,免得以后会忘记?~~
    bless you~~

Post a Comment