ubuntu8.04下用crosstool-0.43制作自己的arm交叉编译环境
1。怕出错,先确定bison,flex,patch装好没有。 在地址 可以下载 crosstool-0.43。 下载下列文件放在/home/jettlau/downloads:
binutils-2.16.1.tar.bz2 ftp://ftp.gnu.org/gnu/binutils/binutils-2.16.1.tar.bz2
gcc-3.3.6.tar.bz2 ftp://ftp.ntu.edu.tw/pub/gnu/gnu/gcc/gcc-3.3.6/gcc-3.3.6.tar.bz2
gcc-4.1.0.tar.bz2 ftp://ftp.ntu.edu.tw/pub/gnu/gnu/gcc/gcc-4.1.0/gcc-4.1.0.tar.bz2
glibc-2.3.2.tar.bz2 ftp://ftp.ntu.edu.tw/pub/gnu/gnu/glibc/glibc-2.3.2.tar.bz2
linux-2.6.15.4.tar.bz2 ftp://ftp.kernel.org/pub/linux/kernel/v2.6/linux-2.6.15.4.tar.bz2
linux-libc-headers-2.6.12.0.tar.bz2 ~mmazu ... rs-2.6.12.0.tar.bz2
glibc-linuxthreads-2.3.2.tar.bz2 ftp://ftp.ntu.edu.tw/pub/gnu/gnu ... reads-2.3.2.tar.bz2
gdb-6.5.tar.bz2 ftp://ftp.ntu.edu.tw/pub/gnu/gnu/gdb/gdb-6.5.tar.bz2 解压crosstool-0.43后进入其目录:
tar -xzvf crosstool-0.43.tar.gz
cd crosstool-0.43
2. 接着就选择自己希望的模板,这儿是以arm9做试验玩,因此选择了 demo-arm9tdmi.sh 做模板。 cat demo-arm.sh。当然可以COPY个改名字。
可以看到
#!/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.txtset-ex
TARBALLS_DIR=/home/jettlau/downloadRESULT_TOP=/home/jettlau/crosstool ;不是crosstool-0.43文件夹
export TARBALLS_DIR RESULT_TOPGCC_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 –notesteval `cat arm9tdmi.dat gcc-4.1.1-glibc-2.3.2.dat` sh all.sh –notestecho Done.
其中红色字为自己修改的地方,看最后一个红色的行,表示我们要编译 gcc 4.1.1 的。
3.cat arm9tdmi.dat
可以看到
KERNELCONFIG=`pwd`/arm.config
TARGET=arm-9tdmi-linux-gnu
GCC_EXTRA_CONFIG=”–with-cpu=arm9tdmi –enable-cxx-flags=-mcpu=arm9tdmi”
TARGET_CFLAGS=”-O”
其中红色的文字可以根据自己的需要做修改,一般是 arm-linux ,符合网上面很多编译情形的。
4。cat 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.0
GLIBC_DIR=glibc-2.3.2
LINUX_DIR=linux-2.6.15.4
LINUX_SANITIZED_HEADER_DIR=linux-libc-headers-2.6.12.0
GLIBCTHREADS_FILENAME=glibc-linuxthreads-2.3.2
GDB_DIR=gdb-6.5
GLIBC_EXTRA_CONFIG=”$GLIBC_EXTRA_CONFIG –with-tls –with-__thread –enable-kernel=2.4.18″
5.是不是有点急着想编译啦。不过还有几个步骤没做呢。还是修改文件。重要的很啦,不然编了半个小时跳出个错误,气人啦!!!
解压
glibc-2.3.2.tar.bz2
找到glibc-2.3.2/csu
目录下的Makefile
按如下修改
文件末尾有2处
echo
echo
"\"Compiled on a $$os $$version system" \
"on
`date +%Y-%m-%d`.\\n\"" ;; \
改为:
echo
"\"Compiled on a $$os $$version system" \
"on
`date +%Y-%m-%d`.\\\\n\"" ;; \
echo
"\"Available extensions:\\n\"";
改为:
echo
"\"Available extensions:\\\\n\"" \
保存并重新压缩为glibc-2.3.2.tar.bz2
覆盖原来download目录下的glibc-2.3.2.tar.bz2
*******
ubuntu8.04自带的是gcc-4.3.2无法用crosstool正常编译交叉编译器,所以必须安装gcc-4.1,但是不必卸载4.3.2。方法是用新立得软件包管理器安装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的软连接)
******
当然你也要检查下你的SHELLls -la /bin/sh
命令看到/bin/sh其实是一个指向dash的软链接,则请运行以下命令,将/bin/sh链接到bash。
sudo mv /bin/sh /bin/sh.old
sudo ln -sf bash /bin/sh
6。所有的准备工作都做好了,现在准备等了,呵呵在crosstool-0.43主目录下输入./demo-arm.sh别忘了回车。哈哈!!!!你就等它
echo Done
Done
7,修改
/etc/environment
文件PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/skyeye:/usr/local/arm/2.95.3/bin:/home/jettlau/crosstool-4.1.1/gcc-4.1.1-glibc-2.3.2/arm-9tdmi-linux-gnu/bin"
大功告成!!!!我是新手,很多东西都是参照大虾们的。大虾们,看到和你的文章有相同的地方,请宽恕。实在不行告诉我,我第一时间处理。
阅读(1029) | 评论(0) | 转发(0) |