binutils
+
gcc
+
glibc
+
kernel-header
组合的环境。
GCC
就是编译器,他的输出每次安装只能有针对一个架构的指令输出。如果要多个架构输出,那就要装多个
GCC
,所以编译工具链里面会有一个
GCC
。
交叉编译就是跨架构编译,编译出来的程序不能在本机执行(当然有例外情况)。所以这个时候就需要交叉编译工具链。
工具链光有
GCC
是不行的,还需要一个
binutils
的二进制连接器,以及一个最基本的目标架构的
C
库,C
库还需要一个目标架构的内核源代码才能完全工作(当然不是必须的,但编译有的时候需要)
又因为
GCC
、binutils
不能实现单软件同时多架构输出,所以需要单独另装,又加上
C
库和内核头文件需要目标架构的东西而不能用本机本地架构的数据。
所以一个交叉编译工具链就是针对目标架构准备的单独安装单独使用的
binutils
+
gcc
+
glibc
+
kernel-header
的集合了。
PS:这个
kernel-header
并不一定就是
Linux
,他还可以是别的系统核心开发库,比如
FreeBSD
。
一、下载源文件源代码文件及其版本:
binutils-2.19.tar.bz2, gcc-core-4.4.4.tar.bz2gcc-g++-4.4.4.tar.bz2 Glibc-2.7.tar.bz2 Glibc-ports-2.7.tar.bz2 Gmp-4.2.tar.bz2 mpfr-2.4.0.tar.bz2mpc-1.0.1.tar.gz Linux-2.6.25.tar.bz2 (由于我在编译出错的过程中,根据出错的信息修改了相关的C代码,故而没有下载相应的补丁)
一般一个完整的交叉编译器涉及到多个软件,主要包括bilinguals、cc、glibc等。其中,binutils主要生成一些辅助工具;gcc是用来生成交叉编译器,主要生成arm-linux-gcc交叉编译工具,而glibc主要提供用户程序所需要的一些基本函数库。
二、建立工作目录
编译所用主机型号 fc14.i686,虚拟机选的是VM7.0,Linux发行版选的是Fedora9,
第一次编译时用的是root用户(第二次用一般用户yyz), 所有的工作目录都在/home/yyz/cross下面建立完成,首先在/home/yyz目录下建立cross目录,然后进入工作目录,查看当前目录。命令如下:
创建工具链文件夹:
[root@localhost cross]# mkdir embedded-toolchains
下面在此文件夹下建立如下几个目录:
setup-dir:存放下载的压缩包;
src-dir:存放binutils、gcc、glibc解压之后的源文件;
Kernel:存放内核文件,对内核的配置和编译工作也在此完成;
build-dir :编译src-dir下面的源文件,这是GNU推荐的源文件目录与编译目录分离的做法;
tool-chain:交叉编译工具链的安装位;
program:存放编写程序;
doc:说明文档和脚本文件;
下面建立目录,并拷贝源文件。
[root@localhost cross] #cd embedded- toolchains
[root@localhost embedded- toolchains] #mkdir setup-dir src-dir kernel build-dir tool-chain program doc
[root@localhost embedded- toolchains] #ls
build-dir doc kernel program setup-dir src-dir tool-chain
[root@localhost embedded- toolchains] #cd setup-dir
拷贝源文件:
这里我们采用直接拷贝源文件的方法,首先应该修改setup-dir的权限
[root@localhost embedded- toolchains] #chmod 777 setup-dir
然后直接拷贝/home/yyz目录下的源文件到setup-dir目录中,如下图:
建立编译目录:
[root@localhost setup-dir] #cd ../build-dir
[root@localhost build -dir] #mkdir build-binutils build-gcc build-glibc
三、输出环境变量
输出如下的环境变量方便我们编译。
为简化 *** 作过程。下面就建立shell命令脚本environment-variables:
[root@localhost build -dir] #cd ../doc
[root@localhost doc] #mkdir scripts
[root@localhost doc] #cd scripts
用编辑器vi编辑环境变量脚本envionment-variables:[root@localhost scripts]
#vi envionment-variables
export PRJROOT=/home/yyz/cross/embedded-toolchains
export TARGET=arm-linux
export PREFIX=$PRJROOT/tool-chain
export TARGET_PREFIX=$PREFIX/$TARGET
export PATH=$PREFIX/bin:$PATH
截图如下:
执行如下语句使环境变量生效:
[root@localhost scripts]# source ./environment-variables
四、建立二进制工具(binutils)
下面将分步介绍安装binutils-2.19.1的过程。
[root@localhost script] # cd $PRJROOT/src-dir
[root@localhost src-dir] # tar jxvf ../setup-dir/binutils-2.19.1.tar.bz2
[root@localhost src-dir] # cd $PRJROOT/build-dir/build-binutils
创建Makefile:
[root@localhost build-binutils] #../../src-dir/binutils-2.19.1/configure --target=$TARGET --prefix=$PREFIX
在build-binutils目录下面生成Makefile文件,然后执行make,make install,此过程比较缓慢,大约需要一个15分钟左右。完成后可以在$PREFIX/bin下面看到我们的新的binutil。
输入如下命令
[root@localhost build-binutils]#ls $PREFIX/bin
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)