LINUX下的设备驱动程序.doc

  1. 1、本文档共7页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
LINUX下的设备驱动程序

发信人: olly (剑胆琴心), 信区: Linux 标 题: 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 操作做好必要的准备工作,如清除缓冲区等。如果设备是独占的,即同一 时刻只能有一个程序访问此设备,则open子程序必须设置一些标志以表 示设备处于忙状态。 (2) close入口点。关闭一个设备。当最后一次使用设备终结后,调用close 子程序。独占设备必须标记设备可再次使用。 (3) read入口点。从设备上读数据。对于有缓冲区的I/O操作,一般是从缓 冲区里读数据。对字符特别设备文件进行读操作将调用read子程序。 (4) write入口点。往设备上写数据。对于有缓冲区的I/O操作,一般是把数 据写入缓冲区里。对字符特别设备文件进行写操作将调用write子程序。 (5) ioctl入口点。执行读、写之外的操作。 (6) select入口点。检查设备,看数据是否可读或设备是否可用于写数据。 select系统调用在检查与设备特别文件相关的文件描述符时使用select入口点。 如果设备驱动程序没有提供上述入口点中的某一个,系统会用缺省的子程序 来代替。对于不同的系统,也还有一些其它的入口点。 3.2、LINUX系统下的设备驱动程序 具体到LINUX系统里,设备驱动程序所提供的这组入口点由一个结构来向系 统进行说明,此结构定义为: #include linux/fs.h struct file_operations { int (*lseek)(struct inode *inode,struct file *filp, off_t off,int pos); int (*read)(struct inode

文档评论(0)

tianma2015 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档