分类:
2012-12-15 22:49:56
在使用Crosstool之前,笔者尝试按照一般书籍上交叉编译器的制作流程并参考完善的多篇文章,含正式发表的期刊论文,尝试了好多天都没有成功,不得不放弃,很是郁闷,一个简单的交叉编译器都搞不定,心里很不舒服,于是决定再试。
后来看到crosstool这个软件,据说不错,能够很方便的编译自己的交叉编译环境,于是尝试一下。参考了几篇网上的文章,尤其是其中的注意事项,本文也将注明。
去网站 下载最新的配置脚本压缩包crosstool-0.43.tar.gz,该作者目前在Google工作。/crosstool/crosstool-0.43.tar.gz
我们要编译的环境为 gcc-
之所以没有选择别的版本,是因为demo-mipsel.dat中默认定义如下,笔者因为之前下载的是的gcc-
../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-
#eval `cat mipsel.dat gcc-
#eval `cat mipsel.dat gcc-
#eval `cat mipsel.dat gcc-
#eval `cat mipsel.dat gcc-
#eval `cat mipsel.dat gcc-
#eval `cat mipsel.dat gcc-
#eval `cat mipsel.dat gcc-
#eval `cat mipsel.dat gcc-
#eval `cat mipsel.dat gcc-
#eval `cat mipsel.dat gcc-
#eval `cat mipsel.dat gcc-
eval `cat mipsel.dat gcc-
echo Done.
后来干脆下载gcc-
步骤如下:
先以root身份登陆Linux系统,建一个用户账号mipsel,设置密码123456,一下的编译过程必须在普通用户模式下运行,用root用户不行。
编译前需要下载一些软件,当然不下载也行,crosstool 会自动帮你下载,但crosstool用wget下载,速度会很慢,有一些Linux还没有该下载命令,所以最好在windows环境下通过专门的下载软件下载所需要的软件,然后通过winscp软件传到linux系统中。
根据后面脚本中说指定的的版本,下载软件及版本如下:
binutils-2.15.tar.bz2 从ftp://ftp.gnu.org 下载
glibc-linuxthreads-
glibc-
gcc-
linux-libc-headers-
linux-
仍以root身份登陆,在/home/mipsel下输入以下命令:
Mkdir downloads
Chown mipsel:mipsel downloads
解压缩
tar zxvf crosstool-0.43.tar.gz
1)mipsel.dat:
可以不做任何修改
KERNELCONFIG=`pwd`/mipsel.config
TARGET=mipsel-unknown-linux-gnu #交叉编译软件的前缀,可以修改
TARGET_CFLAGS="-O2 -finline-limit=10000"
2)demo-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-
#eval `cat mipsel.dat gcc-
#eval `cat mipsel.dat gcc-
#eval `cat mipsel.dat gcc-
#eval `cat mipsel.dat gcc-
#eval `cat mipsel.dat gcc-
#eval `cat mipsel.dat gcc-
#eval `cat mipsel.dat gcc-
#eval `cat mipsel.dat gcc-
#eval `cat mipsel.dat gcc-
#eval `cat mipsel.dat gcc-
#eval `cat mipsel.dat gcc-
eval `cat mipsel.dat gcc-
#这是我们要编译的交叉环境的版本
echo Done.
3) gcc-
# vi gcc-
BINUTILS_DIR=binutils-2.15
GCC_DIR=gcc-
GLIBC_DIR=glibc-
LINUX_DIR=linux-
LINUX_SANITIZED_HEADER_DIR=linux-libc-headers-
GLIBCTHREADS_FILENAME=glibc-linuxthreads-
GLIBC_EXTRA_CONFIG="$GLIBC_EXTRA_CONFIG --with-tls --with-__thread --enable-kernel=
笔者曾用binutils-2.19测试,编译过程中出现一些错误,已经记不清,所以,后来就直接下载了默认的binutils-2.15版本。Linux内核与默认的有所区别,只是因为该版本与目前笔者正在使用的内核版本一致,并没有其他原因。
4)最后在用户模式下执行demo- mipsel.sh就可以了
./demo-mipsel.sh
5)看看交叉编译生成的目录
cd /home/mipsel/crosstool/gcc-
[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