《嵌入式系统》实验报告1
学号: 姓名: 班级: 成绩:
实验名称:嵌入式Linux基础实验 | 实验地点: |
实验仪器:装有Linux操作系统的PC机一台;XSBase270实验开发平台一套 | |
一、实验目的: 1、掌握Linux各类命令的使用方法; 2、熟悉Linux操作环境 3、了解Makefile的基本概念和基本结构 4、初步掌握编写简单Makefile的方法 5、了解递归Make的编译过程 6、初步掌握利用GNU Make编译应用程序的方法 | |
二、实验内容: 一、练习使用Linux常用命令 文件和目录类命令: (1) 启动计算机,利用root用户登录到系统,进入字符提示界面。 (2) 用pwd命令查看当前所在的目录; $ pwd (3) 用ls命令列出此目录下的文件和目录 $ ls $ ls –a 注:注意上面两个命令的区别(查看结果) (4) 用man命令查看ls命令的使用手册 $ man ls (5) 在当前目录下,创建测试目录test $ mkdir test 利用ls命令列出文件和目录,确认test目录创建成功 $ ls (6) 进入test目录,查看当前目录的命令为 $ cd test (7) 利用vi命令,在当前目录创建一个新的空文件newfile $ vi newfile 进入newfile后,输入“:wq”,保存后退出该文件。 (8) 利用cp命令复制系统文件/etc/profile到当前目录下 $ cp /etc/profile ./ 复制文件profile到一个新文件profile.bak,作为备份 $ cp profile profile.back 用长格形式列出当前目录下的所有文件,注意比较每个文件的长度和创建时间的不同 $ ls -l (9) 用less命令分屏查看文件profile的内容,注意练习less命令的各个子命令,例如b、p、q等并对then关键字查。 $ less profile (10) 用grep命令在profile文件中对关键字then进行查询 $ grep ‘then’ profile (11) 回到上层目录;用tar命令把目录test打包为 $ cd .. $ tar zcvf test (12) 将改名为,并把文件移动到test目录下;显示当前目录下的文件和目录列表,确认移动成功。 $ mv test $ ls -l (13) 进入test目录,显示目录中的文件列表;把文件解包 $ cd test $ tar zxvf (14) 显示当前目录下的文件和目录列表,复制test目录为testbak目录作为备份 $ ls –a $ cp -r test testback (15) 删除test子目录下的所有文件 $ rm –rf test (16) 回到上层目录,利用rm命令删除目录test和其下所有文件 $ cd .. $ rm –rf test (17) 综合:根据各人学号or姓名,为自己新建一个工作目录,并利用pwd命令查看自己的工作目录,并记录如下: 工作目录是(请填写): 系统信息类命令: (1) 利用date命令显示系统当前时间 $ date (2) 利用free命令显示内存的使用情况 $ free (3) 利用df命令显示系统的硬盘分区及使用状况 $ df 二、使用命令行的方式手动编译程序方法 0. 新建一个工程目录,并进入到该目录 [root@local]$ mkdir first 注:这里“first”改为自定义命名,随之后面的也跟着修改 [root@local]$ cd first 1.利用文本编辑器创建hello.c文件 [root@local]$ vi hello.c 然后按一下“i”键,随后输入以下内容 #include <stdio.h> int main(){ printf(“Welcome Emdoor!\n”); return 1; } 编辑完成后,按“Esc”键,退出输入模式; 接着输入“:wq”,表示保存以上文件后退出。 2.手动编译hello应用程序 [root@local]$ gcc –c hello.c [root@local]$ gcc hello.o –o hello 运行hello程序: [root@local]$ ./hello 3.删除hello.o和hello文件 [root@local]$ rm -f hello.o [root@local]$ rm linux查看当前路径命令–f hello 退出当前工程目录: [root@local]$ cd .. 三、利用GNU make自动编译应用程序的方法 0. 新建一个工程目录 [root@local]$ mkdir mydir1 注:这里“mydir1”改为自定义命名,随之后面的也跟着修改 1.利用文本编辑器按照(二. 1.)的步骤分别创建一个makefile文件,并将其保存到与hello.c相同的目录下。 CC=gcc CFLAGS= all: hello hello: hello.o $(CC) $(CFLAGS) hello.o –o hello hello.o: hello.c $(CC) $(CFLAGS) –c hello.c –o hello.o clean: rm –rf hello*.o 2.执行指令: [root@local]$ make [root@local]$ ls [root@local]$ ./hello 3.执行make clean命令 [root@local]$ make clean 4.修改hello.c文件,重复第2、3步操作,查看并记录所生成的文件和运行结果。 5.重新编辑makefile文件(按照(二. 1.)的步骤进行编辑;斜黑体表示修改部分) CC=gcc CFLAGS= OBJS=hello.o all: hello hello: $(OBJS) $(CC) $(CFLAGS) $^ -o $@ hello.o: hello.c $(CC) $(CFLAGS) –c $< -o $@ clean: rm –rf hello*.o (注意:makefile中的每一行要么顶格写,要么空tab个字符,要么空一个字符;不能空多个字符) 6.重复第2,3步操作,查看并记录运行结果 7.退出当前工程目录 [root@local]$ cd .. 四、多个.c文件的编译 0. 新建一个工程目录 [root@local]$ mkdir mydir22 注:这里“mydir22”改为自定义命名,随之后面的也跟着修改 1.按照(二. 1.)的步骤分别创建三个文件hello1.c、hello2.c、hello2.h和makefile hello1.c #include <stdio.h> int main(){ printf(“Hello world!\n”); test2(); return 1; } hello2.c #include <stdio.h> #include “hello2.h” void test2(void){ printf(“Hello world again!”); } hello2.h void test2(void); makefile CC=gcc CFLAGS= OBJS=hello1.o hello2.o all: hello hello: $(OBJS) $(CC) $(CFLAGS) $^ -o $@ hello1.o: hello1.c $(CC) $(CFLAGS) –c $< -o $@ hello2.o: hello2.c $(CC) $(CFLAGS) –c $< -o $@ clean: rm –rf hello*.o 2.先后执行如下命令 [root@local]$ make [root@local]$ ls [root@local]$ ./hello 3.修改makefile文件(斜黑体表示修改部分) CC=gcc CFLAGS= CFILES=$(wildcard *.c) OBJS =$(CFILES:%c=%.o) all: hello hello: $(OBJS) $(CC) $(CFLAGS) $^-o $@ hello.o: hello.c $(CC) $(CFLAGS) –c $<-o $@ clean: rm –rf hello*.o 4.重复第2步操作,查看并记录运行结果 | |
三、思考: 1、根据提供的Linux操作系统源码中的Makefile结构,分析在工程中多级目录中存在多个makefile时,编译的顺序如何? 在Makefile使用include关键字可以把别的Makefile包含进来,这很像C语言的#include,被包含的文件会原模原样的放在当前文件的包含位置。因此,编译次序就是按照最终的大文件的次序进行编译。 | |
任课教师签名: 201 年 月 日
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论