ARM Linux 交叉编译 工具链 制作攻略

转载 2007年09月15日 17:27:00

ARM Linux 交叉编译 工具链 制作攻略

引自:http://hi.baidu.com/dirac/blog/item/7676eb1326c02921dc54013a.html

ARM Linux 交叉编译 工具链 制作攻略[原创]2007-06-25 20:040、制作之前确保你的机子上有如下几个工具: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里了,也可以在这时给其打补丁).
 

构建ARM Linux交叉编译工具链 详解

该文章转载于:http://blog.163.com/linan_6688_cool/blog/static/111774958200932963248316/ 本章学习目标:   ● 了解交叉编...
  • hailin0716
  • hailin0716
  • 2013年12月26日 11:08
  • 6218

linux下arm交叉编译工具链的安装

源于韦东山《嵌入式linux应用开发完全手册》 由于工作目录建立在“/work”目录下,所以首先改变/work目录的拥有者及所属组名: $ sudo chown lb:lb /work -R 然后将”...
  • u014416516
  • u014416516
  • 2014年03月29日 00:16
  • 1444

arm-linux-gcc交叉工具链的安装和使用

转自:http://blog.csdn.net/quannii/article/details/8515674 1、安装arm-linux-gcc交叉工具链 [root@localho...
  • zzwdkxx
  • zzwdkxx
  • 2016年03月10日 14:41
  • 1459

ARM交叉编译工具链的制作

进行嵌入式开发首先要有交叉编译工具链,利用开源编译系统buildroot可以很方便的制作交叉编译工具链。有关buildroot已经有很多介绍,这里不再描述。下面详细描述工具链的制作过程已经如何使用它。...
  • huangbin0709
  • huangbin0709
  • 2016年07月16日 17:13
  • 402

下载和使用ARM交叉编译工具链的一般问题解决

一、交叉编译工具链的获取 1.1.在ftp.gnu.org获取gcc工具链的相关源码,自己编译一个交叉编译工具链 1.2.使用crosstool-ng工具进行配置(crosstool-ng采用了m...
  • ACM_BMW
  • ACM_BMW
  • 2016年04月05日 21:18
  • 2414

arm-linux根目录文件的创建以及交叉工具链的安装

关于交叉工具链的安装: 将工具文件解压到某一个文件夹下(一般解压到 /opt 中),然后找到解压下的bin文件夹下的可执行文件。 编辑 /etc/profile ,加入例如这一行:pathmunge ...
  • zbffff
  • zbffff
  • 2013年09月11日 17:38
  • 2747

arm-linux-gcc 4.4.4交叉编译工具链的制作

前言 由于之前从来没有接触到Linux,经过一个月的学习(主要通过上网查阅相关的资料,到CSDN论坛上面去看),通过制作交叉工具链这一项任务,将Linux系统的基本指令,Linux不同内核的版本的文...
  • qq_26901007
  • qq_26901007
  • 2016年01月21日 17:06
  • 2774

ARM交叉编译工具链

为什么要用交叉编译器?交叉编译通俗地讲就是在一种平台上编译出能运行在体系结构不同的另一种平台上的程序,比如在PC平台(X86 CPU)上编译出能运行在以ARM为内核的CPU平台上的程序,编译得到的程序...
  • zhuczloveai910
  • zhuczloveai910
  • 2016年03月30日 08:31
  • 1473

构建ARM GCC工具链(更新版)

这个文章和之前的主要不同在于,没有使用系统的  gmp, mpfr, mpc, cloog等,而是使用源代码编译。 1.编译 binutils: 把 binutls 代码解压到 src 目录下, 同...
  • CaspianSea
  • CaspianSea
  • 2015年02月21日 01:14
  • 1345

制作好的交叉编译工具链下载及使用

最常用的编译版本是arm-linux-gcc-2.95.3、arm-linux-gcc-3.4.1 和 arm-linux-3.3.2 的,现在的嵌入式开发基本上用的是这些,2.95.3用于编译2...
  • github_37217957
  • github_37217957
  • 2016年12月31日 17:19
  • 460
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:ARM Linux 交叉编译 工具链 制作攻略
举报原因:
原因补充:

(最多只允许输入30个字)