1 / 19

嵌入式系统原理与应用

嵌入式系统原理与应用. 实验 2 熟悉 Linux 开发环境. 一、实验目的. 熟悉 UP-TECHPXA270-S 下 Linux 的开发环境,学会使用 makefile 管理项目。熟悉 arm-linux-gcc 交叉编译的使用。使用基于 NFS 方式的下载调试,了解嵌入式开发的基本过程。. 二、实验内容.

kaida
Télécharger la présentation

嵌入式系统原理与应用

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 嵌入式系统原理与应用 实验2 熟悉Linux开发环境

  2. 一、实验目的 • 熟悉UP-TECHPXA270-S下Linux的开发环境,学会使用makefile 管理项目。熟悉arm-linux-gcc交叉编译的使用。使用基于NFS方式的下载调试,了解嵌入式开发的基本过程。

  3. 二、实验内容 • 本次实验使用Redhat linux 9.0操作系统环境安装arm-linux的开发库及编译器。新建一个目录,编写几个源文件,使用makefile管理项目。学习在linux 下的编程和编译过程,以及UP-TECHPXA270-S开发板的使用和开发环境的设置。下载已经编译好的文件到UP-TECHPXA270-S开发板中运行。

  4. 实验设备及工具(包括软件调试工具) • 硬件:UP-TECHPXA270-S嵌入式开发板、PC机Pentumn500以上, 硬盘10G以上。 • 软件:PC机操作系统REDHAT LINUX 9.0 +MINICOM + ARM-LINUX开发环境

  5. 三、实验原理 • GNU Make 的主要工作是读进一个文本文件makefile 。这个文件里主要是有关哪些文件(‘target’目的文件)是从哪些别的文件(‘dependencies’依赖文件)中产生的,用什么命令来进行这个产生过程。有了这些信息,make 会检查磁盘上的文件,如果目的文件的时间戳(该文件生成或被改动时的时间)比至少它的一个依赖文件旧的话, make 就执行相应的命令,以便更新目的文件。 (目的文件不一定是最后的可执行档,它可以是任何一个文件。)

  6. 实验原理 • makefile 一般被叫做“makefile”或“Makefile”。当然您可以 在 make 的命令行指定别的文件名。如果您不特别指定,它会寻找“makefile”或“Makefile”,因此使用这两个名字是最简单的。

  7. 实验原理 • 一个 makefile 主要含有一系列的规则,如下: 依赖文件 : 被依赖的文件(tab)<command> (tab)<command>

  8. makefile 文件规则 === makefile 开始 ===myprog : foo.o bar.ogcc foo.o bar.o -o myprogfoo.o : foo.c foo.h bar.hgcc -c foo.c -o foo.obar.o : bar.c bar.hgcc -c bar.c -o bar.o=== makefile 结束 === 这是一个非常基本的 makefile —— make 从最上面开始,把上面第一个目的,‘myprog’,做为它的主要目标(一个它需要保 证其总是最新的最终目标)。给出的规则说明只要文件‘myprog’ 比文件‘foo.o’或‘bar.o’中的任何一个旧,下一行的命令将会被执行。 但是,在检查文件 foo.o 和 bar.o 的时间戳之前,它会往下查找那些把 foo.o 或 bar.o 做为目标文件的规则。它找到的关于 foo.o 的规则,该文件的依赖文件是foo.c, foo.h 和bar.h 。

  9. makefile 文件规则 === makefile 开始 ===myprog : foo.o bar.ogcc foo.o bar.o -o myprogfoo.o : foo.c foo.h bar.hgcc -c foo.c -o foo.obar.o : bar.c bar.hgcc -c bar.c -o bar.o=== makefile 结束 === 它从下面再找不到生成这些依赖文件的规则,它就开始检查磁盘上这些依靠文件的时间戳。如果这些文件中任何一个的时间戳比 foo.o 的新,命令 'gcc -c foo.c –o foo.o' 将会执行,从而更新文件 foo.o 。 接下来对文件 bar.o 做类似的检查,依赖文件在这里是文件 bar.c 和 bar.h 。现在make 回到‘myprog’的规则。如果刚才两个规则中的任何一个被执行,myprog 就需要重建(因为其中一个 .o 时间戳比‘myprog’新),因此连接命令将被执行。

  10. 四、实验步骤 1建立工作目录(在UP-tech270目录下) mkdir 01_hello cd 01_hello 2 编写程序源代码 • 在LINUX下的文本编辑器有许多,常用的是vim, Xwindow界面下的gedit等,在开发过程中推荐使用vim. • 本实验是在终端上打印出一个菱形.一个三角形(由*号构成)及打印一行字符hello,my friends。

  11. 编写源程序 主函数文件为start.c: • #include "hello.h" • #include <stdio.h> • int main() { • star1(); • star2(); • showhello(); • return 0; • }

  12. 在starfun.h中定义了两个函数star1(),star2()打印两个三角形:在starfun.h中定义了两个函数star1(),star2()打印两个三角形: • #ifndef STARFUN_H • #define STARFUN_H • #define NUM 4 • #define NUMBER 3 • int star1() { • int i,j,k; • for(k=1;k<=NUM;++k) { • for(i=1;i<=(NUM-k);++i) • printf(" "); • for(j=1;j<=(2*k-1);++j) • printf("*"); • printf("\n"); • } • return 0; • } int star2() { int i,j,k; for(k=NUMBER;k>=0;--k) { for(i=1;i<=(NUMBER-k+1);++i) printf(" "); for(j=1;j<=(2*k-1);++j) printf("*"); printf("\n"); } return 0; } #endif

  13. 在hello.h中定义了一个函数hello(),此函数中又调用了starfun()中的star1()函数用来打印一个三角形.在hello.h中定义了一个函数hello(),此函数中又调用了starfun()中的star1()函数用来打印一个三角形. • #ifndef HELLO_H • #define HELLO_H • void hello() { • star1(); • printf("hello,my friends\n"); • } • #endif

  14. 在hello.c中对hello函数进行了调用. • void showhello() { • hello(); • } 因为编译时可能出现头文件重复定义的错误,因此将所有的头文件申明都放在主函数中,此例中将子函数中的头文件都注释掉了.

  15. 3.编写makefile文件 • 由于交叉引用函数很复杂,因此编写了一个简单的makefile来组合这些头文件及主程序,将此makefile命名为:amake。因为所编写的程序要在pxa270板上运行,因此指定了交叉编译器。 • 具体的编写如下:

  16. 编写makefile文件 • #amake file • CC= arm-linux-gcc #指定编译器 • EXEC=myprog #定义目标文件名 • OBJS=star.o hello.o #为生成目标所使用的.o文件 • $(EXEC):$(OBJS) #目标与.o文件的依赖关系 • $(CC) -o $(EXEC) $(OBJS) #生成可执行文件 • star.o:starfun.h star.c #star.o依赖starfun.h,star.c • $(CC) -c star.c #生成star.o • hello.o:starfun.h hello.h hello.c #hello.o依赖starfun.h,hello.h,hello.c • $(CC) -c hello.c #生成hello.o • clean: #clean伪目标 • rm -f *.o $(EXEC) #执行make -f amake clean时删 除所有的.o文件

  17. 4.编译应用程序 • 在终端上使用make -f amake命令即可生成名为star的可执行文件. • * • *** • ***** • ******* • ***** • *** • * • * • *** • ***** • ******* • hello,my friends

  18. 注意: • 如果进行了修改,重新编译则运行: • make clean –f amake • make -f amake • 注意编译、修改程序都是在开发计算机上进行,不要在MINICOM的终端方式下进行。

  19. 5.下载调试 • 在宿主PC计算机上启动NFS服务,并设置好共享的目录,之后在开发板上运行: • mount -o nolock 192.168.0.121:/ up-techpxa270 /mnt/nfs (实际IP地址要根据实际情况修改)。挂接宿主机的根目录。成功之后在开发板上进入/mnt 目录,便相应进入宿主机的/ up-techpxa270目录,再进入开发程序目录运行刚刚编译好的hello程序,查看运行结果。 • 开发板挂接宿主计算机目录只需要挂接一次便可,只要开发板没有重起,就可以一直保持连接。这样可以反复修改、编译、调试,不需要下载到开发板的过程,当然当调试好程序后,您也可以下载到开发板运行。

More Related