基于ARM的嵌入式Linux交叉编译环境的研究与实现

基于ARM的嵌入式Linux交叉编译环境的研究与实现


2024年4月16日发(作者:)

总第268期 

2012年第2期 

计算机与数字工程 

Computer&Digital Engineering 

Vo1.40 No.2 

l51 

基于ARM的嵌入式Linux交叉编译环境的研究与实现 

张欢庆 

(1.山东师范大学信息科学与工程学院

摘要

济南

高丽。宋承祥。 

商丘476000)(3.山东省教育厅济南250011) 250014)(2.商丘职业技术学院

构建交叉编译环境是嵌入式系统开发的基础,嵌入式开发的任何可执行程序都要使用交叉编译生成。文章详细介绍了如何构 

建一套基于arm的嵌入式Linux交叉编译环境,通过仿真实验测试表明,能够使用x86平台的交叉编译工具开发ARM平台上运行的程序, 

具有可靠的稳定性。 

关键词嵌入式系统;交叉编译;linux;ARM;crosstool 

TP311.1 中图分类号

Research and Implementation of Embedded Linux 

Cross・compiling Environment Based on ARM 

ZHANG Huanqing ’ GAO Li SONG Chengxiang。 

(1.School of Information Science and Engineering,Shandong Normal University,Jinan 250014) 

(2.Shangqiu Vocational and Technical College,Shangqiu 476000)(3.Education Department of Shandong Province,Jinan 250011) 

Abstract Building cross—compiling environment is grounded in embedded system development,each of the executable program of em— 

bedded development are generated by cross-compiling.This paper is focus on how to build a embedded Linux cross-compiling environment 

based on arrlf,The artificial experiment result proves that using the cross-compiling tool of x86 platform can develop program which runs on 

ARM platform.It also illustrated that the cross compiling environment had authentic stability. 

Key Words embedded system,cross-compiling,AR

Class Number TP311.1 

M,Linux,crosstool 

1 引言 

嵌入式系统是以应用为中心,以计算机技术为基础,软 

件硬件可裁剪,适应应用系统对功能、可靠性、成本、体积、 

功耗严格要求的专用计算机系统l】 ]。嵌入式系统开发的 

第一步是搭建开发环境,可以直接在Linux上搭建,也可以 

在Windows上通过cygwin来搭建,还可以利用VMware 

本文采用Crosstool脚本工具来实现一次编译生成交 

叉编译工具,该方法不仅比分步构建法简单很多,并且出错 

的机会也非常少;而且比厂商提供的工具,容易修改,当系 

统内核升级后,可以通过改变相关的配置文件的参数项,快 

速实现新的交叉编译环境。对于嵌入式系统的开发来说非 

常有用。 

虚拟机进行构建。交叉编译环境是构建嵌入式Linux系统 

开发环境过程中最为重要的一步l3]。在嵌入式系统开发 

中,由于嵌入式开发板的存储空间和运算能力往往比较有 

限,没有足够的硬件资源来运行编译和调试工具,所以,通 

常嵌入式系统的软件开发需要采用交叉编译的方式,有效 

地解决了这一问题。 

2交叉编译原理 

交叉编译简单地说,就是在一个平台上通过编译器编 

译某个源程序,生成另一个平台上的可执行代码[5]。典型 

的交叉编译指的是在PC机上编译出能在嵌入式目标机上 

运行的可执行代码。因为嵌入式目标主机资源有限,不能 

完成自身程序的编译工作,从另外一个角度,嵌入式主机上 

运行的程序调试稳定后,很少需要修改,也没有必要具备完 

目前,一般采用分步构建交叉编译环境或者使用由提 

供开发板的公司制作的交叉编译工具_4]。分步构建交叉编 

译环境的方法相对来说难度较大,通常情况下困难重重,制 

成自身程序的编译工作。因此,在嵌入式系统开发时,往往 

由宿主机开发程序,而目标机作为最后的执行机。两者在 

开发时需要交替结合进行,如图1所示l_6]。 

作过程中很容易出错或者编译不通过,并且编译过程需要 

几个小时的时间,一般不容易成功。厂商提供的工具,都是 

厂商测试通过的,可靠性很高,而且与开发板能够很好的吻 

合,但是由于时间滞后的原因,往往都不是最新版本的,当 

