华中科技大学计算机学院操作系统课程设计报告[1]
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
华中科技大学
嵌入式操作系统课程设计实验报告
院系: 计算机科学与技术学院
专业:
班级:
姓名:
指导老师:
报告时间:
计算机科学与技术学院
目录
1.课程设计目的 (3)
2.课程设计环境搭建 (3)
3.内容一:熟悉和理解Linux编程环境
3.1 内容要求 (5)
3.2 设计过程及实现 (5)
4.内容二:掌握添加系统调用的方法
4.1 内容要求 (9)
4.2 设计过程及实现 (9)
5.内容三:掌握添加设备驱动程序的方法
5.1 内容要求 (17)
5.2 设计过程及实现 (17)
6.内容四:理解和分析/proc文件
6.1 内容要求 (22)
6.2 设计过程及实现 (22)
1 课程设计目的
(1)掌握Linux操作系统的使用方法;
(2)了解Linux系统内核代码结构;
(3)掌握实例操作系统的实现方法。
2 课程设计环境搭建
(1)windows 7上,利用虚拟机软件VMware软件搭建的linux平台:◎Ubuntu 11.10 (安装包:ubuntu-11.10-desktop-i386)
◎内核:linux-headers-3.0.0-12-generic
(2)更改root登录:
在现阶段Ubuntu的系统中,是不允许直接以root身份登录系统的,但是在做课设的过程中,需要大量的使用root权限来进行命令的操作。如果以普通用户登录ubuntu,会连编辑一个文件都非常周折。为此,我找到了一种修改系统文件,以达到直接使用root身份登录的方法:
◎开始的时候,只能以普通用户登录,用Ctrl+Alt+T打开终端:
初始化/修改root密码
sudo passwd root
用vi编辑器修改这个文件:
sudo vi /etc/lightdm/lightdm.conf
在文件最后加入这么一行代码:
greeter-show-manual-login=true
然后保存退出,sudo reboot 重启系统。之后就可以输入root用户登录。(3)在添加系统调用中用到的其他内核包:
◎下载和当前实验环境最为接近的系统版本(这点很重要)
使用apt-get install linux-source-3.0.0 命令,
◎下载结果是linux-source-3.0.0.tar.bz2
◎解压命令:tar –xjvf linux-source-3.0.0.tar.bz2 –C /usr/src ◎解压后,在/usr/src目录下得到内核文件夹linux-source-3.0.0
(4)在调用linux图形库时需要安装GTK环境:
◎安装gcc/g++/gdb/make 等基本编程工具
apt-get install build-essential
Tip:如果提示由于依赖项不能安装,需要使用apt的强化版aptitude,这个工具可以自动分析软件包依赖,系统一般不自带,需要先安装,具体过程是:apt-get install aptitude
aptitude install build-essential
aptitude这个工具很强大,对于解决软件包安装时的依赖问题很有帮助。
◎安装 libgtk2.0-dev libglib2.0-dev 等开发相关的库文件:
apt-get install gnome-core-devel
◎安装GTK核心组件:
apt-get install libgtk2.0-dev
这个安装完成后,GTK环境就基本搭建成功,网上有些教程说要安装其他配置文件,经我亲测,发现只要安装libgtk2.0-dev这个包就能搞定。
3 内容一:熟悉和理解Linux编程环境
3.1 内容要求
(1)编写一个C程序,实现文件拷贝功能
(2)编写一个C程序,使用Linux下的图形库,分窗口显示三个并发进程运行;
3.2 设计过程及实现
(1)文件拷贝:
①文件的拷贝主要的思想就是利用文件指针操作,在两个文件之间进行按字符的fget和fput。从而完成整个文件的拷贝操作。在这个基本功能之外,需要增加程序的健壮性,具体有以下几个方面:
·源文件是否存在且能读取数据;
·是否能创建目的文件,且能向里面写入数据;
·程序需要的argc参数个数是否满足要求;
②基于以上几点和内容要求,主要的程序段如下:
if(argc!=3) //判断参数个数是否为3 ,否则返回{
printf("Error in argc!\n");
return 0;
}
if( (fsource=fopen(argv[1],"rb"))==NULL )
{
printf("Error in open source file!\n"); //判断源文件是否能打开和读出
return 0;
}
if( (ftarget=fopen(argv[2],"wb"))==NULL )
{
printf("Error in open target file!\n"); //判断目的文件时候能创建和写入
return 0;
}
while((c=fgetc(fsource))!=EOF)
{
fputc(c,ftarget); //按字符读取和写入数据}