您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 企业文化 > 嵌入式实验6交叉编译及Linux简单程序设计实验
实验六交叉编译及Linux简单程序设计实验的实验报告一实验目的1、了解和掌握交叉编译模式和方法;2、熟悉和掌握Linux简单程序设计。二实验环境预装Fedora10_A8_Linux的pc机一台,CVT-A8嵌入式实验箱一台(已构建嵌入式Linux系统),以太网线一根,交叉编译工具链。三实验步骤1、连接主机和目标板;(三根线,注意网线和串口线是否连接正常)2、安装交叉编译器arm-linux-gcc,并配置环境。a)在命令行中输入arm-linux-后按tab键,如果命令能够补齐,说明里面已经有交叉编译工具了,环境变量已经设置好,那接下来的步骤,可以作为参考。如果不能补齐,则把电脑“E:\cvtech\CVT-A8-IIILinux光盘\Linux系统及应用源码”目录下的“4.3.3.tar.gz”文件拷贝到Fedora10的/usr/local目录下b)转到文件夹/usr/localcd/usr/localc)解压交叉编译工具链tar-vzxf4.3.3.tar.gzcd4.4.3/bin执行pwd命令得到这个目录的绝对路径,用右键复制这个路径,这个路径一般为/usr/local/4.3.3/bin。d)打开环境变量设置脚本文件vi~/.bash_profilee)在文件中倒数第几行中,把“/usr/local/4.3.3/bin”添加到PATH环境变量路径的后面,类似于PATH=$PATH:/usr/local/4.3.3/bin$PATH表示原来的环境变量路径,添加的/usr/local/4.3.3/bin部分表示在原来的环境变量PATH中添加此交叉编译器的路径f)vi保存并退出g)输入命令source~/.bash_profile使环境变量路径生效h)在任意目录下输入arm-linux-gcc后回车,如果是arm-linux-gccnoinputfile表示配置成功,或者仅输入“arm-linu”之后按TAB键看是否能补齐arm-linux-gcc命令,如果能够补齐,说明交叉编译工具链的环境变量设置成功。3,Linux简单程序设计a)使用vi等编辑器编写一个简单程序,比如输出“helloworld”,实现a+b等C语言程序。b)在命令行中使用gcc编译器编译并运行程序;使用file命令查看编译后的可执行文件信息。c)使用交叉编译器arm-linux-gcc编译并运行程序,记录结果;使用file命令查看交叉编译后的可执行文件信息。d)将交叉编译得到的可执行文件通过tftp下载到目标机,在目标机上执行,记录结果Cd:Vi:gcc–o.c:四实验思考1、为什么要使用交叉编译模式?由于嵌入式系统资源匮乏,一般不能像PC一样安装本地编译器和调试器,不能在本地编写、编译和调试自身运行的程序,而需借助其它系统如PC来完成这些工作,这样的系统通常被称为宿主机。宿主机通常是Linux系统,并安装交叉编译器、调试器等工具;宿主机也可以是Windows系统,安装嵌入式Linux集成开发环境。在宿主机上编写和编译代码,通过串口、网口或者硬件调试器将程序下载到目标系统里面运行。所谓的交叉编译,就是在宿主机平台上使用某种特定的交叉编译器,为某种与宿主机不同平台的目标系统编译程序,得到的程序在目标系统上运行而非在宿主机本地运行。ARM上可以运行操作系统,所以用户完全可以将ARM当做计算机来使用,理论上也可以在ARM上使用本地的编译器来编译程序.但是,编译器在编译程序时,会产生大量的中间文件,这会占用很大的内存和磁盘空间,且对CPU处理速度要求较高,比如S3C2440A内存、磁盘空间只有几十到100多兆,CPU只有400-500MHz,完全达不到编译程序的要求.所以,在进行ARM-linux嵌入式开发时必须在PC机(x86结构)上编译出能够运行在ARM上的程序,然后再将程序下载到ARM中来运行.这就用到了交叉编译器.要进行交叉编译,用户需要在主机平台上安装对应的交叉编译工具链(crosscompilationtoolchain),然后用这个交叉编译工具链编译用户的源代码,最终生成可在目标平台上运行的代码.交叉编译工具链可以从网上下载,也可以自己制作.但编译器不是万能的,受版本限制,编译某些程序时会报错.常见的交叉编译工具链有:(1)Cross-2.95.3tar:该版本较早,除了编译vivi外一般不使用.(2)arm920t-eabi.tgz:4.1.2版本的编译器,支持eabi,可以编译TX2440A开发板上的所有程序.(3)arm-linux-gcc:4.3.2版本的编译器,支持eabi,是最常见的交叉工具链.2、gcc和交叉编译工具生成的可执行文件有什么不同?Gcc:GCC(GNUCompilerCollection,GNU编译器套件),是由GNU开发的编程语言编译器。它是以GPL许可证所发行的自由软件,也是GNU计划的关键部分。GCC原本作为GNU操作系统的官方编译器,现已被大多数类Unix操作系统(如Linux、BSD、MacOSX等)采纳为标准的编译器,GCC同样适用于微软的Windows。[2]GCC是自由软件过程发展中的著名例子,由自由软件基金会以GPL协议发布。GCC原名为GNUC语言编译器(GNUCCompiler),因为它原本只能处理C语言。GCC很快地扩展,变得可处理C++。后来又扩展能够支持更多编程语言,如Fortran、Pascal、Objective-C、Java、Ada、Go以及各类处理器架构上的汇编语言等,所以改名GNU编译器套件(GNUCompilerCollection)。交叉编译工具:在一种计算机环境中运行的编译程序,能编译出在另外一种环境下运行的代码。可执行文件(executablefile)指的是可以由操作系统进行加载执行的文件。在不同的操作系统环境下,可执行程序的呈现方式不一样。交叉编译工具可以简单地理解为在电脑上编译,生成的可执行文件在开发板上运行。交叉编译工具是根据开发板芯片的体系结构制作的,这与开发板上的芯片指令系统有关。arm-linux-gcc只是在编译时根据arm芯片的环境来生成可执行文件,生成的可执行文件必须移植到开发板上才能运行。3、比较可执行文件在主机和目标板上运行的不同,理解交叉编译的含义。执行文件在主机和目标板上运行的不同:宿主机和开发板可通过网络连接,宿主机将会包含开发板所需的编译环境,程序可在宿主机上编译完成后,传递到开发板上执行,而在开发板上不会包含编译环境,只会有执行环境,所以两者的运行不同。在windows操作系统下,可执行程序可以是.exe文件.sys文件.com等类型文件。Linux可执行文件格式为ELF即ExecutableandLinkableFormat。格式:ELFheaderprogramheadertable.txt.rodata.dataSectionheadertable交叉编译含义:交叉编译这个概念的出现和流行是和嵌入式系统的广泛发展同步的。我们常用的计算机软件,都需要通过编译的方式,把使用高级计算机语言编写的代码(比如C代码)编译(compile)成计算机可以识别和执行的二进制代码。比如,我们在Windows平台上,可使用VisualC++开发环境,编写程序并编译成可执行程序。这种方式下,我们使用PC平台上的Windows工具开发针对Windows本身的可执行程序,这种编译过程称为nativecompilation,中文可理解为本机编译。然而,在进行嵌入式系统的开发时,运行程序的目标平台通常具有有限的存储空间和运算能力,比如常见的ARM平台,其一般的静态存储空间大概是16到32MB,而CPU的主频大概在100MHz到500MHz之间。这种情况下,在ARM平台上进行本机编译就不太可能了,这是因为一般的编译工具链(compilationtoolchain)需要很大的存储空间,并需要很强的CPU运算能力。为了解决这个问题,交叉编译工具就应运而生了。通过交叉编译工具,我们就可以在CPU能力很强、存储空间足够的主机平台上(比如PC上)编译出针对其他平台的可执行程序。4.你认为做好本实验应该注意哪些方面?在做本实验时首先应该做好预习工作,在网上或者书本上查相关资料,了解交叉编译模式和方法,可以提前练习linux的程序设计流程,做一个小的练习,这样在试验中就会更加流畅。在做实验中,应该好好学习助教的讲解,并做好笔记,防止助教讲完就忘记,结果又会遇到一些本来可以自己解决的问题。听完助教讲解后,加上之前的预习,再按照操作一步步完成,一般都不会有问题了。五实验心得通过本次实验,了解和掌握了交叉编译模式和方法,熟悉和掌握了Linux简单程序设计。在实验开始时对实验的整体流程的了解还不是很清楚,但是在经过助教的讲解后,就有了比较清楚的逻辑。最后在操作中还是遇到了很多问题,因为对linux指令了解还不深入,所以在解决问题时会浪费很多时间。所以我体会到了这门课要学好还需要做好基础功,多了解和掌握linux相关的指令和知识,同时多加练习,才能为以后打好基础。
本文标题:嵌入式实验6交叉编译及Linux简单程序设计实验
链接地址:https://www.777doc.com/doc-4357838 .html