【Linux设备驱动】设备驱动分类

Linux设备驱动分类

驱动分为有操作系统设备驱动和误操作系统的设备驱动。

有无操作系统设备驱动

无操作系统设备驱动

不是所有的计算机系统都一定要有操作系统,在许多情况下,操作系统都是不必存在的。对于功能比较单一、控制不复杂的系统,如ASIC,公交卡刷卡机、洗衣机、电话,并不需要多任务调度、文件系统、内存管理等复杂功能,用单任务架构完全可以良好支撑它们的工作。

一个无限循环中夹杂着对设备中断的检测或者对设备的轮询,是该类驱动的典型架构。

——《Linux设备驱动开发详解 宋宝华》第一章 p5

原书该章节有对此类驱动框架有举例。

有操作系统的设备驱动

在有操作系统的系统里,设备驱动在无操作系统时的硬件操作工作必不可少,与此同时还需要将驱动融入到内核中,为了融入内核,必须在所有设备驱动中设计面向操作系统内核接口,这样的接口由操作系统决定。

由此可见,设备驱动变成了连接硬件和内核的桥梁。操作系统的存在势必要求设备驱动附加更多的代码和功能,把单一的“硬件设备行动”变成了操作系统内和硬件交互的模块,对外呈现为操作系统API,不再给应用工程师直接接口。

内核的可并发,内存管理使得设备驱动可以完成更加复杂、多样性的任务。操作系统带给设备驱动的麻烦,将使得上层应用更加便捷的调用底层——当驱动都按照操作系统给出的独立于设备的接口而设计,应用程序将可使用统一的系统调用接口来访问各种设备。对于类Unix的Linux,应用程序通过read()、write()等函数读写文件就可以访问各种字符设备和块设备。

Linux设备驱动

驱动主要分为以下三类:

  • 字符设备驱动
  • 块设备驱动
  • 网络驱动

1.字符设备驱动

字符设备指那些必须以串行顺序依次进行访问的设备。它们是我们日常最常见的驱动了,像鼠标、键盘、打印机、触摸屏,还有点灯以及I2C、SPI、音视频都属于字符设备驱动。

字符设备不经过系统快速缓冲。

2.块设备驱动

就是存储器设备的驱动,比如 EMMCNANDSD 卡U 盘等存储设备,因为这些存储设备的特点是以存储块为基础,可以用任意顺序进行访问,以块为单位进行操作,因此叫做块设备。

块设备经过设备缓冲

3.网络设备驱动

就是网络驱动,不管是有线的还是无线的,都属于网络设备驱动的范畴。

网络设备面向数据包的接受和发送而设计,它并不对应文件系统的节点

注意:
块设备和网络设备驱动要比字符设备驱动复杂,就是因为其复杂所以半导体厂商一般都给我们编写好了,大多数情况下都是直接可以使用的。

一个设备可以属于多种设备驱动类型,比如USB WIFI,其使用 USB 接口,所以属于字符设备,但是其又能上网,所以也属于网络设备驱动。

Linux设备驱动与整个软硬件系统的关系

如下图,除网络设备外,字符设备和块设备都被映射到Linux文件系统的文件和目录。通过高文件系统的系统调用接口open()write()read()close()等即可访问字符设备和块设备。所有的字符设备和块设备都被统一的呈现给用户。

image-20220815170002154

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Van.Ghylivan

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值