交叉编译及linux简单程序设计,嵌入式实验6交叉编译及Linux简单程序设计实验

嵌入式实验6交叉编译及Linux简单程序设计实验

实验六交叉编译及Linux简单程序设计实验的实验报告一 实验目的1、了解和掌握交叉编译模式和方法;2、熟悉和掌握Linux简单程序设计。二 实验环境预装Fedora10_A8_Linux的pc机一台,CVT-A8嵌入式实验箱一台(已构建嵌入式Linux系统),以太网线一根,交叉编译工具链。三 实验步骤1、连接主机和目标板;(三根线,注意网线和串口线是否连接正常)2、安装交叉编译器arm-linux-gcc,并配置环境。a) 在命令行中输入arm-linux-后按tab键,如果命令能够补齐,说明里面已经有交叉编译工具了,环境变量已经设置好,那接下来的步骤,可以作为参考。如果不能补齐,则把电脑“E:cvtechCVT-A8-III Linux光盘Linux系统及应用源码”目录下的“4.3.3.tar.gz”文件拷贝到Fedora10的/usr/local目录下b) 转到文件夹/usr/local cd /usr/local c) 解压交叉编译工具链tar -vzxf 4.3.3.tar.gz cd 4.4.3/bin执行pwd命令得到这个目录的绝对路径,用右键复制这个路径,这个路径一般为/usr/local/4.3.3/bin。d) 打开环境变量设置脚本文件vi /.bash_profile e) 在文件中倒数第几行中,把“/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-gcc no input file表示配置成功,或者仅输入“arm-linu”之后按TAB键看是否能补齐arm-linux-gcc命令,如果能够补齐,说明交叉编译工具链的环境变量设置成功。3,Linux简单程序设计a) 使用vi等编辑器编写一个简单程序,比如输出“hello world”,实现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中来运行.这就用到了交叉编译器.要进行交叉编译,用户需要在主机平台上安装对应的交叉编译工具链(cross compilation tool chain),然后用这个交叉编译工具链编译用户的源代码,最终生成可在目标平台上运行的代码.交叉编译工具链可以从网上下载,也可以自己制作.但编译器不是万能的,受版本限制,编译某些程序时会报错.常见的交叉编译工具链有:(1)Cross -2.95.3 tar: 该版本较早,除了编译vivi外一般不使用.(2)arm920t-eabi.tgz: 4.1.2版本的编译器,支持eabi,可以编译TX2440A开发板上的所有程序.(3)arm-linux-gcc: 4.3.2版本的编译器,支持eabi,是最常见的交叉工具链.2、gcc和交叉编译工具生成的可执行文件有什么不同?Gcc:GCC(GNU Compiler Collection,GNU编译器套件),是由 GNU 开发的编程语言编译器。它是以GPL许可证所发行的自由软件,也是 GNU计划的关键部分。GCC原本作为GNU操作系统的官方编译器,现已被大多数类Unix操作系统(如Linux、BSD、Mac OS X等)采纳为标准的编译器,GCC同样适用于微软的Windows。2 GCC是自由软件过程发展中的著名例子,由自由软件基金会以GPL协议发布。GCC 原名为 GNU C 语言编译器(GNU C Compiler),因为它原本只能处理 C语言。GCC 很快地扩展,变得可处理 C+。后来又扩展能够支持更多编程语言,如Fortran、Pascal、Objective-C、Java、Ada、Go以及各类处理器架构上的汇编语言等,所以改名GNU编译器套件(GNU Compiler Collection)。交叉编译工具:在一种计算机环境中运行的编译程序,能编译出在另外一种环境下运行的代码。可执行文件 (executable file) 指的是可以由操作系统进行加载执行的文件。在不同的操作系统环境下,可执行程序的呈现方式不一样。交叉编译工具可以简单地理解为在电脑上编译,生成的可执行文件在开发板上运行。交叉编译工具是根据开发板芯片的体系结构制作的,这与开发板上的芯片指令系统有关。arm-linux-gcc只是在编译时根据arm芯片的环境来生成可执行文件,生成的可执行文件必须移植到开发板上才能运行。3、比较可执行文件在主机和目标板上运行的不同,理解交叉编译的含义。执行文件在主机和目标板上运行的不同:宿主机和开发板可通过网络连接, 宿主机将会包含开发板所需的编译环境, 程序可在宿主机上编译完成后, 传递到开发板上执行, 而在开发板上不会包含编译环境, 只会有执行环境,所以两者的运行不同。在windows操作系统下,可执行程序可以是 .exe文件 .sys文件 .com等类型文件。Linux可执行文件格式为ELF即Executable and Linkable Format。格式:ELF headerprogram header table.txt .rodata .dataSection header table交叉编译含义:交叉编译这个概念的出现和流行是和嵌入式系统的广泛发展同步的。我们常用的计算机软件,都需要通过编译的方式,把使用高级计算机语言编写的代码(比如C代码)编译(compile)成计算机可以识别和执行的二进制代码。比如,我们在Windows平台上,可使用Visual C+开发环境,编写程序并编译成可执行程序。这种方式下,我们使用PC平台上的Windows工具开发针对Windows本身的可执行程序,这种编译过程称为native compilation,中文可理解为本机编译。然而,在进行嵌入式系统的开发时,运行程序的目标平台通常具有有限的存储空间和运算能力,比如常见的 ARM 平台,其一般的静态存储空间大概是16到32MB,而CPU的主频大概在100MHz到500MHz之间。这种情况下,在ARM平台上进行本机编译就不太可能了,这是因为一般的编译工具链(compilation tool chain)需要很大的存储空间,并需要很强的CPU运算能力。为了解决这个问题,交叉编译工具就应运而生了。通过交叉编译工具,我们就可以在CPU能力很强、存储空间足够的主机平台上(比如PC上)编译出针对其他平台的可执行程序。4.你认为做好本实验应该注意哪些方面?在做本实验时首先应该做好预习工作,在网上或者书本上查相关资料,了解交叉编译模式和方法,可以提前练习linux的程序设计流程,做一个小的练习,这样在试验中就会更加流畅。在做实验中,应该好好学习助教的讲解,并做好笔记,防止助教讲完就忘记,结果又会遇到一些本来可以自己解决的问题。听完助教讲解后,加上之前的预习,再按照操作一步步完成,一般都不会有问题了。五 实验心得通过本次实验,了解和掌握了交叉编译模式和方法,熟悉和掌握了Linux简单程序设计。在实验开始时对实验的整体流程的了解还不是很清楚,但是在经过助教的讲解后,就有了比较清楚的逻辑。最后在操作中还是遇到了很多问题,因为对linux指令了解还不深入,所以在解决问题时会浪费很多时间。所以我体会到了这门课要学好还需要做好基础功,多了解和掌握linux相关的指令和知识,同时多加练习,才能为以后打好基础

你可能感兴趣的:(交叉编译及linux简单程序设计,嵌入式实验6交叉编译及Linux简单程序设计实验)