首页 > 范文大全 > 正文

交叉编译环境的配置与使用

开篇:润墨网以专业的文秘视角,为您筛选了一篇交叉编译环境的配置与使用范文,如需获取更多写作素材,在线客服老师一对一协助。欢迎您的阅读与分享!

[摘 要]随着嵌入式系统的不断发展,对交叉编译环境配置使用越来越广泛,但因为各个厂家的产品不同,所需要的环境也不同,给环境的配置造成了难度,还有就是尽管环境配置好了,但不知道如何使用。本文给出一个统一通用的环境配置方案,并给出其使用方法。

[关键词]交叉编译 环境配置 使用方法

一、引言

本文分为三个部分:第一个部分,详细地介绍环境配置前应该知道的信息,使以后的配置工作能顺利进行,避免在这个方面浪费时间和精力;第二个部分,给出了一个详细的统一通用的环境配置方案,所需的软件包及出处,以及配置时应该注意的地方,这些注意事项是正确配置环境的保障,能节约大量的时间;第三个部分,环境配置好后,如何正确地使用它就变得非常重要,本文给出了所配环境的使用方法。

二、环境配置的准备工作

1.何谓交叉编译

程序是在一台计算机上编译,然后再分布到将要使用的其他计算机上。当主机系统(运行编译器的系统)和目标系统(产生的程序将在其上运行的系统)不兼容时,该过程就叫做交叉编译。

2.配置环境前应该知道的条件

(1)当前系统信息:包括开发平台的内核版本,可执行工具的版本比如gcc,ld,as等,还有系统所使用的函数库等等。

(2)build/host/target的含义和关系

当交叉编译时,至少要处理两个系统,一个是build系统,用它来生成交叉工具;另一个是target系统,交叉工具为这个系统产生代码;host系统,交叉工具在这个系统上运行。通常build系统和host系统是相同的。

当host和target相同时为本地编译而不是交叉编译,如果想生成交叉编译工具,必须通过―target参数来指定目标,如―target=*-*-*,第一个*表示 `target_cpu',第二个*表示`target_vendor',第三个*表示`target_os'。

(3)字节序: 字节序分为低地址高字节序(big endian)和低地址低字节序(little endian), 不同的CPU上运行不同的操作系统,字节序也是不同的。

(4)指令集:每一个cpu都有自己的指令集,在环境配置前最好知道所配系统的指令集,这样才能正确使用系统的指令。

(5)所选软件包的版本限制:根据所配环境的要求决定是否有版本限制,比如gcc是否必须3.2版本以上等等。

三、环境的配置

1.系统配置程序configure

(1)系统配置程序configure的作用

①接受用户的安装参数和选项;②设置系统缺省配置;③处理配置参数;④建立目标系统后端文件与逻辑文件名之间的链接,使编译系统能正确地在目标平台上生成;⑤在模板文件Makefile.in中插入和修改与配置参数有关的信息,生成目标平台上的Makefile文件;⑥生成config.status文件,记录本次安装的配置信息。

(2)在configure中几项重要的配置参数的含义

2.系统生成程序Makefile

系统提供的外部目标名以及其作用说明(见表2):

3.环境的配置过程

(1)准备环境

目标平台: TARGET

安装目录: /usr/local/my_crosscompiler

源代码安装目录: /usr/local/src

(2)准备目标环境的头文件

要使用目标的头文件定义才能正确编译目标的交叉编译工具,这些头文件都在kernel源程序中,下面就是生成目标环境的头文件的操作。

cd /usr/local/src/

tar xzvf linux-*.tar.gz

cd linux/

make ARCH=目标menuconfig

注:在menuconfig的“CPU selection”中,选你实际的目标平台的CPU类型;在menuconfig的“General setup”中, 根据你的环境需要选择低序还是高序,“Generate big endian code”选中是高序,不选是低序。

make dep

mkdir -p /usr/local/my_crosscompiler/*-linux/include

在安装目录中新建一个目录

cp -r /usr/local/src/linux/include/asm-目标/*

/usr/local/my_crosscompiler/TARGET/include/asm

cp -r /usr/local/src/linux/include/linux /usr/local/my_crosscompiler/TARGET/include/

将生成的头文件拷贝到安装目录中.

(3)编译binutils,生成一组建立可执行程序的工具,主要包括ld和as等程序。

export PATH=/usr/local/my_crosscompiler/bin:$PATH

cd /usr/local/src/

tar xzvf binutils-*.tar.gz

cd binutils-*/

./configure ――target=TARGET ――prefix=/usr/local/my_crosscompiler

make

make install

(4)编译自举的(bootstrap)gcc

因为这时还没有目标库可以使用,只能编译一个最简单的gcc,用该gcc编译出库后就可以再编译一个完整的gcc了。

cd /usr/local/src/

tar xzvf gcc-core-*.tar.gz

cd gcc-core-*/

../configure ――target=TARGET ――prefix=/usr/local/my_crosscompiler

这是两个基本的参数,针对不同的环境还有其它的参数可以使用,参考各项配置参数的含义以决定使用哪些参数

make

make install

(5)编译newlib或glibc

提供系统调用和基本工具函数库。现在可以使用刚才建立的binutils和gcc来编译目标的库了。

①对TARGET是*-linux

cd /usr/local/src/

tar xzvf glibc-*.tar.gz

cd glibc-*/

注:一定要先进入glibc-*目录再执行下一个步骤,否则不能得到正确的结果

tar xzvf ../glibc-linuxthreads-*.tar.gz

./configure ――host=TARGET ――prefix=/usr/local/ my_crosscompiler ――enable-add-ons=linuxthreads

这是几个基本的参数,针对不同的环境还有其它的参数可以使用,参考各项配置参数的含义以决定使用哪些参数

make

make install

②对TARGET是除*-linux以外的

cd /usr/local/src/

tar xzvf newlib-*.tar.gz

cd newlib-*/

mkdir mynewlib

注:对于高版本的newlib,必须建立一个新的目录,否则不能执行后面的操作,这样有利于保护源代码

../configure ――target=TARGET ――prefix=/usr/local/my_crosscompiler

make

make install

(6)重新编译完整的gcc

cd /usr/local/src/

tar xzvf gcc-*.tar.gz

cd gcc-*/

./configure ――target=TARGET ――prefix=/usr/local/my_crosscompiler

这是几个基本的参数,针对不同的环境还有其它的参数可以使用,参考各项配置参数的含义以决定使用哪些参数

make

make install

以上就构建好了一套自己的交叉编译环境,目录在/usr/local/my_crosscompiler下,你可以把它打包拷贝到其它的Linux系统下也能使用。

四、 环境的使用

1.要使用此交叉编译环境请先加上PATH环境变量:

export PATH=/usr/local/my_crosscompiler/bin:$PATH

2.使用配置好的gcc工具时要加参数-nostartfiles,这样就不会使用本地机器的启动文件,如果不加那编译生成的文件不能在目标机器上运行;可以自己写目标机器的启动文件。Gcc的使用方式例如:

mips-elf-gcc -c filename.c -g -nostartfiles 。

3. 接时需要指定入口,此参数跟目标系统有关,使用方式如:

mips-elf-ld -o filename filename.o ――entry=my_main -Ttext 0x80000000.

其中的filename是生成的可执行文件名,参数――entry=my_main -Ttext 0x80000000就是程序的入口,地址是0x80000000。

参考文献:

[1]http://www.省略/CrossGCC/ CrossGCC Frequently Asked Questions

[2]http://www.省略/ports/mips/ debian-mips and debian-mipsel

(作者单位:江苏南京市幼儿高等师范学校)