Chinaunix首页 | 论坛 | 博客
  • 博客访问: 72253
  • 博文数量: 64
  • 博客积分: 165
  • 博客等级: 入伍新兵
  • 技术积分: 370
  • 用 户 组: 普通用户
  • 注册时间: 2012-12-15 22:23
文章分类
文章存档

2013年(4)

2012年(60)

我的朋友

分类:

2012-12-15 22:49:56

 

 

      在使用Crosstool之前,笔者尝试按照一般书籍上交叉编译器的制作流程并参考完善的多篇文章,含正式发表的期刊论文,尝试了好多天都没有成功,不得不放弃,很是郁闷,一个简单的交叉编译器都搞不定,心里很不舒服,于是决定再试。

       后来看到crosstool这个软件,据说不错,能够很方便的编译自己的交叉编译环境,于是尝试一下。参考了几篇网上的文章,尤其是其中的注意事项,本文也将注明。

去网站 下载最新的配置脚本压缩包crosstool-0.43.tar.gz,该作者目前在Google工作。/crosstool/crosstool-0.43.tar.gz

 

 

 

我们要编译的环境为 gcc-3.4.5-glibc-2.3.6

 

之所以没有选择别的版本,是因为demo-mipsel.dat中默认定义如下,笔者因为之前下载的是的gcc-3.4.6.tar.bz2,于是将下面的脚本稍作修改,最后报错,其中一个错误类似于下面的提示信息。

../sysdeps/generic/s_fmax.c:28:
internal compiler error: in elim_reg_cond, at flow.c:3257
                     Please submit a full bug report,

 

i686-host_pc-linux-gnu-ar找不到的错误提示。

 

demo-mipsel.dat中默认定义

#!/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/downloads

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

mkdir -p $RESULT_TOP

 

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

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

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

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

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

#eval `cat mipsel.dat gcc-3.3.6-glibc-2.3.5.dat` sh all.sh --notest

#eval `cat mipsel.dat gcc-3.3.6-glibc-2.3.6.dat` sh all.sh --notest

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

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

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

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

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

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

 

echo Done.

 

 

后来干脆下载gcc-3.4.5.tar.bz2重新试,很顺利,尽管中间有很多的编译警告,但起码最后成功了,至于其他版本是否可以,笔者没有一个一个去试,毕竟编译很花时间,笔者所用代码约1小时左右。

 

步骤如下:

 

先以root身份登陆Linux系统,建一个用户账号mipsel,设置密码123456,一下的编译过程必须在普通用户模式下运行,用root用户不行。

 

 

编译前需要下载一些软件,当然不下载也行,crosstool 会自动帮你下载,但crosstoolwget下载,速度会很慢,有一些Linux还没有该下载命令,所以最好在windows环境下通过专门的下载软件下载所需要的软件,然后通过winscp软件传到linux系统中。

根据后面脚本中说指定的的版本,下载软件及版本如下:

binutils-2.15.tar.bz2                    ftp://ftp.gnu.org 下载

glibc-linuxthreads-2.3.6.tar.bz2           ftp://ftp.gnu.org 下载

glibc-2.3.6.tar.gz                       ftp://ftp.gnu.org 下载

gcc-3.4.5.tar.bz2                       ftp://ftp.gnu.org 下载

linux-libc-headers-2.6.12.0.tar.bz2 下载

linux-2.6.18.1.tar.bz2   下载

 

仍以root身份登陆,在/home/mipsel下输入以下命令:

 

Mkdir downloads

Chown mipsel:mipsel  downloads

 

 

解压缩

tar zxvf crosstool-0.43.tar.gz

 

 

1mipsel.dat:

   可以不做任何修改

KERNELCONFIG=`pwd`/mipsel.config

TARGET=mipsel-unknown-linux-gnu   #交叉编译软件的前缀,可以修改

TARGET_CFLAGS="-O2 -finline-limit=10000"

 

2demo-mipsel.sh:

    压缩包以及安装路径必须在$HOME目录,否则报权限不够的错误.

 

#!/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/downloads   #下载的软件包存放的地址

RESULT_TOP=$HOME/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 mipsel.dat gcc-3.2.3-glibc-2.2.5.dat` sh all.sh --notest

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

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

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

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

#eval `cat mipsel.dat gcc-3.3.6-glibc-2.3.5.dat` sh all.sh --notest

#eval `cat mipsel.dat gcc-3.3.6-glibc-2.3.6.dat` sh all.sh --notest

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

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

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

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

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

eval `cat mipsel.dat gcc-3.4.5-glibc-2.3.6-tls.dat` sh all.sh –notest 

#这是我们要编译的交叉环境的版本

echo Done.

 

3 gcc-4.1.0-glibc-2.3.6-tls.dat

 

# vi gcc-3.4.5-glibc-2.3.6-tls.dat

BINUTILS_DIR=binutils-2.15

GCC_DIR=gcc-3.4.5

GLIBC_DIR=glibc-2.3.6

LINUX_DIR=linux-2.6.18.1

LINUX_SANITIZED_HEADER_DIR=linux-libc-headers-2.6.12.0

GLIBCTHREADS_FILENAME=glibc-linuxthreads-2.3.6

GLIBC_EXTRA_CONFIG="$GLIBC_EXTRA_CONFIG --with-tls --with-__thread  --enable-kernel=2.4.18"

 

 笔者曾用binutils-2.19测试,编译过程中出现一些错误,已经记不清,所以,后来就直接下载了默认的binutils-2.15版本。Linux内核与默认的有所区别,只是因为该版本与目前笔者正在使用的内核版本一致,并没有其他原因。

 

 4)最后在用户模式下执行demo- mipsel.sh就可以了

./demo-mipsel.sh

 

5)看看交叉编译生成的目录

cd /home/mipsel/crosstool/gcc-3.4.5-glibc-2.3.6/mipsel-unknown-linux-gnu

 

[mipsel@localhost mipsel-unknown-linux-gnu]$ ls

bin include  lib  man     mipsel-unknown-linux-gnu.crosstoolconfig.txt

distributed  info     libexec  mipsel-unknown-linux-gnu  tmp

 

 

 

阅读(210) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~