ubuntu下利用crosstool制作交叉编译工具

1、ubuntu版本:unbutu10.10(以上版本应该也可以,本人没有测试)

2、制作交叉编译工具需要文件:

binutils-2.16.1.tar.bz2  http://mirrors.ustc.edu.cn/gnu/binutils/

gcc-3.3.6.tar.gz          http://mirrors.ustc.edu.cn/gnu/gcc/gcc-3.3.6/

glibc-2.3.2.tar.gz         http://mirrors.ustc.edu.cn/gnu/glibc/

glibc-linuxthreads-2.3.2.tar.gz    http://mirrors.ustc.edu.cn/gnu/glibc/

linux-2.6.10.tar.gz            https://www.kernel.org/pub/linux/kernel/v2.6/

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

4、制作低版本gcc需要文件:

本例是基于gcc-3.4.6

    gcc-3.4-base_3.4.6-6ubuntu3_i386.deb

 

    gcc-3.4_3.4.6-6ubuntu3_i386.deb

 

    cpp-3.4_3.4.6-6ubuntu3_i386.deb

 

    g++-3.4_3.4.6-6ubuntu3_i386.deb

  

   libstdc++6-dev_3.4.6-6ubuntu3_i386.deb

           libstdc++6_3.4.6_6ubuntu3_i386.deb

以上文件包下载地址:

http://archive.ubuntu.com/ubuntu/pool/universe/g/gcc-3.4/

 

5、首先应该安装一些插件

sudo apt-get install ncurses-dev

sudo apt-get install bison

sudo apt-get install flex 

sudo apt-get install build-essential

这些插件式编译低版本的gcc所必须的。

6、自己在主目录下新建一个目录为gcc-3.4.6,把制作低版本gcc需要的文件复制到该目录下。

在该目录下运行 dpkg -i *.deb

这个命令作用是把后缀为.deb的文件全部安装上,同样也可以单独安装各个文件

7、安装成功后,运行一下命令

update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-3.4 40

update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.4 30

此时可能会提示没有update-alternatives命令不存在,那么缺什么就安装什么

8、切换到gcc-3.4.6

运行命令update-alternatives --config gcc

选择需要的gcc版本,这里选择刚安装的gcc-3.4.6

 

 

 

9、查看当前gcc版本

运行命令 gcc -v

 

下面就开始制作自己的交叉编译工具了:

10、在主目录下解压crosstool-0.43.tar.gz生成目录crosstool-0.43

运行命令 tar zxvf crosstool-0.43.tar.gz

11、进入解压后目录,修改相关文件

运行命令 cd crosstool-0.43.tar.gz 进入目录

运行命令 cp demo-arm.sh arm.sh 

运行命令 vi arm.sh

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/mydown

RESULT_TOP=$HOME/opt/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.

