1. 字符设备

字符设备指能够像字节流串行顺序依次进行访问的设备,对它的读写是以字节为单位。字符设备的上层没有磁盘文件系统,所以字符设备的file_operations成员函数就直接由字符设备驱动提供(一般字符设备都会实现相应的fops集),因此file_operations 也就成为了字符设备驱动的核心。

特点:

  • 一个字节一个字节读写的设备

  • 读取数据需要按照先后数据(顺序读取)

  • 每个字符设备在/dev目录下对应一个设备文件,linux用户程序通过设备文件(或称设备节点)来使用驱动程序操作字符设备。

  • 常见的字符设备有鼠标、键盘、串口、控制台等

上层应用如何调用底层驱动:

1)应用层的程序open(“/dev/xxx”,mode,flags)打开设备文件,进入内核中,即虚拟文件系统中。

2)VFS层的设备文件有对应的struct inode,其中包含该设备对应的设备号,设备类型,返回的设备的结构体。

3)在驱动层中,根据设备类型和设备号就可以找到对应的设备驱动的结构体,用i_cdev保存。该结构体中有很重要的一个操作函数接口file_operations。

4)在打开设备文件时,会分配一个struct file,将操作函数接口的地址保存在该结构体中。

5)VFS层 向应用层返回一个fd,fd是和struct file相对应,这样,应用层可以通过fd调用操作函数,即通过驱动层调用硬件设备。

2. 块设备

块设备以数据块的形式存放数据,如NAND Flash以页为单位存储数据,并采用mount方式挂载块设备。

块设备必须能够随机存取(random access),字符设备则没有这个要求。

块设备除了给内核提供和字符设备一样的接口外,还提供了专门面向块设备的接口,块设备的接口必须支持挂装文件系统,通过此接口,块设备能够容纳文件系统,因此应用程序一般通过文件系统来访问块设备上的内容,而不是直接和设备打交道。

对于块设备而言,上层ext2,jiffs2,fat等文件系统会 实现针对VFS的file_opertations成员函数,所以设备驱动层将看不到file_opeations的存在。磁盘文件系统和设备驱动会将对磁盘上文件的访问转换成对磁盘上柱面和扇区的访问。

特点:

  • 数据以固定长度进行传输,比如512K

  • 从设备的任意位置(可跳)读取,但实际上,块设备会读一定长度的内容,而只返回用户要求访问的内容,所以随机访问实际上还是读了全部内容。

  • 块设备包括硬盘、磁盘、U盘和SD卡等

  • 每个块设备在/dev目录下对应一个设备文件,linux用户程序可以通过设备文件(或称设备节点)来使用驱动程序操作块设备。

  • 块设备可以容纳文件系统,所以一般都通过文件系统来访问,而不是/dev设备节点。

3. 网络设备

虽然在Linux系统存在一句话叫一切皆文件,无论是各种文本文件还是具体的硬件设备(硬件由设备文件来实现相应)。但是网络设备在Linux内核中却是唯一不体现一切皆设备思想的驱动架构,因为网络设备使用套接字来实现网数据的接受和发送。

网络设备驱动不同于字符设备和块设备,不在/dev下以文件节点代表,而是通过单独的网络接口来代表。

特点:

  • 网络接口没有像字符设备和块设备一样的设备号和/dev设备节点,只有接口名,如eth0,eth1

  • 通过socket操作,而不是open read write

除了网络设备外,字符设备和块设备都是通过文件系统的系统调用接口open()、close()、write()、read()等函数既可以访问,应用程序可以通过打开设备文件(如UART0设备:/dev/ttyS0)来访问该设备。

