Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1425553
  • 博文数量: 613
  • 博客积分: 11499
  • 博客等级: 上将
  • 技术积分: 5511
  • 用 户 组: 普通用户
  • 注册时间: 2008-03-12 19:27
  • 认证徽章:
文章分类

全部博文(613)

文章存档

2016年(5)

2015年(18)

2014年(12)

2013年(16)

2012年(300)

2011年(45)

2010年(37)

2009年(79)

2008年(101)

分类: LINUX

2009-11-11 00:05:51

ARM Linux 交叉编译 工具链 制作攻略
ARM Linux 交叉编译 工具链 制作攻略
2007-06-25 20:04

0、制作之前确保你的机子上有如下几个工具:bison             flex            build-essential。

build-essential 主要是用于提供GCC、GLIBC等必要的编译资源,一般做开发的人员机子上应该都会有的。如果没有,对于UBUNTU用户:sudo apt-get install build-essential bison flex,其它用户自己看着办,呵呵!

1、从http://kegel.com/crosstool处下载crosstool-0.43.tar.gz并解开存于$HOME下。

假如你想要arm9tdmi上的工具链(其它工具链方法相同),进入crosstool-0.43目录,用文本编辑器打开demo-arm9tdmi.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/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 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 --notest

echo Done. //上面表示你要选工具链的版本号!"#"起注释功能!我们可以选择一行!

我把RESULT_TOP=/opt/crosstool改成RESULT_TOP=$HOME/toolchains,并在HOME目录下建立downloads 和toolchains两个目录,分别用于存放源码压缩包和将要生成的工具链。

打开crosstool-0.43目录下的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"

这个文件一般用于设置一些变量,一般不用改,用默认即可!

打开crosstool-0.43目录下的gcc-4.0.2-glibc-2.3.5-tls.dat文件,内容如下:

BINUTILS_DIR=binutils-2.16.1
GCC_DIR=gcc-4.0.2
GLIBC_DIR=glibc-2.3.5
LINUX_DIR=linux-2.6.15.4
LINUX_SANITIZED_HEADER_DIR=linux-libc-headers-2.6.12.0
GLIBCTHREADS_FILENAME=glibc-linuxthreads-2.3.5
GLIBC_EXTRA_CONFIG="$GLIBC_EXTRA_CONFIG --with-tls --with-__thread           --enable-kernel=2.4.18"

然后你就可以到网上去下载上面红色标记的几个源码包,注意对应的版本号,下载后存放在downloads目录下。注意,不需要解压!!你甚至可以去掉LINUX_SANITIZED_HEADER_DIR=linux-libc-headers-2.6.12.0这一行(当然也就中需要下载这个包了)!你可以到中国的镜像站点去下载这些包:

http://mirrors.shlug.org/                                     http://www.cn.kernel.org/pub/linux

http://www.cn.kernel.org/pub/software         ftp://ftp.cn.kernel.org/pub/linux

ftp://ftp.cn.kernel.org/pub/software

NOW,IT'S OK!

2、进入crosstool-0.43目录,输入./demo-arm9tdmi.sh,然后经过几个小时的编译,就可以在你的toolchains目录中看到你想要的工具链,头文件,库文件等东东了!你可以把工具链所在目录加到环境变量PATH中即可使用工具链了!

注意:crosstool -0.43目录下的PATCH目录中有各个工具链的补丁,如果在编译过程中有错误,可以在crosstool-0.43目录下build目录中的解压后的源文件中打上补丁(我没打补丁也编译成功了,呵呵)。另外,如果不想每次编译时都有浪费时间的解压过程,可以在eval `cat arm9tdmi.dat gcc-4.0.2-glibc-2.3.5-tls.dat` sh all.sh --notest 末尾处加--nounpack表示不解压(当然前提是你已经自行解压源码包到了对应的目录/build/gcc-4.0.2-glibc-2.3.5-tls/arm-9tdmi-linux-gnu里了,也可以在这时给其打补丁).

 原文地址 http://blog.chinaunix.net/u1/42662/showart_342564.html
