[ZLG-ARM] ARM Linux 交叉编译 工具链 制作攻略

[复制链接]
 楼主| lpczcy 发表于 2009-6-4 13:36 | 显示全部楼层 |阅读模式
0、制作之前确保你的机子上有如下几个工具:bison&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;flex&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;build-essential。<br /><br />build-essential&nbsp;主要是用于提供GCC、GLIBC等必要的编译资源,一般做开发的人员机子上应该都会有的。如果没有,对于UBUNTU用户:sudo&nbsp;apt-get&nbsp;install&nbsp;build-essential&nbsp;bison&nbsp;flex,其它用户自己看着办,呵呵!<br /><br />1、从http://kegel.com/crosstool处下载crosstool-0.43.tar.gz并解开存于$HOME下。<br /><br />假如你想要arm9tdmi上的工具链(其它工具链方法相同),进入crosstool-0.43目录,用文本编辑器打开demo-arm9tdmi.sh,内容如下:<br /><br />#!/bin/sh<br />#&nbsp;This&nbsp;script&nbsp;has&nbsp;one&nbsp;line&nbsp;for&nbsp;each&nbsp;known&nbsp;working&nbsp;toolchain<br />#&nbsp;for&nbsp;this&nbsp;architecture.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Uncomment&nbsp;the&nbsp;one&nbsp;you&nbsp;want.<br />#&nbsp;Generated&nbsp;by&nbsp;generate-demo.pl&nbsp;from&nbsp;buildlogs/all.dats.txt<br /><br />set&nbsp;-ex<br />TARBALLS_DIR=$HOME/downloads  //该行表示你即将下载的工具源码压缩包的存放目录!<br />RESULT_TOP=/opt/crosstool //该行表示将要生成的工具链的存放目录,最好改到有写权限的目录!<br />export&nbsp;TARBALLS_DIR&nbsp;RESULT_TOP<br />GCC_LANGUAGES='c,c++'     &nbsp;//该行表示将要生成的工具链支持的语言的种类!<br />export&nbsp;GCC_LANGUAGES<br /><br />#&nbsp;Really,&nbsp;you&nbsp;should&nbsp;do&nbsp;the&nbsp;mkdir&nbsp;before&nbsp;running&nbsp;this,<br />#&nbsp;and&nbsp;chown&nbsp;/opt/crosstool&nbsp;to&nbsp;yourself&nbsp;so&nbsp;you&nbsp;don't&nbsp;need&nbsp;to&nbsp;run&nbsp;as&nbsp;root.<br />mkdir&nbsp;-p&nbsp;$RESULT_TOP<br /><br />#eval&nbsp;`cat&nbsp;arm9tdmi.dat&nbsp;gcc-3.2.3-glibc-2.2.5.dat`&nbsp;sh&nbsp;all.sh&nbsp;--notest<br />#eval&nbsp;`cat&nbsp;arm9tdmi.dat&nbsp;gcc-3.2.3-glibc-2.3.2.dat`&nbsp;sh&nbsp;all.sh&nbsp;--notest<br />#eval&nbsp;`cat&nbsp;arm9tdmi.dat&nbsp;gcc-3.2.3-glibc-2.3.2-tls.dat`&nbsp;sh&nbsp;all.sh&nbsp;--notest<br />#eval&nbsp;`cat&nbsp;arm9tdmi.dat&nbsp;gcc-3.3.6-glibc-2.2.5.dat`&nbsp;sh&nbsp;all.sh&nbsp;--notest<br />#eval&nbsp;`cat&nbsp;arm9tdmi.dat&nbsp;gcc-3.3.6-glibc-2.3.2.dat`&nbsp;sh&nbsp;all.sh&nbsp;--notest<br />#eval&nbsp;`cat&nbsp;arm9tdmi.dat&nbsp;gcc-3.3.6-glibc-2.3.2-tls.dat`&nbsp;sh&nbsp;all.sh&nbsp;--notest<br />#eval&nbsp;`cat&nbsp;arm9tdmi.dat&nbsp;gcc-3.4.5-glibc-2.2.5.dat`&nbsp;sh&nbsp;all.sh&nbsp;--notest<br />#eval&nbsp;`cat&nbsp;arm9tdmi.dat&nbsp;gcc-3.4.5-glibc-2.3.2.dat`&nbsp;sh&nbsp;all.sh&nbsp;--notest<br />#eval&nbsp;`cat&nbsp;arm9tdmi.dat&nbsp;gcc-3.4.5-glibc-2.3.2-tls.dat`&nbsp;sh&nbsp;all.sh&nbsp;--notest<br />#eval&nbsp;`cat&nbsp;arm9tdmi.dat&nbsp;gcc-3.4.5-glibc-2.3.5.dat`&nbsp;sh&nbsp;all.sh&nbsp;--notest<br />#eval&nbsp;`cat&nbsp;arm9tdmi.dat&nbsp;gcc-3.4.5-glibc-2.3.5-tls.dat`&nbsp;sh&nbsp;all.sh&nbsp;--notest<br />#eval&nbsp;`cat&nbsp;arm9tdmi.dat&nbsp;gcc-3.4.5-glibc-2.3.6.dat`&nbsp;sh&nbsp;all.sh&nbsp;--notest<br />#eval&nbsp;`cat&nbsp;arm9tdmi.dat&nbsp;gcc-3.4.5-glibc-2.3.6-tls.dat`&nbsp;sh&nbsp;all.sh&nbsp;--notest<br />#eval&nbsp;`cat&nbsp;arm9tdmi.dat&nbsp;gcc-4.0.2-glibc-2.3.2.dat`&nbsp;sh&nbsp;all.sh&nbsp;--notest<br />#eval&nbsp;`cat&nbsp;arm9tdmi.dat&nbsp;gcc-4.0.2-glibc-2.3.2-tls.dat`&nbsp;sh&nbsp;all.sh&nbsp;--notest<br />#eval&nbsp;`cat&nbsp;arm9tdmi.dat&nbsp;gcc-4.0.2-glibc-2.3.5.dat`&nbsp;sh&nbsp;all.sh&nbsp;--notest<br />eval&nbsp;`cat&nbsp;arm9tdmi.dat&nbsp;gcc-4.0.2-glibc-2.3.5-tls.dat`&nbsp;sh&nbsp;all.sh&nbsp;--notest&nbsp;  //我选择本行!!!<br />#eval&nbsp;`cat&nbsp;arm9tdmi.dat&nbsp;gcc-4.0.2-glibc-2.3.6.dat`&nbsp;sh&nbsp;all.sh&nbsp;--notest<br />#eval&nbsp;`cat&nbsp;arm9tdmi.dat&nbsp;gcc-4.0.2-glibc-2.3.6-tls.dat`&nbsp;sh&nbsp;all.sh&nbsp;--notest<br />#eval&nbsp;`cat&nbsp;arm9tdmi.dat&nbsp;gcc-4.1.0-glibc-2.3.2.dat`&nbsp;sh&nbsp;all.sh&nbsp;--notest<br />#eval&nbsp;`cat&nbsp;arm9tdmi.dat&nbsp;gcc-4.1.0-glibc-2.3.2-tls.dat`&nbsp;sh&nbsp;all.sh&nbsp;--notest<br /><br />echo&nbsp;Done. //上面表示你要选工具链的版本号!'#'起注释功能!我们可以选择一行!<br /><br />我把RESULT_TOP=/opt/crosstool改成RESULT_TOP=$HOME/toolchains,并在HOME目录下建立downloads&nbsp;和toolchains两个目录,分别用于存放源码压缩包和将要生成的工具链。<br /><br />打开crosstool-0.43目录下的arm9tdmi.dat文件,内容如下:<br /><br />KERNELCONFIG=`pwd`/arm.config<br />TARGET=arm-9tdmi-linux-gnu<br />GCC_EXTRA_CONFIG='--with-cpu=arm9tdmi&nbsp;--enable-cxx-flags=-mcpu=arm9tdmi'<br />TARGET_CFLAGS='-O'<br /><br />这个文件一般用于设置一些变量,一般不用改,用默认即可!<br /><br />打开crosstool-0.43目录下的gcc-4.0.2-glibc-2.3.5-tls.dat文件,内容如下:<br /><br />BINUTILS_DIR=binutils-2.16.1<br />GCC_DIR=gcc-4.0.2<br />GLIBC_DIR=glibc-2.3.5<br />LINUX_DIR=linux-2.6.15.4<br />LINUX_SANITIZED_HEADER_DIR=linux-libc-headers-2.6.12.0<br />GLIBCTHREADS_FILENAME=glibc-linuxthreads-2.3.5<br />GLIBC_EXTRA_CONFIG='$GLIBC_EXTRA_CONFIG&nbsp;--with-tls&nbsp;--with-__thread&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;--enable-kernel=2.4.18'<br /><br />然后你就可以到网上去下载上面红色标记的几个源码包,注意对应的版本号,下载后存放在downloads目录下。注意,不需要解压!!你甚至可以去掉LINUX_SANITIZED_HEADER_DIR=linux-libc-headers-2.6.12.0这一行(当然也就中需要下载这个包了)!你可以到中国的镜像站点去下载这些包:<br /><br />http://mirrors.shlug.org/&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;http://www.cn.kernel.org/pub/linux<br /><br />http://www.cn.kernel.org/pub/software&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ftp://ftp.cn.kernel.org/pub/linux<br /><br />ftp://ftp.cn.kernel.org/pub/software<br /><br />NOW,IT'S&nbsp;OK!<br /><br />2、进入crosstool-0.43目录,输入./demo-arm9tdmi.sh,然后经过几个小时的编译,就可以在你的toolchains目录中看到你想要的工具链,头文件,库文件等东东了!你可以把工具链所在目录加到环境变量PATH中即可使用工具链了!<br /><br />注意:crosstool&nbsp;-0.43目录下的PATCH目录中有各个工具链的补丁,如果在编译过程中有错误,可以在crosstool-0.43目录下build目录中的解压后的源文件中打上补丁(我没打补丁也编译成功了,呵呵)。另外,如果不想每次编译时都有浪费时间的解压过程,可以在eval&nbsp;`cat&nbsp;arm9tdmi.dat&nbsp;gcc-4.0.2-glibc-2.3.5-tls.dat`&nbsp;sh&nbsp;all.sh&nbsp;--notest&nbsp;末尾处加--nounpack表示不解压(当然前提是你已经自行解压源码包到了对应的目录/build/gcc-4.0.2-glibc-2.3.5-tls/arm-9tdmi-linux-gnu里了,也可以在这时给其打补丁).<br />&nbsp;<br /> &nbsp;&nbsp;<br />
miclinux 发表于 2009-6-4 14:08 | 显示全部楼层

好,顶一个

  
billen 发表于 2009-6-4 15:50 | 显示全部楼层

这个东西还是不要自己做的好!因为麻烦,且重点不在这个

  
您需要登录后才可以回帖 登录 | 注册

本版积分规则

42

主题

77

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部