《嵌入式操作系统》实验教学大纲:实验二-嵌入式Linux开发基础_第1页
《嵌入式操作系统》实验教学大纲:实验二-嵌入式Linux开发基础_第2页
《嵌入式操作系统》实验教学大纲:实验二-嵌入式Linux开发基础_第3页
《嵌入式操作系统》实验教学大纲:实验二-嵌入式Linux开发基础_第4页
《嵌入式操作系统》实验教学大纲:实验二-嵌入式Linux开发基础_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、实验二 嵌入式Linux开发基础一、实验目的1、进一步熟悉Vi编辑器的使用2、掌握gcc编译器的基本使用方法3、了解Makefile文件的内容及编写格式,掌握Makefile文件的自动生成方法 4、了解利用gdb调试程序的基本方法。二、实验设备装有RedHat EnterpriseLinux操作系统的PC机三、预备知识掌握linux的基本命令,掌握C语言的基本编程方法了解Makefile文件的基本知识四、实验内容及步骤1.熟悉VI编辑器的使用使用VI编辑器编辑下列几个函数文件:hello.hstarfun.hhello.cstar.c在使用Vi编辑器的过程中,注意使用Vi的单行和多行复制命令,

2、练习字符串查找替换命令,删除一个字符,删除光标后整个内容命令,删除一行命令,恢复删除,保存和退出命令等命令,并尝试使用其他命令。相关函数文件如下:Starfun.h 文件内容如下:/*starfun.h*/#ifndef STARFUN_H#define STARFUN_H#define NUM 4#define NUMBER 3int star1() int i,j,k;for(k=1;k=NUM;+k) for(i=1;i=(NUM-k);+i)printf( );for(j=1;j=0;-k) for(i=1;i=(NUMBER-k+1);+i) printf( );for(j=1;j=

3、(2*k-1);+j)printf(*);printf(n);return 0;#endifhello.h文件内容如下:/*hello.h*/#ifndef HELLO_H#define HELLO_Hvoid hello() star1();printf(hello,my friendsn); #endifhello.c 文件内容如下:void showhello() hello();star.c文件内容如下:#include starfun.h#include hello.h#include int main() star1();star2();showhello();return 0;2

4、使用gcc编译器编译程序第一种方法:分步进行1)由star.c starfun.h 文件生成star.o 目标文件gcc -c star.c -o star.o2)由hello.c hello.h starfun.h生成hello.o目标文件gcc -c hello.c -o hello.o3)由hello.o star.o 生成应用程序myproggcc star.o hello.o -o myprogrootlocalhost 01_hello# ./myprog * * * * * * * * *hello,my friends第二种方法:一条命令完成以上操作gcc star.c hel

5、lo.c -o myprog练习gcc中各种参数的使用,体会gcc编译器编译的过程及各选项参数的作用。rootlocalhost 01_hello# gcc star.c hello.c -o myprogrootlocalhost 01_hello# gcc -w star.c hello.c -o myprogrootlocalhost 01_hello# gcc -Wall star.c hello.c -o myprogIn file included from star.c:1:starfun.h: In function star1:starfun.h:13: warning: i

6、mplicit declaration of function printfstar.c: In function main:star.c:8: warning: implicit declaration of function showhellohello.c: In function showhello:hello.c:4: warning: implicit declaration of function hello体会-Wall -w选项的作用查阅当前的gcc版本命令rootlocalhost 01_hello# gcc -vReading specs from /usr/lib/gc

7、c-lib/i386-redhat-linux/3.2.2/specsConfigured with: ./configure -prefix=/usr -mandir=/usr/share/man -infodir=/usr/share/info -enable-shared -enable-threads=posix -disable-checking -with-system-zlib -enable-_cxa_atexit -host=i386-redhat-linuxThread model: posixgcc version 3.2.2 20030222 (Red Hat Linu

8、x 3.2.2-5)3、Makefile文件的编写Makefile是用于自动编译和链接的,一个工程有很多文件组成,每一个文件的改变都会导致工程的重新链接,但是不是所有的文件都需要重新编译,Makefile中纪录有文件的信息,在make时会决定在链接的时候需要重新编译哪些文件。Makefile的宗旨就是:让编译器知道要编译一个文件需要依赖其他的哪些文件。当那些依赖文件有了改变,编译器会自动的发现最终的生成文件已经过时,而重新编译相应的模块。 请为上述程序手动编写一个Makefile文件。Makefile的基本结构不是很复杂,但当一个程序开发人员开始写Makefile时,经常会怀疑自己写的是否符合

9、惯例,而且自己写的Makefile经常和自己的开发环境相关联,当系统环境变量或路径发生了变化后,Makefile可能还要跟着修改。这样就造成了手工书写Makefile的诸多问题,automake恰好能很好地帮助我们解决这些问题。使用automake,程序开发人员只需要写一些简单的含有预定义宏的文件,由autoconf根据一个宏文件生成configure,由automake根据另一个宏文件生成Makefile.in,再使用configure依据Makefile.in来生成一个符合惯例的Makefile。1)、建目录在你的工作目录下建一个helloworld目录,用来存放helloworld程序及