sudo 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-2.95.3-glibc-2.2.5.dat` sh all.sh --notest

#eval `cat arm.dat gcc-3.2.3-glibc-2.2.5.dat` sh all.sh --notest

#eval `cat arm.dat gcc-3.2.3-glibc-2.3.2.dat` sh all.sh --notest

#eval `cat arm.dat gcc-3.2.3-glibc-2.3.2-tls.dat` sh all.sh --notest

#eval `cat arm.dat gcc-3.3.6-glibc-2.2.2.dat` sh all.sh --notest

#eval `cat arm.dat gcc-3.3.6-glibc-2.2.5.dat` sh all.sh --notest

#eval `cat arm.dat gcc-3.3.6-glibc-2.3.2.dat` sh all.sh --notest

#eval `cat arm.dat gcc-3.3.6-glibc-2.3.2-tls.dat` sh all.sh --notest

#eval `cat arm.dat gcc-3.4.5-glibc-2.2.2.dat` sh all.sh --notest

#eval `cat arm.dat gcc-3.4.5-glibc-2.2.5.dat` sh all.sh --notest

#eval `cat arm.dat gcc-3.4.5-glibc-2.3.2.dat` sh all.sh --notest

#eval `cat arm.dat gcc-3.4.5-glibc-2.3.2-tls.dat` sh all.sh --notest

#eval `cat arm.dat gcc-3.4.5-glibc-2.3.5.dat` sh all.sh --notest

#eval `cat arm.dat gcc-3.4.5-glibc-2.3.5-tls.dat` sh all.sh --notest

#eval `cat arm.dat gcc-3.4.5-glibc-2.3.6.dat` sh all.sh --notest

#eval `cat arm.dat gcc-3.4.5-glibc-2.3.6-tls.dat` sh all.sh --notest

#eval `cat arm.dat gcc-4.0.2-glibc-2.2.2.dat` sh all.sh --notest

#eval `cat arm.dat gcc-4.0.2-glibc-2.3.2.dat` sh all.sh --notest

#eval `cat arm.dat gcc-4.0.2-glibc-2.3.2-tls.dat` sh all.sh --notest

#eval `cat arm.dat gcc-4.0.2-glibc-2.3.5.dat` sh all.sh --notest

#eval `cat arm.dat gcc-4.0.2-glibc-2.3.5-tls.dat` sh all.sh --notest

#eval `cat arm.dat gcc-4.0.2-glibc-2.3.6.dat` sh all.sh --notest

#eval `cat arm.dat gcc-4.0.2-glibc-2.3.6-tls.dat` sh all.sh --notest

#eval `cat arm.dat gcc-4.1.0-glibc-2.2.2.dat` sh all.sh --notest

#eval `cat arm.dat gcc-4.1.0-glibc-2.3.2.dat` sh all.sh --notest

eval `cat arm.dat gcc-3.3.6-glibc-2.3.2.dat` sh all.sh --notest

 

echo Done.

这个文件需要修改地方以上用红色标记。

TARBALLS_DIR=$HOME/mydown

这个目录是存放制作交叉编译工具需要文件

 

RESULT_TOP=$HOME/opt/crosstool

这个目录是编译后生成文件的目录,其中包括交叉编译工具链

 

sudo mkdir -p $RESULT_TOP

加入sudo增加用户权限,不加可能导致不能建立目录

 

eval `cat arm.dat gcc-3.3.6-glibc-2.3.2.dat` sh all.sh --notest

这条语句是为了执行arm.datgcc-3.3.6-glibc-2.3.2.dat文件,此处的gcc-3.3.6-glibc-2.3.2和下载的gcc-3.3.6glibc-2.3.2对应。

 

接下来修改arm.dat

arm.dat内容如下:

KERNELCONFIG=`pwd`/arm.config

TARGET=arm-linux  //生成交叉工具名称前缀,根据自己喜好更改

TARGET_CFLAGS="-O"

 

修改gcc-3.3.6-glibc-2.3.2.dat

gcc-3.3.6-glibc-2.3.2.dat内容如下:

BINUTILS_DIR=binutils-2.16.1

GCC_DIR=gcc-3.3.6

GLIBC_DIR=glibc-2.3.2

GLIBCTHREADS_FILENAME=glibc-linuxthreads-2.3.2

LINUX_DIR=linux-2.6.10

LINUX_SANITIZED_HEADER_DIR=linux-libc-headers-2.6.12.0

 

 

这几个配置和下载文件一一对应,更改很随意!

 

12、接下来开始编译

运行在crosstool-0.43目录下运行命令 ./arm.sh

如果运气好的话,编译会飞快地进行,我们只需等待。运气不好,对不起,可能会出现莫名其妙的错误,上网搜索资料,干掉错误,在解决问题的时候你就慢慢地提高了!

13、成功后,在home/[name]/opt/crosstool/gcc-3.3.6-glibc-2.3.2/arm-linux/bin目录下会出现类似下面的东西

arm-linux-addr2line  arm-linux-gprof

arm-linux-ar         arm-linux-ld

arm-linux-as         arm-linux-nm

arm-linux-c++        arm-linux-objcopy

arm-linux-c++filt    arm-linux-objdump

arm-linux-cpp        arm-linux-ranlib

arm-linux-g++        arm-linux-readelf

arm-linux-gcc        arm-linux-size

arm-linux-gcc-3.3.6  arm-linux-strings

arm-linux-gccbug     arm-linux-strip

arm-linux-gcov       fix-embedded-paths

这就是传说中的交叉编译工具了

14、不要着急,工作还没做完,下面就是把交叉编译工具路径添加到环境变量中

修改环境变量方法有3种:

1、修改$HOME目录下.profile

在文件末尾添加 

export PATH=$PATH:/home/[name]/opt/crosstool/gcc-3.3.6-glibc-2.3.2/arm-linux/bin

保存退出后,运行命令source ./.profile,重新启动终端窗口

2、修改/etc/profile

方法同上

3、修改$HOME目录下.bashrc

在文件末尾添加

export PATH=$PATH:/home/[name]/opt/crosstool/gcc-3.3.6-glibc-2.3.2/arm-linux/bin

此路径添加具体视情况而定。

现在我们可以随心所欲的使用交叉编译工具了,uboot、内核不是问题。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值