1 驱动程序,操作系统,文件系统和应用程序之间的关系

字符设备和块设备映射到操作系统中的文件系统,由文件系统向上提供给应用程序统一的接口用以访问设备。

Linux把设备视为文件,称为设备文件,通过对设备文件的读写操作实现对真实外设的操作。

从驱动程序的角度来从下到上看层次结构,包含了硬件设备,设备驱动程序(中断处理程序,设备服务程序),文件系统和用户进程四个层次:

需要知道的两个概念:

设备号:

  • 主设备号:标识同一类设备,对应一个驱动程序
  • 从设备号:标识一个设备实例,从设备号使得不同的物理设备使用同一个驱动程序。

设备文件:存在硬盘上的实际存在的文件,包括设备的名字,类型,设备号

需要知道的三个关于驱动操作的数据结构:

  • file_operations:文件操作,每个进程对设备的访问都会转换为对file_operations的访问,调用里面的操作函数指针;
  • file:打开的文件
  • inode:由内核在文件系统中表示文件

2 字符设备的注册

至此,设备驱动注册完成,有相应的设备驱动程序和设备号与之对应。

3 设备的打开

设备注册完成后,可以打开一个设备,这时候调用系统调用open()函数,经过一系列的调用,最后会调用chrdev_open()函数进行实际的打开操作,其主要流程为:

设备注册打开完成后,需要对其进行各种操作,外部设备的操作有一个特点就是操作时间较长,且操作时间不确定。

处理外部设备运作时,主要有两种方式:轮询和中断。

下面主要用介绍用中断的模式等待外设完成操作,其主要流程为:

4 小结

这里简单总结了一下Linux处理外部设备的主要流程,主要包括了外部设备的注册,打开和通常的操作。

需要注意的知识点就是驱动设备模型的概念,在字符设备中位cdev。所有对设备的操作,都是在cdev的ops字段寻找处理程序,之前将cdev映射道inode的i_cedv中,cdev的ops字段映射到设备文件file的f_op字段,这样对设备文件的操作就等同于对设备的操作,这正是本文开头所说明的设备文件映射到文件系统的实质。

在外部设备的操作流程中,涉及到中断处理流程,主要指的是软中断,会在中断一章详细讨论。

参考:

Linux操作系统分析PPT:驱动程序编写基础

【Linux操作系统分析】设备驱动处理流程的更多相关文章

  1. Linux下 USB设备驱动分析(原创)

    之前做过STM32的usb HID复合设备,闲来看看linux下USB设备驱动是怎么一回事, 参考资料基于韦东山JZ2440开发板,以下,有错误欢迎指出. 1.准备知识 1.1USB相关概念: USB ...

  2. Linux和Windows设备驱动架构比较

    毕业后一直在学操作系统, 有时候觉得什么都懂了,有时候又觉得好像什么都不懂,但总体来说自认为对操作系统实现机制的了解比周围的人还是要多一些.去年曾花了几个星期的晚上时间断断续续翻译了这篇对Linux和 ...

  3. Linux的总线设备驱动模型

    裸机编写驱动比较自由,按照手册实现其功能即可,每个人写出来都有很大不同: 而Linux中还需要按照Linux的驱动模型来编写,也就是需要按照"模板"来写,写出来的驱动就比较统一. ...

  4. linux driver ------ 字符设备驱动 之 “ 创建设备节点流程 ”

    在字符设备驱动开发的入门教程中,最常见的就是用device_create()函数来创建设备节点了,但是在之后阅读内核源码的过程中却很少见device_create()的踪影了,取而代之的是device ...

  5. Linux中总线设备驱动模型及平台设备驱动实例

    本文将简要地介绍Linux总线设备驱动模型及其实现方式,并不会过多地涉及其在内核中的具体实现,最后,本文将会以平台总线为例介绍设备和驱动程序的实现过程. 目录: 一.总线设备驱动模型总体介绍及其实现方 ...

  6. Linux高级字符设备驱动

    转载:http://www.linuxidc.com/Linux/2012-05/60469p4.htm 1.什么是Poll方法,功能是什么? 2.Select系统调用(功能)      Select ...

  7. Linux实现字符设备驱动的基础步骤

    Linux应用层想要操作kernel层的API,比方想操作相关GPIO或寄存器,能够通过写一个字符设备驱动来实现. 1.先在rootfs中的 /dev/ 下生成一个字符设备.注意主设备号 和 从设备号 ...

  8. Linux中LCD设备驱动-framebuffer(帧缓冲)【】

    转自:https://blog.csdn.net/linux_devices_driver/article/details/7079442 1.framebuffer 帧缓冲     帧缓冲(fram ...

  9. Linux下usb设备驱动详解

    USB驱动分为两块,一块是USB的bus驱动,这个东西,Linux内核已经做好了,我们可以不管,我们只需要了解它的功能.形象的说,USB的bus驱动相当于铺出一条路来,让所有的信息都可以通过这条USB ...

随机推荐

  1. justAP1.3.0版发布了

    justAP是一个简单的.易于使用的php运行环境,适合php开发人员使用.与wamp.xampp等不同,它仅仅包含Apache httpd和Php,这也是它名字的来由(justAP=just Apa ...

  2. 面试题之 query转为obj

    要注意处理编码后的字串  对于a=123要得到number形的值 function parseQueryString(url) { var obj = {}; var query = url.sear ...

  3. ODI学习笔记2--ODI产品架构

    ODI学习笔记2--ODI产品架构 ODI产品架构: ODI提供了以下几种管理工具:Designer 用于定义数据转换逻辑,这是最常用的开发工具,大部分的开发任务,包括data store的定义,in ...

  4. Android多线程任务优化1:探讨AsyncTask的缺陷

     AsyncTask还有别的缺陷,在生成listview的时候,如果adapter里面的count动态改变的话,不能使用AsyncTask,只能使用Thread+Handler,否则会出现如下错误 j ...

  5. 【Perl学习笔记】2. perl中的bless理解

    bless有两个参数:对象的引用.类的名称. 类的名称是一个字符串,代表了类的类型信息,这是理解bless的关键. 所谓bless就是把 类型信息 赋予 实例变量. 程序包括5个文件:person.p ...

  6. 01-复杂度2. Maximum Subsequence Sum (25)

    Given a sequence of K integers { N1, N2, ..., NK }. A continuous subsequence is defined to be { Ni, ...

  7. STC15?MSP430?ARM?DSP?

    自从大学毕业以来,发现属于自己的时间越来越少,每天忙于工作,导致在大学学到的东西都好生疏,特别是大一刚开始学的模电,单片机等,现在才慢慢的抓起来,然后在这个多核处理器流行的时代,单片机貌似快过时了,但 ...

  8. linux之iptable

    转自:http://seanlook.com/2014/02/23/iptables-understand/ 一. netfilter与iptables Netfilter是由Rusty Russel ...

  9. javascript操作JSON字符

    1.先要区分JSON字符串和JSON对象 JSON字符串: Var strJSON = “{“Area”:[{“AreaId”:”123”},{“AreaId”:”345”}]}”,   或者 Var ...

  10. 图片剪切之Croppic插件

    前几天做图片上传时需要进行图片的剪切和缩放,上网查找时找到了这个插件.样式很好看,功能也很OK.但是网上都是php进行后台处理图片的例子,然后只好慢慢琢磨C#的处理.插件地址是:http://www. ...