开篇:润墨网以专业的文秘视角,为您筛选了一篇交叉编译环境的配置与使用范文,如需获取更多写作素材,在线客服老师一对一协助。欢迎您的阅读与分享!
[摘 要]随着嵌入式系统的不断发展,对交叉编译环境的配置和使用越来越广泛,但因为各个厂家的产品不同,所需要的环境也不同,给环境的配置造成了难度,还有就是尽管环境配置好了,但不知道如何使用。本文给出一个统一通用的环境配置方案,并给出其使用方法。
[关键词]交叉编译 环境配置 使用方法
一、引言
本文分为三个部分:第一个部分,详细地介绍环境配置前应该知道的信息,使以后的配置工作能顺利进行,避免在这个方面浪费时间和精力;第二个部分,给出了一个详细的统一通用的环境配置方案,所需的软件包及出处,以及配置时应该注意的地方,这些注意事项是正确配置环境的保障,能节约大量的时间;第三个部分,环境配置好后,如何正确地使用它就变得非常重要,本文给出了所配环境的使用方法。
二、环境配置的准备工作
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
(作者单位:江苏南京市幼儿高等师范学校)