制作交叉编译工具链

制作交叉编译工具链

编写可以在ARM上运行的程序需要使用arm-linux-gcc交叉编译工具。因此,需要制作一套交叉编译器工具链,使用它,可以让代码运行在ARM平台上。

制作arm-linux交叉编译工具链一般通过crosstool工具或者crosstool-NG,前者使用方便,但是制作会受到一些限制,使用crosstool最多只能编译gcc4.1.1、glibc2.x的版本,无法编译版本高于2.6.29的linux内核。crosstool-NG有更好的定制性,并且一直保持着更新,对新版本的编译工具链的支持比较好,当然也带来了一些麻烦,它并不是下载下来就可以使用的,必须先配置安装。

 

主要介绍gcc-3.4.5、glibc-2.3.6版本的交叉编译工具链的制作,即制作gcc-3.4.5-glibc-2.3.6交叉编译工具

 

 

 

 

 

基于crosstool-ng制作交叉编译工具链

创建交叉编译工具链所在的目录:mkdir /home/zxc/ARM9_S3C2440

cd RM9_S3C2440

mkdir crosstool_ng#建立crosstool-ng软件的安装目录

 

下载crosstool-ng-1.12.4.tar,并将该压缩文件复制到samba服务器中去!

准备crosstool-ng的安装环境:在编译前需要检查编译环境,必备工具包:bison、flex、texinfo、automake、libtool、cvs、patch、ncurses、curl、gcj、g++、svn、gawk、cvsd。

将Ubuntu系统联网,输入命令:

Sudo apt-get install bison flex texinfo automake libtool cvs patch curl gcj subversion gawk cvsd gperf

其中:

bison和flex是用来生成语法和词法分析器;

texinfo和man类似,用来读取帮助文档;

automake是帮助生成Makefile的工具;

libtool帮助在编译过程中处理库的依赖关系,自动搜索路径;

cvs、cvsd和subversion是版本控制软件,用于编译过程中的源码下载;

curl通过给定的网络地址下载源码的工具;

gcj用于编译java源代码的工具;

patch是用于给源码打补丁的工具;

gawk是linux下用于文本处理和模式匹配的工具。

 

安装crosstool-ng

解压samba_share文件夹中的crosstool-ng-1.12.4.tar.bz2

cd samba_share

tar –xjvf crosstool-ng-1.12.4.tar.bz2

cd crosstool-ng-1.12.4

sudo ./configure --prefix=/home/zxc/ARM9_S3C2440/crosstool_ng,显示

制作交叉编译工具链_第1张图片

执行sudo apt-get install awk

继续执行config命令:sudo ./configure --prefix=/home/zxc/ARM9_S3C2440/crosstool_ng

出现类似问题,解决方式类似!

注意:

 

制作交叉编译工具链_第2张图片

 

制作交叉编译工具链_第3张图片

 

制作交叉编译工具链_第4张图片

 

 

制作交叉编译工具链_第5张图片

 

 

进入安装目录/home/zxc/ARM9_S3C2440/crosstool_ng的lib/samples下,

制作交叉编译工具链_第6张图片

选用arm-unknown-linux-gnueabi

 

 

 

 

配置编译的交叉编译工具链参数

(1)先建立一个编译目录

#mkdir /home/zxc/ARM9_S3C2440/crosstool_ng/ crosstool_ng_built

进入该目录,cd /home/zxc/ARM9_S3C2440/crosstool_ng/ crosstool_ng_built

 

