我爱Aspx >> Asp.Net >> LINUX下的设备驱动程序三、UNIX系统下的设备驱动程序
3.1、UNIX下设备驱动程序的基本结构
在UNIX系统里,对用户程序而言,设备驱动程序隐藏了设备的具体细节,
对各种不同设备提供了一致的接口,一般来说是把设备映射为一个特殊的设备文
件,用户程序可以象对其它文件一样对此设备文件进行操作。UNIX对硬件设备
支持两个标准接口:块特别设备文件和字符特别设备文件,通过块(字符)特别
设备文件存取的设备称为块(字符)设备或具有块(字符)设备接口。
块设备接口仅支持面向块的I/O操作,所有I/O操作都通过在内核地址空间
中的I/O缓冲区进行,它可以支持几乎任意长度和任意位置上的I/O请求,即提
供随机存取的功能。
字符设备接口支持面向字符的I/O操作,它不经过系统的快速缓存,所以它
们负责管理自己的缓冲区结构。字符设备接口只支持顺序存取的功能,一般不能
进行任意长度的I/O请求,而是限制I/O请求的长度必须是设备要求的基本块长
的倍数。显然,本程序所驱动的串行卡只能提供顺序存取的功能,属于是字符设
备,因此后面的讨论在两种设备有所区别时都只涉及字符型设备接口。
设备由一个主设备号和一个次设备号标识。主设备号唯一标识了设备类型,
即设备驱动程序类型,它是块设备表或字符设备表中设备表项的索引。次设备号
仅由设备驱动程序解释,一般用于识别在若干可能的硬件设备中,I/O请求所涉
及到的那个设备。
设备驱动程序可以分为三个主要组成部分:
(1) 自动配置和初始化子程序,负责检测所要驱动的硬件设备是否存在和是否
能正常工作。如果该设备正常,则对这个设备及其相关的、设备驱动程序
需要的软件状态进行初始化。这部分驱动程序仅在初始化的时候被调用一
次。
(2) 服务于I/O请求的子程序,又称为驱动程序的上半部分。调用这部分是由
于系统调用的结果。这部分程序在执行的时候,系统仍认为是和进行调用
的进程属于同一个进程,只是由用户态变成了核心态,具有进行此系统调
用的用户程序的运行环境,因此可以在其中调用sleep()等与进程运行环
境有关的函数。
(3) 中断服务子程序,又称为驱动程序的下半部分。在UNIX系统中,并不是
直接从中断向量表中调用设备驱动程序的中断服务子程序,而是由UNIX
系统来接收硬件中断,再由系统调用中断服务子程序。中断可以产生在任
何一个进程运行的时候,因此在中断服务程序被调用的时候,不能依赖于
任何进程的状态,也就不能调用任何与进程运行环境有关的函数。因为设
备驱动程序一般支持同一类型的若干设备,所以一般在系统调用中断服务
子程序的时候,都带有一个或多个参数,以唯一标识请求服务的设备。
在系统内部,I/O设备的存取通过一组固定的入口点来进行,这组入口点是
由每个设备的设备驱动程序提供的。一般来说,字符型设备驱动程序能够提供如
下几个入口点:
(1) open入口点。打开设备准备I/O操作。对字符特别设备文件进行打开操
作,都会调用设备的open入口点。open子程序必须对将要进行的I/O
Ҷƪл˵?
IT避孕套[05-05]
支持 Itanium 晶片行动 Linux 抢..[05-05]
从程序员的角度看xwindows[05-05]
Unix(Linux) C编程问题精粹[05-05]
XML和JSP的联手[05-05]
用PHP动态生成虚拟现实VRML网页[05-05]
PHP对象编程实现3D饼图[05-05]
使用数据库保存session的方法[05-05]
基于MySQL的高性能数据库应用开发[05-05]
用php写类似microsoft的挖地雷游..[05-05]