发表于: 2007-08-16,修改于: 2007-08-16 17:12,已浏览8124次,有评论9条 推荐 投诉


网友评论
网友: yk325 时间:2008-03-25 10:17:20 IP地址:210.27.3.★
大虾,我在使用交叉工具链的时候碰到了点问题,不知道如何解决,帮忙看一下吧

我下载了交叉编译工具链,,,在测试hello,world!程序的时候,出现错误,提示如下:

gcc: installation problem, cannot exec `cpp0':there is no such file or dircctory

按照网上的方法,建立相应的符号链接后,又提示找不到stdio.h stddef.h等文件,我把这些文件路径添加到搜索路径后,,又出现如下错误:

gcc: installation problem, cannot exec `cc1':there is no such file or dircctory

按照上面类似方法建立符号链接后,又提示程序里面的许多错误,不过,都是生成的临时汇编代码,

换了几个版本的交叉工具链,都有同样的问题,哪位知道怎样解决,还请帮忙,谢谢了

使用过的交叉工具链版本包括2.95.3  3.2,Linux版本包括redhat 9.0 Debian 4.0

Blog作者的回复:
我猜想会不会是你的编译器放的位置的问题,我没怎么用下载下来的编译器,但是好像一般要放在 /usr/local/下,比如编译器的路径是/usr/local/arm/3.4.1/bin/arm-linux-gcc等等。


网友: 本站网友 时间:2008-09-02 14:53:42 IP地址:222.191.240.★
解压源码包到了对应的目录/build/gcc-4.0.2-glibc-2.3.5-tls/arm-9tdmi-linux-gnu里
这个目录是最终目录,还是download里的目录阿?

Blog作者的回复:
不是最终的,它类似temp文件夹,
目标文件夹是RESULT_TOP定义的


网友: 本站网友 时间:2008-09-02 14:59:23 IP地址:222.191.240.★
另外想问一下,最新版本的软件是不是兼容低版本的软件阿?
比如以前用gcc-3.3.6编译的东西,
换成gcc-3.4.1是否也可以呢?

Blog作者的回复:
应该可以


网友: 本站网友 时间:2008-09-02 15:07:52 IP地址:222.191.240.★
在gcc-4.0.2-glibc-2.3.5-tls.dat文件中对所需的文件做了列表,但是只有文件名,对于不同的压缩格式的相通文件并不都认,比如tar.gz和tar.bz2只认其中一种,我想他是用的全名称,那么全名称在哪里设置的呢?

Blog作者的回复:
不要去改这个,你下bz2的就对了


网友: 本站网友 时间:2008-09-23 19:51:32 IP地址:218.24.167.★
RESULT_TOP 在哪定义啊?

网友: 本站网友 时间:2008-12-03 14:40:51 IP地址:61.48.106.★
请问出现了这个问题是怎么回事?
configure: error: C preprocessor "usr/local/arm/3.4.1/bin/arm-linux-gcc" fails sanity check 

网友: 本站网友 时间:2009-05-19 11:27:36 IP地址:61.50.133.★
请问出现了这个问题是怎么回事啊?
configure : error: no acceptable cc found in $PATH

Blog作者的回复:
也许是权限问题,或是你的GCC根本不在你这个用户下的PATH中。


网友: rek 时间:2009-08-16 12:30:53 IP地址:124.161.72.★
博主好,我照这个方法做
运行./demo-arm9tdmi.sh一段时间以后就停了
说什么gcc too old
是不是因为ubuntu自带的那个gcc有影响啊?怎么处理呢?
谢谢

网友: masonzhang 时间:2009-08-27 00:19:00 IP地址:117.88.148.★
问下 你编译的 arm9tdmi armv4T 是否支援 软浮点 ?

3X的片子是不支援的 只有 cirrus 的 arm9 (EP9315 带 硬浮点 就我所知啊 )
阅读(814) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~
评论热议
请登录后评论。

登录 注册