没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
基于 Linux 的操作系统实验系统 第 1 页
第六章 设备管理实验
【实验目的】
通过本实验的学习,了解 操作系统中的设备驱动程序包括哪些组成部
分,并能编写简单的字符设备,
和块设备,的驱
动程序以及对所编写设备驱动程序的测试,最终了解 操作系统是如何管理
设备的。
【准备知识】
一.设备驱动程序的简单介绍
设备驱动程序集成在内核中,实际上是处理或操作硬件控制器的软件。
从本质上讲,驱动程序是常驻内存的低级硬件处理程序的共享库,设备驱动程序
就是对设备的抽象处理;也即是说,设备驱动程序是内核中具有高特权级的、常
驻内存的、可共享的下层硬件处理例程。
设备驱动程序软件封装了如何控制这些设备的技术细节,并通过特定的接口
导出一个规范的操作集合(见图 );内核使用规范的设备接口(字符设备接口和
块设备接口)通过文件系统接口把设备操作导出到用户空间程序中。(由于本实
验不涉及网络设备,故在此就不作讨论)
图 1 字符(块)设备、驱动程序和接口
字
符
设
备
驱
动
程
序
接
口
键 盘 驱 动 程
序
串 口 驱 动 程
序
并 口 驱 动 程
序
其 它 驱 动 程
序
?
?
块
设
备
驱
动
程
序
接
口
硬 盘 驱 动 程
序
软 盘 驱 动 程
序
光 盘 驱 动 程
序
其 它 驱 动 程
序
?
?
基于 Linux 的操作系统实验系统 第 2 页
在 中,字符设备和块设备的 ! 操作是有区别的。块设备在每次硬件
操作时把多个字节传送到主存缓存中或从主存缓存中把多个字节信息传送到设备
中;而字符设备并不使用缓存,信息传送是一个字节一个字节地进行的。
操作系统允许设备驱动程序作为可装载内核模块实现,这也就是说,设
备的接口实现不仅可以在 操作系统启动时进行注册,而且还可以在
操作系统启动后装载模块时进行注册。
总之, 操作系统支持多种设备,这些设备的驱动程序有如下一些特点:
()内核代码:设备驱动程序是内核的一部分,如果驱动程序出错,则可能
导致系统崩溃。
(")内核接口:设备驱动程序必须为内核或者其子系统提供一个标准接口。
比如,一个终端驱动程序必须为内核提供一个文件 ! 接口;一个 设备驱动
程序应该为 子系统提供一个 设备接口,同时 子系统也必须为内
核提供文件的 ! 接口及缓冲区。
(#)内核机制和服务:设备驱动程序使用一些标准的内核服务,如内存分配
等。
($)可装载:大多数的 操作系统设备驱动程序都可以在需要时装载进
内核,在不需要时从内核中卸载。
(%)可设置: 操作系统设备驱动程序可以集成为内核的一部分,并可
以根据需要把其中的某一部分集成到内核中,这只需要在系统编译时进行相应的
设置即可。
(&)动态性:当系统启动且各个设备驱动程序初始化后,驱动程序将维护其
控制的设备。如果该设备驱动程序控制的设备不存在也不影响系统的运行,此时
的设备驱动程序只是多占用了一点系统内存罢了。
二.设备驱动程序与外界的接口
每种类型的驱动程序,不管是字符设备还是块设备都为内核提供相同的调用
接口,故内核能以相同的方式处理不同的设备。 为每种不同类型的设备驱动
程序维护相应的数据结构,以便定义统一的接口并实现驱动程序的可装载性和动
态性。
设备驱动程序与外界的接口可以分为如下三个部分:
()驱动程序与操作系统内核的接口:这是通过数据结构 '(
来完成的。
(")驱动程序与系统引导的接口:这部分利用驱动程序对设备进行初始化。
(#)驱动程序与设备的接口:这部分描述了驱动程序如何与设备进行交互,
这与具体设备密切相关。
可归结为如下图 ":
字
符
设
备
驱
动
程
序
接
口
块
设
备
驱
动
程
序
接
口
基于 Linux 的操作系统实验系统 第 3 页
三.设备驱动程序的组织结构
设备驱动程序有一个比较标准的组织结构,一般可以分为下面三个主要组成
部分:
()自动配置和初始化子程序
这部分程序负责检测所要驱动的硬件设备是否存在以及是否能正常工作。如
果该设备正常,则对设备及其驱动程序所需要的相关软件状态进行初始化。这部
分程序仅在初始化时被调用一次。
(")服务于 ! 请求的子程序
该部分又可称为驱动程序的上半部分。系统调用对这部分进行调用。系统认
为这部分程序在执行时和进行调用的进程属于同一个进程,只是由用户态变成了
内核态,而且具有进行此系统调用的用户程序的运行环境。故可以在其中调用与
进程运行环境有关的函数。
(#)中断服务子程序
该部分又可称为驱动程序的下半部分。设备在 ! 请求结束时或其它状态改变
时产生中断。中断可以产生在任何一个进程运行时,因此中断服务子程序被调用
时不能依赖于任何进程的状态,因而也就不能调用与进程运行环境有关的函数。
因为设备驱动程序一般支持同一类型的若干设备,所以一般在系统调用中断服务
子程序时都带有一个或多个参数,以唯一标识请求服务的设备。
四.设备驱动程序的代码
设备驱动程序
操作系统内核
接口
数据结构
le_operatio
ns
实 现
系统引导
接 口
各设备
初始化
具体设备
接 口
进行交互
驱动程序与设备间
图 2 设备驱动程序与外界的接口
基于 Linux 的操作系统实验系统 第 4 页
设备驱动程序是一些函数和数据结构的集合,这些函数和数据结构是为实现
管理设备的一个简单接口。操作系统内核使用这个接口来请求驱动程序对设备进
行 ! 操作。甚至,我们可以把设备驱动程序看成是一个抽象数据类型,它为计算
机中的每个硬件设备都建立了一个通用函数接口。由于一个设备驱动程序就是一
个模块,所以在内核内部用一个 ' 结构来识别设备驱动程序,而且内核使用
'( 结构来访问设备驱动程序中的函数。
了解设备驱动程序代码的如下几个部分:
)驱动程序的注册与注销。 ◆ 设备的打开与释放。 ◆ 设备的读写操作。
)设备的控制操作。 ◆ 设备的中断和轮询处理。
第一部分 字符设备驱动程序的代码
1 了解什么是字符设备
2 了解字符设备的基本入口点
字 符 设 备 的 基 本 入 口 点 也 可 称 为 子 程 序 , 它 们 被 包 含 在 驱 动 程 序 的
'( 结构中。
*函数;② 函数;③ 函数;④ +函数;
,函数;⑥ 函数。
3 字符设备的注册
设备驱动程序提供的入口点在设备驱动程序初始化时向系统登记,以便系统
调用。 系统通过调用 (-向系统注册字符型设备驱动程序。
(-定义如下:
./ 01
./ 01
(- 23 43
'(4;
其中 2 时设备驱动程序向系统申请的主设备号。如果它为 5,则系统为
该驱动程序动态地分配第一个空闲的主设备号,并把设备名和文件操作表的指针
置于 - 表的相应位置。 是设备名, 是对各个调用入口点的说明。
(-函数返回 5 表示注册成功;返回6789: 表示申请的主设备号
非法,一般主设备号大于系统所允许的最大设备号;返回67; 表示所申请的主
设备号正被其它设备驱动程序使用。如果动态分配主设备号成功,则该函数将返
回所分配的主设备号。如果 (-操作成功,则设备名就会出现在
- 文件中。
字符设备注册以后,还必须在文件系统中为其创建一个代表节点。该节点可
以是在 - 目录中的一个节点,这种节点都是文件节点,且每个节点代表一个具
基于 Linux 的操作系统实验系统 第 5 页
体的设备。不过要有主设备号和从设备号两个参数才能创建一个节点。还可以是
在 - 设备文件目录下的一个节点,对于这种节点应根据主设备号给每一种设
备都创建一个目录节点,在这个目录下才是代表具体设备的文件节点。
【实验内容】
编 写 一 个 简 单 的 字 符 设 备 驱 动 程 序 。 要 求 该 字 符 设 备 包 括
(、(+ 、 ( 、( 和 (
五个基本操作,并编写一个测试程序来测试你所编写的字符设备驱动程序。
【实验指导】
先给出字符设备驱动程序要用到的数据结构定义:
-(<
4;
'(4;
=;
-(->?:@(ABC79D;
(C-<
-44;
E; EF
E; F
F;
(; -
; -+
(C-4;
=;
1 字符设备的结构
字符设备的结构即字符设备的开关表。当字符设备注册到内核后,字符设备的
名字和相关操作被添加到 -( 结构类型的 - 全局数组中,称
- 为字符设备的开关表。下面以一个简单的例子说明字符设备驱动程序中
字符设备结构的定义:(假设设备名为 )
4444'( 结构定义如下,即定义 设备的(4444
(4,'4';
(4,'4';
F( (+ 4 , '
4',4G,;
F((4,'4',
剩余29页未读,继续阅读
资源评论
tjx163
- 粉丝: 18
- 资源: 392
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 电力场景安全帽检测数据集VOC+YOLO格式295张2类别.7z
- MISC图片隐写MISC图片隐写MISC图片隐写MISC图片隐写MISC图片隐写.txt
- 七维大脑原理:探索人类心智的多元维度.txt
- 电力场景设备漏油检测数据集VOC+YOLO格式338张1类别.7z
- 基于yolov8+pyqt5实现精美界面支持图片视频和摄像检测源码.zip
- 用C语言为母亲节献上一份特别的祝福.zip
- LCD1602液晶显示屏的深入探索与实用指南.zip
- 基于Matlab人脸肤色定理的教师人数统计+源代码+全部数据+文档说明+详细注释+使用说明+截图(高分课程设计)
- 基于Matlab霍夫曼变换的表盘读数识别+源代码+全部数据+文档说明+详细注释+使用说明+截图(高分课程设计)
- 基于Matlab火灾烟雾检测源码带GUI界面+源代码+全部数据+文档说明+详细注释+使用说明+截图(高分课程设计)
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功