linux三大驱动类型:字符设备、块设备、网络设备相关推荐

  1. Linux驱动开发--写一个块设备驱动

    原文地址:[原创] 写一个块设备驱动 http://bbs.chinaunix.net/forum.php?mod=viewthread&tid=2017377&fromuid=288 ...

  2. linux块设备驱动(一)——块设备概念介绍

    linux块设备驱动(一)--块设备概念介绍 本文来源于: 1. http://blog.csdn.net/jianchi88/article/details/7212370 2. http://bl ...

  3. linux 块设备驱动 (三)块设备驱动开发

    linux 块设备驱动 (三)块设备驱动开发 一: 块设备驱动注册与注销 块设备驱动中的第1个工作通常是注册它们自己到内核,完成这个任务的函数是 register_blkdev(),其原型为: int ...

  4. Linux驱动——mmc sd card 块设备读写流程(十三)

    Linux驱动--mmc sd card 块设备读写流程(十三) 备注:   1. Kernel版本:5.4   2. 使用工具:Source Insight 4.0   3. 参考博客:   (1) ...

  5. linux 块设备驱动(二)——块设备数据结构

    linux 块设备驱动(二)--块设备数据结构 本文来源于: 1. http://www.cnblogs.com/dyllove98/archive/2013/07/01/3165567.html 块 ...

  6. I/O输入输出——I/O设备(块设备与字符设备)

    无论是块设备还是字符设备,都是属于IO硬件,在整个硬件到软件层之前的了解,有助于我们理解. I/O设备 块设备 是一种具有一定结构的随机存取设备,对这种设备的读写是按块进行的,他使用缓冲区来存放暂时的 ...

  7. Linux块设备驱动(二)————块设备的体系架构

    块设备的体系架构从上到下依次为VFS虚拟文件系统.磁盘缓冲.各种类型的磁盘系统.通用块设备层.I/O调度层(优化访问上层的请求(读写请求)).块设备驱动层.块设备硬件层. 1.虚拟文件系统(VFS) ...

  8. linux PCI驱动调用字符设备驱动方式

    上一篇文章写了字符设备驱动的基本结构及访问方式,在实际应用时首先需要绑定自己的硬件设备.本篇主要描述字符设备驱动与PCI接口类型的设备访问方式(内核为2.6.24及以上的方法,测试内核为2.6.32) ...

  9. linux的驱动开发——字符设备驱动

    1.字符设备驱动 \qquad字符设备驱动是最基本,最常用的设备.它将千差万别的硬件设备采用统一的接口封装起来,屏蔽了硬件的差异,简化了应用层的操作. 2.描述所有字符设备的结构体 \qquad描述所 ...

最新文章

  1. 用shell脚本监控系统
  2. “传统”遥感遇上AI,会产生怎样的效果?
  3. Go udp 的高性能优化
  4. [转载]Scikit Learn: 在python中机器学习
  5. mysql数据库开发经历_六年开发经验,整理Mysql数据库技巧笔记,全网最详细的笔记集合!...
  6. [leetcode-347-Top K Frequent Elements]
  7. 英国首相用华为P20 Pro自拍引热议,网友:真香,比炸鱼和薯条还香
  8. python生成词云_词云制作没那么难,Python 10 行代码就实现了!
  9. android计算器编程思路,android计算器---思路以及计算器功能梳理(未完成)(示例代码)...
  10. GitHub下载加速
  11. PR转场预设 放大特效带有重影效果的PR视频转场预设
  12. tfs java_TFS (Team Foundation Server) 2013集成Maven构建
  13. JWT、OOS、Oauth三种登录验证机制
  14. 5G助推全球新经济变革,十万亿产业研讨盛会等你来
  15. OLED、QLED、miniled、microled的区别与优劣势是什么?(非商业转载)
  16. angular 自定义打包文件名
  17. 【单目标优化求解】基于matlab增强型黑猩猩优化器算法求解单目标优化问题【含Matlab源码 2013期】
  18. 用html+css做一个网页设计
  19. 我是如何降低项目的沟通成本?
  20. JAVA输出希腊union,希腊十大旅游胜地(上)

热门文章

  1. 为什么我们缺乏多样的人生态度
  2. 从digg在新媒体中的角色谈如何定义新媒体
  3. bzoj3155 Preprefix sum 线段树
  4. C/C++ 字符串转数字函数
  5. ue4 ChromiumUI插件与html网页的相互调用
  6. csv和excel php 解析_php读取csv文件(excel可另存为csv格式文件)
  7. 你真的理解【函数式编程】吗?
  8. 外汇天眼:经济衰退无阻加息,欧美货币政策齐收紧
  9. 软件测试人员到底需不需要通过培训来提升技术能力
  10. Python面试的100多题之61-90(详细版)