然后执行命令:cp /home/zxc/ARM9_S3C2440/crosstool_ng/lib/ct-ng-1.12.4/samples/arm-unknown-linux-gnueabi/* .(注意最后一个“.”表示复制到当前目录)将arm-unknown-linux-gnueabi拷贝到/home/zxc/ARM9_S3C2440/crosstool_ng/ crosstool_ng_built目录下。然后会在crosstool_ng_built目录下出现crosstool.config和reported.by两个文件。

现在将文件crosstool.config的名字改为.config,命令如下:

cp crosstool.config .config(注意.config是隐藏文件,需要用ls –a命令才能查看。

然后在目录/home/zxc/ARM9_S3C2440/crosstool_ng/ crosstool_ng_built下执行ct-ng menuconfig

制作交叉编译工具链_第7张图片

要设置环境变量或者软连接,命令如下:

sudo ln -s /home/zxc/ARM9_S3C2440/crosstool_ng/bin/ct-ng /usr/local/bin/ct-ng

然后执行ct-ng menuconfig

此时会弹出主菜单,如下图,此菜单主要用于交叉编译工具链的环境配置

制作交叉编译工具链_第8张图片

进入“Paths and misc options”菜单,修改选项“Local tarballs directory”目录。

制作交叉编译工具链_第9张图片

建立/home/zxc/ARM9_S3C2440/crosstool_ng_tarballs目录,将“Local tarballs directory”的目录改为/home/zxc/ARM9_S3C2440/crosstool_ng_tarballs

制作交叉编译工具链_第10张图片

 

新建目录/home/zxc/ARM9_S3C2440/ct_ng_2440这就是生成的交叉编译工具链存放的位置。

修改选项“Prefix directory”,

制作交叉编译工具链_第11张图片

返回主菜单,修改“Target options”,这是重点要修改的地方。

制作交叉编译工具链_第12张图片

进入“Target options”选项

制作交叉编译工具链_第13张图片

修改:

(armv4t)Architecture level

(arm920t)Emit assembly for CPU

(arm920t)tune for CPU

制作交叉编译工具链_第14张图片

Floating point()设置为软浮点,因为s3c2440没有硬件浮点。

制作交叉编译工具链_第15张图片

 

返回主菜单,修改Toolchain options配置选项

制作交叉编译工具链_第16张图片

修改(zxc)Tuple’s vendor string,这样产生的编译器前缀就是arm-zxc-linux-gnueabi-

制作交叉编译工具链_第17张图片

 

修改(arm-linux)Tuple’s alias,给产生的交叉编译工具起个别名,设置别名,这样会给每个工具创建一个软连接

制作交叉编译工具链_第18张图片

 

返回主菜单,修改“Operating System”配置选项,

制作交叉编译工具链_第19张图片

指定编译器的目标系统是linux,版本为2.6.39.2

制作交叉编译工具链_第20张图片

 

返回主菜单,修改“Binary utilities”配置选项

制作交叉编译工具链_第21张图片

 

制作交叉编译工具链_第22张图片

返回主菜单,修改C compiler配置选项,

制作交叉编译工具链_第23张图片

制作交叉编译工具链_第24张图片

返回主菜单,修改C-library配置选项,

制作交叉编译工具链_第25张图片

 

制作交叉编译工具链_第26张图片

返回主菜单,修改Debug facilities配置选项

制作交叉编译工具链_第27张图片

保持默认值(这里全部都没选!

制作交叉编译工具链_第28张图片

返回主菜单,修改Companion library配置选项

制作交叉编译工具链_第29张图片

 

这里,修改MPFR version(3.0.0)

制作交叉编译工具链_第30张图片

 

做完上述配置工作后,选择退出,并选择yes保存。

编译交叉工具链

制作交叉编译工具链_第31张图片

制作交叉编译工具链_第32张图片

解决办法是:sudo apt-get install gcj-jdk

 

 

 

 

 

 

 

 

 

 

 

最终,排除万难,终于成功!

制作交叉编译工具链_第33张图片

 

测试编译成功的交叉编译工具链

进入交叉编译工具链的安装目录/home/zxc/ARM9_S3C2440/ct_ng_2440,即之前配置的Prefix directory的目录

制作交叉编译工具链_第34张图片

 

设置环境变量

制作交叉编译工具链_第35张图片

 

验证交叉编译工具链是否可以使用,随便找个目录编辑一个C\C++代码,保存退出后,使用交叉编译工具链对该源文件进行编译,并生成可执行文件,这里生成的可执行文件是一种二进制文件,只能下载到开发板中去执行,并不能在Ubuntu系统中执行。

制作交叉编译工具链_第36张图片

制作交叉编译工具链_第37张图片

制作交叉编译工具链_第38张图片

制作交叉编译工具链_第39张图片

制作交叉编译工具链_第40张图片

 

下面是编译主机上运行的gdb

手动下载源文件gdb-6.8a.tar.bz2,并通过samba服务器放入Ubuntu系统的/home/zxc/ARM9_S3C2440/ARM_gdb目录中。

新建gdb的安装目录:

root@zxcUbuntu:/home/zxc/ARM9_S3C2440# mkdir ARM_gdb

将载源文件gdb-6.8a.tar.bz2复制到/home/zxc/ARM9_S3C2440/ARM_gdb目录下。

root@zxcUbuntu:/home/zxc# cp /home/zxc/samba_share/gdb-6.8a.tar.bz2 /home/zxc/ARM9_S3C2440/ARM_gdb

解压文件:

root@zxcUbuntu:/home/zxc/ARM9_S3C2440/ARM_gdb#tar -xjvf gdb-6.8a.tar.bz2

root@zxcUbuntu:/home/zxc/ARM9_S3C2440/ARM_gdb#cd gdb-6.8

root@zxcUbuntu:/home/zxc/ARM9_S3C2440/ARM_gdb/gdb-6.8#./configure --target=arm-linux --enable-werror --prefix=/home/zxc/ARM9_S3C2440/ARM_gdb

root@zxcUbuntu:/home/zxc/ARM9_S3C2440/ARM_gdb/gdb-6.8#make make

root@zxcUbuntu:/home/zxc/ARM9_S3C2440/ARM_gdb/gdb-6.8#make install

 

 

 

你可能感兴趣的:(Linux操作系统笔记)