《嵌入式操作系统》实验报告
实验一 Linux 下 C 编程
一、实验目的
1、熟悉 Linux 常用命令。
2、掌握 gcc 编译器、gdb 调试器的使用方法。
3、会编写多文件的 C 程序,并使用 gcc 编译。
4、熟悉 makefile 的结构和编制,利用 make 命令编译程序。
二、实验原理
1、linux 不以文件名后缀区分文件类型,但是通常将 C 源代码以.c 结尾,事实证明,在
使用 GCC 编译器时,是要求以.c 结尾的。
2、在 linux 下,编写好的 C 程序需要编译为二进制的可执行文件才能运行;得到可执
行文件要经过以下几个步骤:
预处理汇编编译链接二进制可执行文件。
3、make 工具,是程序的自动编译器。利用时间戳检测文件修改的时间,查看当前哪些
文件是更新的,只编译改变了的程序,是一个项目管理工具。用于大型程序的编制,可节省
时间,提高效率。
Makefile 的基本格式:
(1)目标体:目标文件/可执行文件。
(2)依赖文件。
(3)运行的命令(必须以 Tab 开头)。
Makefile 具有隐含规则和模式规则。隐含规则:同名的.c 文件生成同名的.o 文件,不用
写 main.o、print.o 等的编译语句。模式规则:相同名称的.c 生成相同名称的.o 文件,这种方
式更加显式。
三、实验内容
1、 编写多文件的.c 源码,实现的功能为用户输入一个数字,程序计算并输出介于 1
至此数之间的所有个位数为 1 的素数;如果不存在,则打印-1。
2、编写 Makefile 文件。
3、使用 gcc 编译并运行。
4、使用 make 编译并运行。
源程序:
(1)运行 c 文件 main.c:
1
《嵌入式操作系统》实验报告
#include
void first(int a);
void main(){
int a;
scanf("%d",&a);
first(a);
}
(2)输出输入数字范围内个位为 1 的质数的功能 c 文件 function.c:
void first(int a){
int i,j,t;//t 统计质数因子
if(a<=10){//个位数为 1 的素数只有大于 10 才存在否则不存在
printf("-1\n");
return;
}
for(i=1;i<=a;i++){//第一轮自动过滤数为 1
for(j=1;j<=a;j++){
if(i%j==0)
t++;//一个质数只有自己和 1 两个数取余为 0 才为质数
}
if(t==2&&i%10==1){//质数因子为 2 个位取余为 1
printf("%d\t",i);
}
t=0;//归零
}
printf("\n");
}
(3)Makefile 文件内容:
first:main.c function.c
gcc -E main.c -o first.i 注解:进行预编译 main.c 下同
gcc -E function.c -o second.i
gcc -S first.i -o first.s 注解:由预编译文件生成汇编代码下同
gcc -S second.i -o second.s
gcc -c first.s -o first.o 注解:由汇编代码生成生成目标文件下同
gcc -c second.s -o second.o
gcc first.o second.o -o first 注解:链接目标文件 first.o second.o 生 成 目 标 文 件
注:以上的 Makefile 文件中所有 gcc 内容可以简写为 gcc main.c function.c -o
first
first
2
《嵌入式操作系统》实验报告
实验截图:
(1)gcc 编译并运行(实验结果展示介绍放在 make 中)
<1>生成预处理的.i 文件:gcc -E xx.c -o xx.i;
<2>生成汇编代码.s 文件:gcc -S xx.i -o xx.s;
<3>生成二进制目标代码.o 文件:gcc -c xx.s -o xx.o;
<4>生成可执行文件:gcc xx.o -o xx;
(2)make 编译并运行
输入命令 sudo make first 生成 first 目标文件并输入密码
输入代表数字:
<1>1(本身不为个位为 1 的质数)
<2>10(10 以内不存在个位为 1 的质数)
<3>100(内含 5 个个位为 1 的质数)
3
《嵌入式操作系统》实验报告
实验总结:本次实验中了解到了在使用 makefile 文件来执行 make 命令编译相应文件为
可执行文件时,必须使用 su - root 或 make 命令前加 sudo 获得管理员权限。除此以外在
makefile 文件中的格式一般为目标体:再加上相应的 gcc 编译命令。在执行 gcc 编译命令时,
可以直接用 gcc xx.c
-o xx 的形式形成可执行的目标文件而不必依次输入预编译、编译不汇
编、编译不连接、最后连接生成的 gcc 命令。
4
《嵌入式操作系统》实验报告
实验二 搭建 NFS 服务器
一、实验目的
1、熟悉搭建 NFS 服务器的过程和方法,为嵌入式开发打下基础。
2、了解 NFS 服务器在嵌入式开发的重要作用。
二、实验原理
1、NFS 实现不同主机与操作系统之间通过网络进行资源共享的目的;
2、在嵌入式开发中,服务器端为 PC 机;客户端为嵌入式目标板;
3、NFS 便于交叉编译的进行,可以不用将编译好的内核逐个部署到开发板,而是由开
发板根据需要自行下载。
三、实验内容
1、准备两台安装 ubuntu 系统的 PC 机。用网线连接两台计算机,设置在同一网段的静
态 IP 地址。
2、利用 ping 命令测试两台机器是否连通。
3、搭建 NFS 服务器:
(1)使用 apt-get update 命令更新系统软件包
(2)使用 apt-get install nfs-kernel-server 命令安装 nfs-kelnel-server
(3)作为服务端,新建 nfs 共享目录
(4)作为客户端,新建 nfs 挂载目录
(5)修改配置文件/etc/exports,对客户端设置挂载权限
(6)重启 nfs 服务,命令为 service nfs-kernel-server restart
(7)客户端使用 mount 命令,手动挂载共享目录
(8)客户端卸载共享目录
实验截图:
(1)搭建 NFS 服务器:
具体步骤:<1>下载 nfs 服务器(图一)
<2>修改服务器配置如图二所示
<3>在修改服务器对应相同位置创建 nfs 服务器文件夹
<4>重启 nfs 服务器
5
《嵌入式操作系统》实验报告
图一
(2)客户端挂载:
图二
具体步骤:<1>使用 sudo apt-get install nfs-common 下载 nfs 命令(图片中不再演示
<2>手动使用 mount 命令挂载 nfs 服务器文件夹(采用 TCP 协议把 IP
地址为 10.200.121.240 的 nfs 服务器文件夹 home/jipeng/one 中的内容挂
载到客户端 home/jipeng/two 文件夹中)
6
《嵌入式操作系统》实验报告
(3)具体操作:
<1>服务器端原有内容
<2>挂载后客户端所创建的目标文件夹 two 中自动出现的内容
<3>客户端对服务器文件.docx 进行修改
<4>服务器文件夹再次查看该文件时发现被修改
7
《嵌入式操作系统》实验报告
<5>服务器对服务器文件.docx 进行修改
<6>客户端文件夹再次查看该文件时发现被修改
实验总结:在本次试验中,首先了解到了 Linux 系统下如何用 apt 命令下载相应的
文件资源。在获得管理者权限并完成服务器和客户端的相关配置文件下载后,于服务器
端要使用 mkdir 命令生成相应的 nfs 服务器文件夹同时用 vi 命令进入/etc/exports 文件内
8