嵌入式Linux操作系统实验

发布 2022-10-21 10:38:28 阅读 2124

实验3-1 vi使用。

实验目的:

学会用vi编辑器。

实验要求:

熟练使用该节所介绍的vi创建、编辑、保存文件。

实验器材:

软件:1.安装了ubunt的vmware虚拟机。

硬件:pc机一台。

实验步骤:

1. 在当前目录下键入命令vi 创建名为的文。

上图是在命令行模式下。

2. 键入i进入插入模式。

3. 在插入模式下输入文字hello word!

4. 按[esc]键退出到命令行模式。

5. 按shift+;键,即:键进入底行模式。

6. 键入wq保存退出。

7. 将文件/etc/samba/拷贝到当前目录下,下面的实验步骤是为了让大家能够熟练使用vi中的常见操作。

命令:cp /etc/samba/ .

8. 用vi打开文件设定显示行号,指出“share definitiongs”的所在行号。

在底行模式下,输入:set nu显示行号。

这样就可以看到“share definitions”所在的行为246行。

9. 将光标移动到248行。

命令:248g

即在命令行模式下输入248****f+g

10. 复制改行以下6行内容。

命令:6yy

11. 将光标移动到最后一行行首。

命令:g,即shift+g

12. 粘贴复制的内容。

命令:p13. 删除12步粘贴的6行。

命令:6dd

14. 撤销第13步的操作。

命令:u15. 查找字符串“share definitions”

命令:/share definitions

16. 强制退出vi,不存盘。

命令::q!

17. 总结:

对vi编辑的使用必须非常的熟练,因为vi编辑器是非常常用的。以后编辑程序、查看文档、修改配置文件等操作都会用到,所以大家要多练习。

实验3-2 gcc程序编译。

实验目的:学会使用gcc编译器及各种常用编译选项的使用。

理解库设计的功能:

1)**的封装保密 2)**模块化设计。

实验要求:1、 编写一应用程序,使用gcc进行编译,并分别使用-o,-g,-static,-o2等选项。

2、 静态库和动态库的使用。

实验器材:软件:

安装了ubunt 12.4的vmware虚拟机。

硬件:pc机一台。

第1题实验步骤:

先用vi编辑文件,内容如下:

int sum_int(int a, int b)

int main()

int a=2,b=3,c;

c=sum_int(a, b);

printf(“sum of a and b is %d”,c);

gcc指令的一般格式为:gcc [选项] 要编译的文件 [选项] [目标文件]

例:使用gcc编译命令,编译生成可执行文件hello,并运行hello

命令:#gcc –o hello

上面的命令一步由。c文件生成了可执行文件,将gcc的四个编译流程:预处理、编译、汇编、链接一步完成,下面将介绍四个流程分别做了什么工作。

–e选项的使用。

e选项的作用:只进行预处理,不做其他处理。

例:只对文件进行预处理,生成文件并查看。

命令:#gcc –e –o

使用命令#cat 查看 文件的内容。

可以看到头文件包含部分**#include <>经过预处理阶段之后,编译器已将的内容贴了进来。

–s选项的使用。

s选项的作用:只是编译不汇编,生成汇编**。

例:将文件只进行编译而不进行汇编,生成汇编**。

命令:gcc –s –o

使用命令#cat 查看的类容。

–c选项的使用。

c选项的作用:只是编译不连接,生成目标文件“.o”

例:将汇编**只编译不链接生成文件。

命令:#gcc –c –o

使用objdump -d 命令查看反汇编**。

将编译好了的链接库,生成可执行文件hello

命令:#gcc –o hell

–static选项的使用。

static选项的作用:链接静态库。

例:比较链接动态库生成的可执行文件hello和链接静态库生成的可执行文件hello1的大小。

命令:#gcc –o hello

#gcc –o static hello1

可以看到静态链接库的可执行文件hello1比动态链接库的可执行文件hello要大的多,他们的执行效果是一样的。

-g选项的使用。

g选项的作用:在可执行程序中包含标准调试信息。

例:将编译成包含标准调试信息的可执行文件hello2

命令:#gcc –g –o hello2

带有标准调试信息的可执行文件可以使用gdb调试器进行调试,以便找出逻辑错误。

–o2选项的使用。

o2选项的作用:完成程序的优化工作。

例:将是用o2优化选项编译生成可执行文件hello1,和正常编译产生的可执行文件hello进行比较。

2、实验步骤:

