微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > arm gcc交叉编译工具链建立

arm gcc交叉编译工具链建立

时间:11-09 来源:互联网 点击:

1.1.Arm交叉编译工具链

下载地址Gnu.org

binutils-2.21.1.tar.bz2

gcc-4.4.4.tar.bz2

glibc-2.11.2.tar.bz2

Glibc-ports-2.11.tar.bz2

Gmp-4.2.tar.bz2

Mpfr-2.4.0.tar.bz2

1.1.1.建立工作目录

创建工具链文件夹:

[root@localhostcross]#mkdirembedded-toolchains

在建立了顶层文件夹embedded-toolchains,下面在此文件夹下建立如下几个目录:

Øsetup-dir,存放下载的压缩包;

Øsrc-dir,存放binutils、gcc、glibc解压之后的源文件;

Økernel,存放内核文件,对内核的配置和编译工作也在此完成;

Øbuild-dir,编译src-dir下面的源文件,这是GNU推荐的源文件目录与编译目录分离的做法;

Øtool-chain,交叉编译工具链的安装位;

Øprogram,存放编写程序;

Ødoc,说明文档和脚本文件;

下面建立目录,并拷贝源文件。

[root@localhostcross]#cd embedded- toolchains

[root@localhostembedded-toolchains] #mkdir setup-dir src-dir kernel build-dir tool-chain program doc

[root@localhostembedded-toolchains] #ls

build-dir doc kernelprogram setup-dir src-dir tool-chain

[root@localhostembedded-toolchains] #cd setup-dir

拷贝源文件:

这里我们采用直接拷贝源文件的方法,首先应该修改setup-dir的权限

[root@localhostembedded- toolchains]#chmod 777 setup-dir

然后直接拷贝/home/karen目录下的源文件到setup-dir目录中,如下图:

建立编译目录:

[root@localhostsetup-dir]#cd ../build-dir

[root@localhostbuild-dir] #mkdir build-binutils build-gcc build-glibc

1.1.2. 输出环境变量

输出如下的环境变量方便我们编译。

为简化操作过程。下面就建立shell命令脚本environment-variables:

[root@localhostbuild -dir] #cd ../doc

[root@localhostdoc] #mkdir scripts

[root@localhostdoc] #cd scripts

用编辑器vi编辑环境变量脚本envionment-variables:

[root@localhostscripts]#vi envionment-variables

exportPRJROOT=/home/mxl/diliuzhang/embedded-toolchains

exportTARGET=arm-linux

exportPREFIX=$PRJROOT/tool-chain

exportTARGET_PREFIX=$PREFIX/$TARGET

exportPATH=$PREFIX/bin:$PATH

截图如下:

%% Q:为什么用了source ./environment-variables才正常执行,去掉source就没有执行?%%

%%如果用source执行,不需要脚本有执行权限,权限为664也可以,执行命令如下:%%

%%Sourceenvironment-variables %%

说明:

TARGET变量用来定义目标板的类型,以后会根据此目标板的类型来建立工具链。参

看表6-1所示。目标板的定义与主机的类型是没有关系的,但是如果更改TARGET的值,

GNU工具链必须重新建立一次。

PREFIX变量提供了指针,指向目标板工具程序将被安装的目录。

TARGET_PREFIX变量指向与目标板相关的头文件和链接库将被安装的目录。

PATH变量指向二进制文件(可执行文件)将被安装的目录。

如果不惯用环境变量的,可以直接用绝对或相对路径。如果不用环境变量,一般都用绝对路径,相对路径有时会失败。环境变量也可以定义在.bashrc文件中,这样就不用老是export这些变量了。

体系结构和TAEGET变量的对应如下表6-1所示:

表6-1体系结构和TAEGET变量的对应

体系结构

TARGET变量的值

PowerPC

Powerpc-linux

ARM

arm-linux

MIPS(big endian)

mips-linux

MIPS(little endian)

mipsel-linux

MIPS64

mips64-linux

SuperH3

sh3-linux

SuperH4

sh4-linux

I386

i386-linux

Ia64

ia64-linux

M68k

m68k-linux

M88k

m88k-linux

Alpha

alpha-linux

Sparc

sparc-linux

Sparc64

sparc64-linux

1.1.3. 建立二进制工具(binutils)

Binutils是GNU工具之一,它包括连接器、汇编器和其他用于目标文件和档案的工具,它是二进制代码的处理维护工具。安装Binutils工具包含的程序有addr2line、ar、as、c++filt、gprof、ld、nm、objcopy、objdump、ranlib、readelf、size、strings、strip、libiberty、libbfd和libopcodes。对这些程序的简单解释如下。

Øaddr2line把程序地址转换为文件名和行号。在命令行中给它一个地址和一个可执行文件名,它就会使用这个可执行文件的调试信息指出在给出的地址上是哪个文件以及行号。

Øar建立、修改、提取归档文件。归档文件是包含多个文件内容的一个大文件,其结构保证了可以恢复原始文件内容。

Øas主要用来编译GNU C编译器gcc输出的汇编文件,产生的目标文件由连接器ld连接。

Øc++filt连接器使用它来过滤C++和Java符号,防止重载函数冲突。

&Osla

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top