一般linux设备驱动程序分为,Linux设备驱动程序介绍

Linux操作系统将所有的设备(而不仅是存储器里的文件)全部都看成文件,都纳入文件系统的范畴,都通过文件的操作界面进行操作。这意味着:

(l)每一个设备都至少由文件系统的一个文件代表,因而都有一个“文件名”。每个这样的“设备文件”都唯一地确定了系统中地一项设备。应用程序通过设备地文件寻找访问具体地设备,而设备则象普通文件一样受到文件系统访问权限控制机制地保护。

(2)应用程序通常可以通过系统调用open()“打开”这个设备文件,建立起与目标设备的连接。代表着该设备的文件节点中记载着建立这种连接所需的信息。对于执行该应用程序的进程而言,建立起的连接就表现为一个已经打开的文件。

(3)打开了代表着目标设备的文件,即建立起与设备的连接后,就可以通过

read()、write()、ioctl()等常规的文件操作对目标设备进行操作。Linux将设备分成两大类。一类是像磁盘那样以记录块或“扇区”为单位,成块进行输入/输出设备,称为“块设备”;另一类是像键盘那样以字符(字节)为单位,逐个进行输入/输出的设备,称为“字符设备”、文件系统通常都建立在块设备上。网路设备是介于块设备和字符设备之间的一种特殊设备。设备文件的属性由三部分信息组成:第一部分是文件的类型(c/b),第二部分是一个“主设备号”,第三部分是一个“次设备号”。其中设备类型和主设备号结合在一起唯一地确定了设备文件地驱动程序及其界面,而次设备号则说明目标设备是同类设备中的第几个。应用程序通过Linux的系统调用与内核通信。由于Linux中将设备当作文件处理,所以对设备进行操作的调用和对文件操作的操作类似,主要包括open()、read()、write()、ioctl()、close()等。应用程序发出系统调用命令后,会从用户态转到内核态,通过内核将open()这样的系统调用转换成对物理设备的操作。在Linux中通过分层实现对物理设备的调用,并使得内核的结构清晰,提高了模块化的独立性。

2驱动程序的结构

一般Linux设备驱动程序可以分为3个主要组成部分:

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

(2)服务于I/O请求的子程序,又称为驱动程序的上半部。调用这部分程序是由于系统调用的结果。这部分程序在执行时,系统仍认为是与进行调用的进程属于同一个进程,只是由用户态变成了核心态,具有进行此系统调用的用户程序的运行环境,因而可以在其中调用sleep()等与进程运行环境有关的函 数。

(3)中断服务程序,又称为驱动程序的下半部。在Linux系统中并不是直接从中断向量表调用设备驱动程序的中断服务子程序,而是由Linux系统来接收硬件中断,再由系统调用中断服务子程序。中断可以在任何一个进程运行时产生,因而在中断服务程序被调用时,不能依赖于任何进程的状态,也就不能调用任何与进程运行环境有关的函数。因为设备驱动程序一般支持同一类型的若干设备,所以一般在系统调用中断服务子程序时,都带有一个或多个参数,以唯一标志请求服务的设备。在系统内部,I/O设备的存/取通过一组固定的入口点来进行,这组入口点是由每个设备的设备驱动程序提供的。具体到Linux系统,设备驱动程序所提

供的这组入口点由一个文件操作结构来向系统进行说明。file_operations结构

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值