1、建立project目录,其子目录结构如下,2、在src文件夹编写主程序,参考**如下:

编译运行,通过,之后做如下调整:

1) 在include文件夹下新建头文件将程序中,包含头文件语句和函数声明语句删除并添加到中。在src 文件夹下编写 文件,将程序函数的实现部分移动到,中。将 包含到 中。

的参考**如下:

的参考**如下:

2) 目录结构如下:

3) 由于头文件与不在用一个目录下,编译时必须加入-i 选项来链接指定目录的头文件,gcc –o main –i../include/

4) 继续修改**,将 制作为静态库并将其保存到lib目录中。并将源程序剪切到桌面暂时保存。并且为了实验效果,将lib文件夹下用touch命令创建两个库文件。

目录结构如下:

静态库的制作及加载的一般方法如下:

gcc -c -o -i ..include> 先得到*.o的目标文件(可重定位)

ar -crs > 通过ar归档工具,将生成静态库文件。

库方法(库加载方式):

gcc -o main -i ..include -l ..lsum -static

静态编译(通过 -static 指定。

静态编译使用的是静态库---

编译完成后运行main 程序,并尝试将拷贝到其它目录下程序能否正确运行,从而验证链接静态库生成的可执行程序,程序在运行时,不依赖库,因为编译时已经将库中的**添加到目标文件中了,并且系统默认动态编译而不是静态编译。

分析动态库的优缺点并写到实验报告中:

优点:执行时不需要再额外加载,速度快。

缺点:全部**被编译进程序,体积大。

5) 动态库的制作及链接方法:

将保存的 制作成动态库。

gcc -c -o -i ..include> 先得到*.o的目标文件(可重定位)

gcc -shared -fpic -o > 生成位置无关的共享库文件。

并将生成的动态库移动到lib目录中。

库加载方法:

gcc -o main -i ..include -l ..lsum

生成可执行程序main,程序的运行却要依赖动态库,原因及解决方法如下:

程序编译时: 需要加载对应的库文件,库文件的位置?

lib /usr/lib

如果所需的头文件不在标准头文件目录,则需要通过 -l 选项指定 --l 库文件路径

-l 指定库文件名称 --ladd

动态库文件参与链接。

运行前,必须确保库文件在准确的库文件加载路径中,否则将提示加载失败!!!

解决方法:

1) 将库文件拷贝到标准库路径(/lib /usr/lib )

2) 确认自定义生成的库文件在自定义目录中,如:/home/gec/project/lib

修改环境变量 ld_library_path --指定路径。

export ld_library_path=$ld_library_path:/home/gec/project/lib

如果想长期有效,需要修改系统的配置文件,例如: /etc/

3) 修改系统的库文件加载配置文件:

etc/ -在该文件中添加库的新路径(/home/gec/project/lib)

使能: ldconfig

理解动态库的优缺点:

优点: 大部分加载的库**不被编译进程序,只保留调用的信息符号,在执行时再调用,体积小。

缺点:执行时再额外加载,速度慢;对运行环境中库文件有依赖(必须在执行的环境中有相应的库文件)

知识点:1、 系统默认动态编译,所谓动态编译,编译器优先链接动态库,只有在链接的动态库不存在的时候才会链接静态库,除非自己指定是静态编译(-static)。

嵌入式操作系统实验

浙江大学城市学院实验报告。课程名称 嵌入式操作系统实验3 实验名称 arm工作模式切换程序设计与调试 学生姓名专业学号。同组学生姓名指导老师成绩。一 实验目的。本实验主要的内容是在codewirrior ide下创建工程 并设置汇编程序开发的相应环境。然后,设置ide的属性。本实验在实验 的基础上,...

嵌入式操作系统

嵌入式操作系统eos embedded operatingsystem 是一种用途广泛的系统软件,过去它主要应用于工业控制和国防系统领域。eos负责嵌人系统的全部软 硬件资源的分配 调度工作,控制协调并发活动 它必须体现其所在系统的特征,能够通过装卸某些模块来达到系统所要求的功能。目前,已推出一些应...

嵌入式操作系统

嵌入式课程设计。uc os内核分析。uc os 是由micrium公司设计,源 完全的实时嵌入式操作系统,而且是第一个公开内核实现机制的实时操作系统。uc os 结构非常紧凑,使用也很简单。uc os 功能比较强大,支持56个用户任务,其内核为占先式,支持信号量 邮箱 消息对列等多种进程间通信机制。...