系统内核升级后,会出现兼容性问题。 

般把编译程序的主机称为宿主机(Host),把运行程 

序的嵌入式主机称为目标机(Target)。为了使宿主机上开 

发的程序(应用程序和驱动程序)能够方便地下载到目标机 

上运行,一般还要在宿主机上配置好网络,使其支持NFS 

*收稿日期:2011年8月7日,修回日期:2011年9月13日 

作者简介:张欢庆,男,硕士研究生,助教,研究方向:嵌入式系统、人工智能。高丽,女,硕士,助教,研究方向:智能计算。宋承祥,男, 

博士,研究员,硕士生导师,研究方向:软件开发环境、电子政务。 

152 张欢庆等:基于ARM的嵌人式Linux交叉编译环境的研究与实现 第4O卷 

进行相应的修改。这两个文件是crosstool的编译的配置 

/程序载入:宿主机到目、 

RS232 

文件。arm.dat主要用于配置文件、定义生成编译工具链的 

名称以及定义编译选项。在ariD.,dat只需把编译生成的工 

具链名称修改为:“TARGET—arm-linux”。gcc一3.3.6一 

gblic 2.3.6.dat文件主要定义编译过程中所需要的库文件 

以及它所定义的版本,如果在编译的过程中有些库文件不 

存在时,crosstool会自动从相关网站上下载,相对比较智 

!竺!:!竺 

rj45 

宿主机(x86) 目标机(tR入式设备) 

图1嵌入式开发的交叉编译环境 

或tftp等网络服务,从而实现两台机器之间的文件共享。 

交叉编译环境一般由交叉编译器、交叉连接器和C程 

能,也非常有用。在此只需要修改其中的LINUX—DIR,其 

值为:linux 2.6.20。 

序库glibc等一系列的交叉工具集组成l_7]。这些交叉工具 

通过配置二进制工具Binutils包来产生。通常基于ARM 

3.4执行ariD_,sh编译脚本 

把arm.sh编译脚本文件和arm,dat与gcc-3.3.6一 

的Linux交叉编译器为arm-linux gcc、交叉连接器arnl- 

linux-ld。交叉编译过程如图2所示。 

图2嵌入式开发的交叉编译过程 

3构建交叉编译环境 

3.1准备资源文件 

从http://ftp:gnu.org上下载构建交叉编译工具链所 

