学习Unix系统中设备驱动程序的方法

系统 其他OS
通过对文章的学习,魔王会了解到字符设备接口支持面向字符的I/O操作,它不经过Unix系统的快速缓存,所以它们负责管理自己的缓冲区结构。

在Unix系统里,对用户程序而言,设备驱动程序隐藏了设备的具体细节,对各种不同设备提供了一致的接口,一般来说是把设备映射为一个特殊的设备文件,用户程序可以象对其它文件一样对此设备文件进行操作。

Unix系统对硬件设备支持两个标准接口:块特别设备文件和字符特别设备文件,通过块(字符)特别设备文件存取的设备称为块(字符)设备或具有块(字符)设备接口。块设备接口仅支持面向块的I/O操作,所有I/O操作都通过在内核地址空间中的I/O缓冲区进行,它可以支持几乎任意长度和任意位置上的I/O请求,即提供随机存取的功能。

字符设备接口支持面向字符的I/O操作,它不经过Unix系统的快速缓存,所以它们负责管理自己的缓冲区结构。字符设备接口只支持顺序存取的功能,一般不能进行任意长度的I/O请求,而是限制I/O请求的长度必须是设备要求的基本块长的倍数。

显然,本程序所驱动的串行卡只能提供顺序存取的功能,属于是字符设备,因此后面的讨论在两种设备有所区别时都只涉及字符型设备接口。设备由一个主设备号和一个次设备号标识。主设备号***标识了设备类型,即设备驱动程序类型,它是块设备表或字符设备表中设备表项的索引。次设备号仅由设备驱动程序解释,一般用于识别在若干可能的硬件设备中,I/O请求所涉及到的那个设备。

设备驱动程序可以分为三个主要组成部分:

(1) 自动配置和初始化子程序,负责检测所要驱动的硬件设备是否存在和是否能正常工作。如果该设备正常,则对这个设备及其相关的、设备驱动程序需要的软件状态进行初始化。这部分驱动程序仅在初始化的时候被调用一次。

(2) 服务于I/O请求的子程序,又称为驱动程序的上半部分。调用这部分是由于Unix系统调用的结果。这部分程序在执行的时候,系统仍认为是和进行调用的进程属于同一个进程,只是由用户态变成了核心态,具有进行此Unix系统调用的用户程序的运行环境,因此可以在其中调用sleep()等与进程运行环境有关的函数。
 
(3) 中断服务子程序,又称为驱动程序的下半部分。在Unix系统中,并不是直接从中断向量表中调用设备驱动程序的中断服务子程序,而是由Unix系统来接收硬件中断,再由Unix系统调用中断服务子程序。

中断可以产生在任何一个进程运行的时候,因此在中断服务程序被调用的时候,不能依赖于任何进程的状态,也就不能调用任何与进程运行环境有关的函数。因为设备驱动程序一般支持同一类型的若干设备,所以一般在Unix系统调用中断服务子程序的时候,都带有一个或多个参数,以***标识请求服务的设备。

【编辑推荐】

  1. Unix连接知识讲解之文件的连接和符号连接
  2. Unix系统文件使用chmod的一些例子
  3. 对Unix文件的属性知识深入讲解
  4. 一起来学习Unix文件知识详细分析
  5. 讲解非常重要的Unix文件
责任编辑:小霞
相关推荐

2010-04-19 10:28:43

Unix操作系统

2010-04-19 10:18:30

Unix操作系统

2010-05-10 16:08:41

Unix系统

2011-01-10 18:21:38

linux编写程序

2009-06-12 08:39:08

微软Windows 7操作系统

2021-11-29 07:55:45

Linux GPIO Linux 系统

2009-12-07 09:39:04

Linux设备驱动硬件通信

2018-08-29 13:33:02

Windows 10修复驱动程序

2011-09-08 18:34:33

WindowsXP驱动程序

2018-11-26 08:45:29

Linux驱动程序命令

2009-10-23 10:25:27

驱动程序技巧

2009-07-06 18:17:46

JDBC驱动程序

2009-06-15 14:18:00

netbeans配置JDBC驱动程序

2021-11-16 06:55:36

Linux字符设备

2019-03-27 13:20:31

Windows 10更新驱动程序

2013-10-31 16:29:10

Linux内核

2011-01-06 16:29:08

linuxtasklet机制

2021-11-22 08:14:23

Linux Linux驱动Linux 系统

2009-08-12 18:20:39

C#事件驱动程序

2017-03-03 08:40:32

点赞
收藏

51CTO技术栈公众号