计算机科学与技术学院。
操作系统课程设计。
实验报告。班级xxxxxxx
专业计算机科学与技术
实验室名称 xxxx
学号xxxxxxxxxx
姓名 xxxxxx
目录。一、实验目的 - 2 -
二、实验任务 - 2 -
三、实验步骤 - 2 -
3.1在虚拟机下安装linux系统 - 2 -
3.2重新编译内核 - 2 -
3.3编写驱动程序并进行测试 - 8 -
1.编译驱动程序 - 8 -
2.装载模块 - 8 -
3.分配次设备号 - 9 -
4.测试驱动程序 - 9 -
5.删除设备、模块 - 11 -
四、遇到的问题以及解决的方法 - 11 -
五、实验心得体会 - 11 -
1. 掌握linux安装的方法。
2.掌握kernel的升级。
3. 掌握系统引导管理器grub的使用。
4.学会编写简单的模块化的字符设备驱动程序。
1. 在虚拟机下安装某一linux的发行版(推荐centos)
2. 从内核官网**某一新的内核版本,并进行编译。
3. 设置系统引导管理器(推荐grub),使得系统可以从新内核启动。
4. 编写一个简单的模块化字符设备驱动程序,动态地装载和卸载以模块形式存在的字符设备驱动程序。同时,学会对所编写的字符设备驱动程序进行测试,最终了解linux操作系统是如何管理字符设备的。
基本要求:1)编写初始化和注销函数:scull_init() 和 scull_exit();
2)编写5个基本的设备接口函数,包括scull_open(),scull_write(),scull_read(),scull_ioctl()
3)和scull_release();
4)一个测试程序来测试所编写的字符设备驱动程序。
1.安装虚拟机软件:vmware workstation
2.安装centos6.4
1.重新编译内核。
2.安装vsftp服务器,samba服务器,3.安装好rh之后,首先查看ip,运行:
service network start,如果出现提示:determining ip information for eth0...failed; no link present.
check cable
4.编辑文件/etc/sysconfig/network-scripts/ifcfg-eth0
在该文件末尾加上:
check_link_down()
return 1;
再运行:service network up
再运行:ifconfig 即可看到ip
5.为了方便操作,采用putty连接到虚拟机的方式(如果putty老是连接不上,可能就是因为linux的防火墙的原因,所以要把防火墙关掉:service iptables stop)(注意,每次重启之后都要关闭防火墙)
6.运行命令uname–r,得到内核版本:2.6.32.8
7.到****一个比较新的稳定版本(**方法:wget
8. 用命令解压缩到目录/usr/src下面: tar –jxvf –c /usr/src
9.注意解压缩之后,会同时生成一个文件pax_global_header
10.仔细阅读readme文件(最好要求交课程设计报告的时候有翻译,因为仔细研读这些文件就是一种最好的学习)
/usr/src/linux…..
mrproper 目的是建立一个清洁的内核树。
menuconfig 设置内核编译的配置文件。
14.选好各个需要的选项之后推出保存。
clean 删除一些stale的文件。
bzimage 制作核心文件,这个过程比较花时间。
modules 编译模块。
modules_install 安装模块。
install
21.下面制作新旧内核的多重开机。
移动新内核到/boot下面去。
cp /usr/src/linux-2…….arch/i386/boot/bzimage /boot/vmlinuz-2.6.38.8
cp /usr/src/linux-2.6.38.8/ /boot/
修改grub配置文件。
22.注意在vmware下面以内核和直接在pc机上编译内核有些不同,在vmware上编译内核有些选项必须要选上。
在控制台下进入文件所在目录,输入命令make。
没有错误提示,说明make成功,进入文件夹下可以看到多了一些。k,.ko之类的文件。这就是编译好的模块。
2. 装载模块。
同样,必须要是root下才能进行。装载前,我们可以先看看系统中的模块:lsmod
装载,输入命令:
完成后,再看看系统中的模块,发现多了一个模块“chardev”,表示我们成功加载。
3.分配次设备号。
每个文件都有两个设备号,第一个是主设备号,标识驱动程序,第二个是从设备号,标识使用同一个设备驱动程序的不同的硬件设备,比如有两个软盘,就可以用从设备号来区分他们。设备文件的的主设备号必须与设备驱动程序在登记时申请的主设备号一致,否则用户进程将无法访问到驱动程序。。
分配前,我们必须要知道主设备号(其实在上一步中我们从dmesg中已经看到主设备好为248):cat /proc/devices
可见到这一行:248chardev,是了,主设备号为248.
现在我们分配从设备号:mknod /dev/chardev c 248 0
实际上就是在虚拟文件夹/dev/中加一个设备(在系统看来是文件)chardev ,注意,这个是设备名,在测试文件中真是要利用这个设备名打开设备。最后的0表示从设备号。可以随便分配(只要不冲突)。
此后便可以在/dev/目录下看到新建的设备chardev了:ls /dev/
一切成功的话,就可以测试我们的驱动程序了。
4.测试驱动程序。
首先要编译测试程序:
得到sb可执行程序,再执行:./sb
测试程序首先列出所有的设备名,让我们选中一个,当然输入devices啦:
正确读出之前存放在设备中的字符串!然后提示让我们输入一个字符串,实践证明是正确保存、读出。
5.删除设备、模块。
首先删除设备。就像删除普通文件一样:rm /dev/chardev
删除后,看看/dev/目录下是否已经没有chardev了?:ls /dev/
接着删除模块:rmmodchardev.
看看模块列表中是否已经没有chardev模块了?:lsmod
1、主机上面的文件与虚拟机无法共享,**在主机上的内核文件无法拷贝到在虚拟机中。
2、编译内核的过程很慢,没有完全发挥cpu的应有性能。
解决方法:上网查阅资料发现在编译过程中输入指令make –j*(其中*为编译过程最多可调用的cpu线程数)可以充分调用cpu各线程性能,编译速度提升明显。
通过此次实验,首先我学会了linux操作系统的安装过程,同时了解并熟悉了一些常用的操作指令,对linux的内核有了新的认识与了解,学习并掌握了内核的更新编译方法。并且通过上网学习与查阅,了解并实践编写了一个简单的模块化字符设备驱动程序,动态地装载和卸载以模块形式存在的字符设备驱动程序,同时,学会对所编写的字符设备驱动程序进行测试,最终了解linux操作系统是如何管理字符设备的。
实验的难度适中,但是需要格外的耐心与细致,因为有时候不知道**出现一点问题就需要重头再来一遍。总之通过此次实验不仅掌握了相关知识,也锻炼了细致耐心的态度。
操作系统课程设计报告
西安郵電大學。院系名称 计算机学院。专业名称 软件工程。班级 1104 学生姓名 赵大伟。学号 8位 04113124 指导教师 舒新峰。设计起止时间 2013.11.10 2013.11.20 1 通过观察 分析实验现象,深入理解进程及进程在调度执行和内存空间等方面的特点,掌握在posix 规范中...
操作系统课程设计报告
课程设计。课程名称操作系统。题目名称多级文件系统 2 学生学院计算机学院 专业班级。学号。学生姓名。指导教师。年月日。目录。一 课程设计 6 二 开发工具及环境 6 三 设计内容 6 四 结构图 8 五 部分 9 六 运行截图 11 七 参考文献 15 八 心得体会 15 本课程设计要求设计一个模拟...
操作系统课程设计报告
实验一进程管理。一 实验目的。1 开发一个函数,建立进程控制块和资源控制块结构,并实现相关数据结构的初始化。2 开发一系列操作,由进程调用这些操作,达到控制进程申请或释放各种资源的目的。通过实验理解进程的概念,进程的组成 pcb结构 进程的并发执行和操作系统进行进程管理的相关原语 主要是进程的创建 ...