需的源文件[8 gcc-3.3.6.tar.gz、binutils-2.15.tar.bz2、 

glibc-linuxthreads一2.3.2.tar.gz、linux-libc-headers一2.6.12. 

0.tar.bz2和glibe一2.3.6.tar.gz;然后在http://ftp.kerne1. 

org上下载linux内核源文件linux 2.6.2O.tar.gz;最后从 

http://kege1.com/crosstool站点下载构建工具crosstool一 

0.42.tar.gz。 

为了便于管理和使用,在/home/rainfall/下新建一个目 

录soure_file存放这些资源文件。然后在/home/rainfall下 

使用tar命令解压crosstool-0.42.tar.gz。 

3.2创建编译脚本文件 

在/home/rainfall/crosstool-0.42目录下,创建一个 

arlTl,sh的编译脚本,然后使用vi命令编辑其中的内容,如 

下: 

#!/bin/sh 

set—ex 

TARBALLS

DIR=/home/rainfall/source_file 

RESULT

TOP=/opt/crosstool 

export TARBALLSDIR RESULT-TOP 

GOZ

LANGUAGES=”C,c+十” 

export GCC

_

LANGUAGES 

#really,you should do the mkdir before running this, 

#and chown/opt/crosstool to yourself SO you don’t need tO run 

as root. 

mkdir P¥RESUL『_TOP 

#build the toolchain.Takes a couple hours and a couple giga— 

bytes. 

eval cat arlT1.dat gcc-3.3.6一glibc-2.3.6.dat’sh al1.sh notest 

echo Done. 

3.3建立crosstool的配置文件 

arrfu sh脚本文件中evaI命令需要使用的alTfl,dat和 

gec-3.3.6 gblic 2.3.6.dat两个文件,需要根据系统的配置 

gblic一2.3.6.dat配置文件准备好后,通过执行arm,sh脚本 

来编译交叉编译工具,在crosstool一0.42目录下执行命令: 

/ar.msh”。一般需要经过一个小时的漫长编译之后,在 

opt/crosstool目录下生成新的交叉编译工具,内容如下 

arm linux addr21ine arm-linux-ar arm linux as arm-linux-c++ 

arm linux c++filt arm-linux-cpp arm linux g++arm-linux-gcc 

arm-linux-gcc-3.3.6 arm linux gccbug arm linux gcov arm-linux- 

gprof 

arm linux ld arm-linux-nm arm-linux objcopy armqinux-objdump 

arm linux ranlib arm linux readelf arm-linux-size arm-linux-strings 

arm-linux-strip fix-embedded-paths 

其中,bin目录下是交叉编译器和一些工具,如编译器 

arm linux gec是C交叉编译器,arm linux g+十是c++编 

译器,arm-linux-as是汇编器,arm linux ld是链接器。还有 

些常用的工具,如arm linux-ohjeopy是二进制转换工具, 

arm linux strip用来去掉影像文件的调试信息,使得文件变 

小等。对于一般的应用这几个工具已经足够了。 

3.5添加环境变量 

生成交叉编译工具链之后,并不表示交叉编译工具链 

已经可以使用,还需要修改linux的环境变量PATH,否则 

是不能使用刚才的交叉编译工具链进行嵌入式开发的。在 

linux系统“/etc/bash.bashrc”文件的最后一行,将生成的编 

译工具链路径添加上即可,其代码为“export PATH一/ 

opt/erosstool/gcc-3.3.6 glibc一2.3.6/arm-tinux/bin: 

¥PATH”。设置完环境变量,交叉编译工具链也就全部构 

建完成。 

3.6仿真验证测试 

我们使用Windows操作系统+VMware工具+Linux 

操作系统的仿真环境进行测试[9],采用开源项目SkyEye模 

拟ARM硬件环境[1 。从官方网站上下载skyeye 1.3.2

一 

rc1.tar.gz,然后将其安装到Linux操作系统中。使用sky— 

eye前,必须要对它进行配置。skyeye.conf文件是skyeye 

的默认配置文件。通过编写合适的skyeye.conf文件,可以 

配置出任何skyeye支持的硬件环境。 

由于s3e2410在国内比较流行,了解的人比较多。同 

时,skyeye对这一平台的支持也是非常成熟且资源丰 

富L1 。我们采用在由skyeye模拟的s3c2410x这一硬件平 

台,进行硬件的仿真测试。下面是进行仿真验证测试用的 

基于s3c2410x芯片skyeye.conf配置文件。 

cpu:arm920t 

math:s3c2410x 

#physical memory 

mem

_

bank:map:M,type—RW,addr一0x00000000,size一 

0x00800000.file=./xxx.bin 

2012年第2期 计算机与数字工程 153 

memS1Ze 

bank:map—M,type—RW,addr一0xc0800000, 

0x00800000 

#all peripherals I/O mapping area 

mem

bank:map—I,type—RW,addr一0x48000000, 

S1Ze : 

0x20000000 

mem

_

bank:map—I,type—RW,addr一0x19000300,size一 

0x00800020 

在linux系统中利用vi编辑器编写一个example.c,其内容如下: 

#define UFCON0((volatine unsigned int*)(0x50000020)) 

void example() 

、 

char*t一”this is an artificial experiment based on sky— 

eye!n”; 

for(;*t;t++) 

*UFCON0=*t: 

while(1); 

) 

在Linux系统的终端命令里分别依次运行arm-linux- 

gcc、arm-linux-ld、arm-linux-objcopy命令,经过一系列的处 

理后,最终生成一个只包含程序机器码的二进制文件ex— 

ample.bin。 

将配置文件skyeye.conf中“file一./xxx.bin”的xxx. 

bin改为example.bin,并且把skyeye.conf与example.bin 

放置在同一个文件夹下。在终端中运行skyeye命令,就会 

看到如下结果,如图3所示。 

图3仿真实验生成结果 

4结语 

本文介绍了一种利用crosstool构建基于ARM的嵌入 

式Linux的交叉编译环境的方法,通过使用开源项目Sky— 

Eye模拟ARM硬件环境进行仿真验证测试,实验结果表明 

能够使用x86一ARM的交叉编译工具进行ARM平台上的 

嵌入式系统开发,具有可靠的稳定性。 

参考文献 

[1]吕京建,肖海桥.面向二十一世纪的嵌入式系统综述[J].电子 

质量,2001(8):10—13. 

LV Jingjian,XIAO Haiqiao.Embedded System for 21st Cen— 

tury[J].Electronics Quality,2001(8):10—13. 

[2]张玢,孟开元,田泽.嵌入式系统定义探讨[J].单片机与嵌入式 

系统应用,2011,11(121):6-8. 

ZHANG Bin,MENG Kaiyuan,TIAN Ze.Discussion on the 

Definition of Embedded System[J].Microcontrollers 8L Em— 

bedded Systems,201I,I1(121):6-8. 

[3]康涌泉,桑楠,邹楚雄,等.嵌人式Linux交叉开发环境[J].计 

算机应用,2006,26(s1):261-263. 

KANG Yongquan,SANG Nan,ZOU Chuxiong,et a1.Em— 

bedded Linux Cross-development Environment[J].Computer 

Applications,2006,26(S1):261—263. 

[41贺丹丹,张帆,刘峰.嵌入式Linux系统开发教程[M].北京:清 

华大学出版社,2010:149—151. 

HE Dandan,ZHANG Fan,LIU Feng.Embedded Linux Sys— 

tenr Development Course[M].BeiJing:Tsinghua University 

Press,2010:149—151. ’ 

[5]尤盈盈,孟利民.构建嵌入式linux交叉编译环境[J].计算机与 

数字工程,2006,34(6):31—32,78. 

Y0U Yingying,MENG Limin.Building Embedded Linux 

Cross—compling Environment[J].Computer&Digital Engi— 

neering,2006,34(6):31-32,78. 

[6]俞辉,李永,何旭莉,等.嵌入式Linux程序设计案例与实验教 

程[M].北京:机械工业出版社,2009:12—13. 

YU Hui,I I Yong,HE Xuli,et a1.Embedded Linux Program 

Design Case and Practice Course[M].BeiJing:China Machine 

Press,2009:12-13. 

[71李宇丽.基于ARM的嵌入式Linux系统的研究及应用[D].西 

安:西安电子科技大学计算机学院,2007:18—20. 

LI Yuli.The Research and Application of Embedded Linux 

System Based on ARM[D].Xi’an:School of Computer Science 

&Technology,Xidian University,2007:18—20. 

[8]李亚锋,欧文盛.ARM嵌入式Linux系统开发从入门到精通 

[M].北京:清华大学出版社,2007:37—47. 

LI Yafeng,OU Wensheng.ARM Embedded Linux System 

eDvelopment from guide to master[M].BeiJing:Tsinghua U— 

niversity Press,2007:37—47. 

[9]刘永林,梁莹,王诗琴,等.基于Linux的嵌入式交叉编译环境 

的建立及实现[J].电脑开发与应用,2011,24(7):68—70. 

UU Yonglin,LIANG Ying,WANG Shiqin。et a1.Building-up 

and Realization of Embedded Cross—compiler Environment 

aBsed on Linux[J].Computer Development 8L Applications, 

2011,24(7):68—70. 

[101陈渝,杨晔,李明,等.嵌入式系统仿真环境--SkyEye[J].电子 

设计应用,2004(2):69—71. 

CHEN Yu,YANG Ye,LI Ming,et a1.Embedded System 

Simulation Environment-SkyEye[J].Electronic Design& 

Application,2004(2):69—71. 

[11]龙新辉,陈俊杰.基于嵌入式Linux的以太网卡驱动设计与实 

现口].舰船电子工程,2011,31(3). 

LONG Xinhui,CHEN Junjie.Design and Implementation of 

Ethernet Driver Based on Embedded Linux[J].Ship Electron— 

ic Engineering,201i,31(3). 

[121李无言.一步步写嵌入式操作系统一ARM编程的方法与实践 

[M].北京:电子工业出版社,2011:15—17. 

LI Wuyan.Writing Embedded Operating System step by step- 

technique and practice of ARM program[M].BaiJing:Pub— 

lishing House of Electronics Industry,2011:15—17. 


发布者:admin,转转请注明出处:http://www.yc00.com/web/1713278904a2217607.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信