10、相关文件,如在/home/my/build下:$ mkdir helloword$ cd helloworld2)、建立 helloworld.c文件用Vi编辑器写一个hellowrold.c文件,内容如下:int main(int argc, char* argv)printf(Hello, Linux World!n);return 0;完成后保存退出。3)、生成configure使用autoscan命令来根据目录下的源代码生成一个configure.in的模板文件。命令:$ autoscan$ lsconfigure.scan helloworld.c执行后在hellowrold目录下会

11、生成一个文件:configure.scan,可以拿它作为configure.in的蓝本。现在将configure.scan改名为configure.in,并且编辑它,按下面的内容修改,去掉无关的语句:=configure.in内容开始=# -*- Autoconf -*-# Process this file with autoconf to produce a configure script.AC_PREREQ(2.57)AC_INIT(hello,1.0)AM_INIT_AUTOMAKE(helloworld, 1.0)AC_CONFIG_SRCDIR(hello.c)AC_CONFIG

12、_HEADER(config.h)# Checks for programs.AC_PROG_CC# Checks for libraries.# Checks for header files.# Checks for typedefs, structures, and compiler characteristics.# Checks for library functions.AC_OUTPUT(Makefile)=configure.in内容结束=然后执行命令aclocal和autoconf,分别会产生aclocal.m4及configure两个文件:$ aclocal $ls acl

13、ocal.m4 configure.in helloworld.c $ autoconf $ ls aclocal.m4 autom4te.cache configure configure.in helloworld.cconfigure.in的内容是一些宏定义,这些宏经autoconf处理后会变成检查系统特性、环境变量、软件必须的参数的shell脚本。autoconf 是用来生成自动配置软件源代码脚本(configure)的工具。configure脚本能独立于autoconf运行,且在运行的过程中,不需要用户的干预。要生成configure文件,必须告诉autoconf如何找到所用的宏。方

14、式是使用aclocal程序来生成aclocal.m4。aclocal根据configure.in文件的内容,自动生成aclocal.m4文件。aclocal是一个perl 脚本程序,它的定义是:“aclocal - create aclocal.m4 by scanning configure.ac”。autoconf从configure.in这个列举编译软件时所需要各种参数的模板文件中创建configure。autoconf需要GNU m4宏处理器来处理aclocal.m4,生成configure脚本。m4是一个宏处理器。将输入拷贝到输出,同时将宏展开。宏可以是内嵌的,也可以是用户定义的。除

15、了可以展开宏,m4还有一些内建的函数,用来引用文件,执行命令,整数运算,文本操作,循环等。m4既可以作为编译器的前端,也可以单独作为一个宏处理器4)、新建Makefile.am新建Makefile.am文件,命令:$ vi Makefile.am内容如下:AUTOMAKE_OPTIONS=foreignbin_PROGRAMS=helloworldhelloworld_SOURCES=helloworld.cautomake会根据Makefile.am来自动生成Makefile.in。Makefile.am中定义的宏和目标,会指导automake生成指定的代码。例如,宏bin_PROGRAMS

16、将导致编译和连接的目标被生成。5)、运行automake命令:$ automake -add-missingconfigure.in: installing ./install-shconfigure.in: installing ./mkinstalldirsconfigure.in: installing ./missingMakefile.am: installing ./depcompautomake会根据Makefile.am文件产生一些文件,包含最重要的Makefile.in。6)、执行configure生成Makefile$ ./configure checking for a

17、BSD-compatible install. /usr/bin/install -cchecking whether build environment is sane. yeschecking for gawk. gawkchecking whether make sets $(MAKE). yeschecking for gcc. gccchecking for C compiler default output. a.outchecking whether the C compiler works. yeschecking whether we are cross compiling.

18、 nochecking for suffix of executables. checking for suffix of object files. ochecking whether we are using the GNU C compiler. yeschecking whether gcc accepts -g. yeschecking for gcc option to accept ANSI C. none neededchecking for style of include used by make. GNUchecking dependency style of gcc.

19、gcc3configure: creating ./config.statusconfig.status: creating Makefileconfig.status: executing depfiles commands$ ls -l Makefile-rw-rw-r- 1 yutao yutao 15035 Oct 15 10:40 Makefile此时Makefile已经产生出来了。7)、使用Makefile编译代码$ makeif gcc -DPACKAGE_NAME= -DPACKAGE_TARNAME= -DPACKAGE_VERSION= -DPACKAGE_STRING=

20、-DPACKAGE_BUGREPORT= -DPACKAGE=helloworld -DVERSION=1.0 -I. -I. -g -O2 -MT helloworld.o -MD -MP -MF .deps/helloworld.Tpo -c -o helloworld.o test -f helloworld.c | echo ./helloworld.c; then mv -f .deps/helloworld.Tpo .deps/helloworld.Po; else rm -f .deps/helloworld.Tpo; exit 1; figcc -g -O2 -o helloworld helloworld.o 运行helloworld$ ./helloworld Hello, Linux World!这样helloworld就编译出来了,按上面的步骤会很容易地编译出正确的helloworld文

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论