Ubuntu9.10构建ARM-Linux交叉编译器

Ubuntu9.10构建ARM-Linux交叉编译器

 

1.制作之前确保你的机子上有如下几个工具:bisonflexbuild-essentialpatchlibc6-dev

build-essential主要是用于提供GCCGLIBC等必要的编译资源,一般做开发的人员机子上应该都会有。如果没有:sudo apt-get install......

 

ubuntu9.10自带的是gcc-4.4无法用crosstool正常编译交叉编译器,所以必须安装gcc-4.1,但是不必卸载4.4。方法是用新立得软件包管理器安装gcc-4.1

sudo rm /usr/bin/gcc               //删除gcc,它只是一个到gcc-4.4的软连接

sudo ln -s /usr/bin/gcc-4.1 /usr/bin/gcc      //建立gcc-4.1软连接

 

ls -la /bin/sh

看到/bin/sh其实是一个指向dash的软链接,则请运行以下命令,将/bin/sh链接到bash

sudo mv /bin/sh /bin/sh.old

sudo ln -sf bash /bin/sh

 

2.下载crosstool,解压到工作目录

Acrosstool是由美国人Dan Kegel开发的一套可以自动编译不同匹配版本gccglibc,并作测试的脚本程序。下载地址:http://kegel.com/crosstool/crosstool-0.43.tar.gz

http://kegel.com/crosstool/crosstool-0.43/buildlogs/可以看到各种CPUGCC+Glibc版本那些已经编译成功,那些部分成功,那些彻底失败。

 

Btar -zxvf crosstool-0.43.tar.gz

cd crosstool-0.43

crosstool文件中,找到你要交叉编译的CPU所对应的脚本,如我要交叉编译的CPUS3C2440,则选用demo-arm9tdmi.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/liao/crosstool/source

RESULT_TOP=/home/liao/crosstool

//这两行是需要修改的参数

//TARBALLS_DIR是下载的工具源码压缩包的存放目录,RESULT_TOP是要生成的工具链的存放目录

//一定要改到有写权限的目录,不然无法编译,如用root登录进行编译,可能会出错

 

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 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 arm9tdmi.dat gcc-4.1.1-glibc-2.3.2.dat` sh all.sh --notest

//上面表示要选工具链的版本号!这里我写了gcc-4.1.1-glibc-2.3.2.dat版本

 

echo Done.

 

注意:如果要使用GDB调试工具,记得在后面加上--gdbCrosstool会编译出arm-9tdmi-linux-gnu-gdbarm-9tdmi-linux-gnu-gdbtuigdbserver(开发板使用)。但是要安装库libncurses5-dev

 

C.根据你所选的工具链的版本号,打开相应的.dat文件,打开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.24

LINUX_SANITIZED_HEADER_DIR=linux-libc-headers-2.6.12.0

GLIBCTHREADS_FILENAME=glibc-linuxthreads-2.3.2

GDB_DIR=gdb-6.5

 

到网上去下载红色标记的.bz2源码包,注意版本,下载后存放到${TARBALLS_DIR}目录。

这一步可以省略,因为运行demo-arm9tdmi.sh时在${TARBALLS_DIR}目录没有源码包,会自动下载,建议事先下载,节约时间。以下是源码包链接地址。

linux-2.6.24.tar.bz2              ftp://ftp.cn.kernel.org/pub/linux

cross-0.43.tar.gz                  http://kegel.com/crosstool/crosstool-0.43.tar.gz

gcc-4.1.1                             http://ftp.gnu.org/gnu/gcc/gcc-4.1.1/

gcc-3.3.6.tar.bz2

gcc-core-3.3.6.tar.bz2         http://ftp.gnu.org/gnu/gcc/gcc-3.3.6/

binutils-2.16.1.tar.bz2          http://ftp.gnu.org/gnu/binutils/

glibc-linuxthreads-2.3.2

glibc-2.3.2.tar.bz2                  http://ftp.gnu.org/gnu/glibc/

linux-libc-headers-2.6.12.0     http://ep09.pld-linux.org/~mmazur/linux-libc-headers/

gdb-6.5.tar.bz2                      http://ftp.gnu.org/gnu/gdb/

 

3.进入crosstool-0.43,运行demo-arm9tdmi.sh,等待一阵English飘过....................

 

 

 

 

你可能感兴趣的:(Ubuntu9.10构建ARM-Linux交叉编译器)