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

article/2025/11/10 1:17:46

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


http://chatgpt.dhexx.cn/article/ShfxC4wE.shtml

相关文章

Linux-设备驱动概述

文章目录 Linux设备驱动概述1. 设备驱动的作用2. 无操作系统的设备驱动3. 有操作系统时的设备驱动4. Linux设备驱动4.1 设备的分类及特点4.2 Linux设备驱动与整个软硬件系统的关系4.3 Linux设备驱动的重难点 5. 源代码阅读6. 设备驱动:LED驱动6.1 无操作系统的LED驱…

Linux设备驱动和设备匹配过程

Linux设备驱动和设备匹配过程 1. 设备驱动匹配简述2. 重点结构体介绍2.1 struct device2.2 struct platform_device2.3 struct platform_driver2.4 struct device_driver 3. device端发起匹配:3.1 流程图3.2 start_kernel时候解析设备树3.2.1 start_kernel3.2.2 set…

Linux设备驱动之字符设备驱动

一、linux系统将设备分为3类:字符设备、块设备、网络设备。 应用程序调用的流程框图: 三种设备的定义分别如下, 字符设备:只能一个字节一个字节的读写的设备,不能随机读取设备内存中的某一数据,读取数据需…

Linux设备驱动基础01:Linux设备驱动概述

目录 1. 设备驱动的作用 2. 有无操作系统时的设备驱动 2.1 无操作系统 2.1.1 硬件、驱动和应用程序的关系 2.1.2 单任务软件典型架构 2.2 有操作系统 2.2.1 硬件、驱动、操作系统和应用软件的关系 3. Linux设备分类 3.1 常规分类法 3.1.1 字符设备 3.1.2 块设备 3.…

Linux设备驱动模型

目录 一、linux设备驱动模型简介1、什么是设备驱动模型2、为什么需要设备驱动模型3、驱动开发的2个点 二、设备驱动模型的底层架构1、kobject2、kobj_type3、kset 三、总线式设备驱动组织方式1、总线2、设备3、驱动4、类5、总结 四、platform平台总线工作原理1、何为平台总线2、…

【linux内核分析与应用-陈莉君】字符设备驱动

目录 1.什么是字符设备 2.如何来描述字符设备 3 struct cdev与const struct file_operations之间的关系 4.struct file_operations源码 5.字符设备驱动框架 6.编写字符设备驱动的步骤 7.字符设备结构 8.字符设备驱动程序的注册 9.从系统调用到驱动程序 10.用户空间与内…

微信小程序云数据库使用讲解

第一步:注册开通 单击云开发 第二步:创建数据库 选择数据库,并点击号创建一个集合 输入名字 创建完毕后点击添加记录即可添加数据 数据库获取: 查询: 查询指令:

微信小程序云开发入门-数据库插入数据(包含批量)

一、前言 文章将介绍如何在微信小程序云开发中向云开发数据库插入数据(单条或批量)。 写法有好几种,文章将会一一进行对比,看看每种写法之间有何优缺点,如何让代码看起来更优雅。 为了更加贴合实际的开发逻辑&#xf…

【微信小程序】如何获取微信小程序云开发数据库的数据并渲染到页面?

前言 上一篇博客我把微信小程序云开发数据库操作(增删改查)的实现方法都已经分享出来啦,可以戳链接进去阅读哦 【微信小程序】小程序云开发实现数据库增删改查(小白速度Get起来!!一步步教你如何实现) 基于微信小程序…

开发一个可以查询并显示数据库内容的微信小程序

使用微信开发者工具可以创建云数据库,并通过代码可以查询并在客户端显示数据库的内容。 附:小程序一个功能页面有wxml(客户端呈现),js(功能函数),json,wxss(个性化处理),这些是局部的文件。还有全局的文件如…

微信小程序开发---连接云开发数据库,实现数据获取

之前几篇博客里面都详细交代了如何配置云函数,现在就讲一下关于云函数中数据库的使用,主要是讲如何从云开发平台的数据库中调取数据 我们直接来到需要调用数据库数据的页面的js文件,直接设置全局变量,来便于后续调用数据库 const …

微信小程序查询数据库

微信小程序云开发的官方例子: const db wx.cloud.database() //获取数据库的引用 const _ db.command //获取数据库查询及更新指令 db.collection("china") //获取集合china的引用.where({ //查询的条件指令wheregdp: _.gt(3000) …

微信小程序云数据库操作

微信小程序云数据库操作 1、云数据库简介1.1 数据类型Date地理位置Null 1.2 权限控制 2、云数据库操作2.1 查询数据2.1.1 通过collection.doc获取一条记录2.1.2 通过collection.get获取所有记录的数据2.1.3 通过document.get获取某一条记录的数据2.1.4 通过collection.count获取…

微信小程序取本地数据库数据(实测有图)

测试效果如下: 本实验主要分为如下几个步骤: 一、安装数据库 二、安装PHPApache 三、编辑微信小程序代码 前两项的简单介绍在如下连接: PHPApache 四、本文主要介绍第三项的内容 需要用到的文件如下: 1、新建微信小程序工程 2、…

微信小程序云开发(数据库)

开发者可以使用云开发开发微信小程序、小游戏,无需搭建服务器,即可使用云端能力。 云开发为开发者提供完整的云端支持,弱化后端和运维概念,无需搭建服务器,使用平台提供的 API 进行核心业务开发,即可实现快…

微信小程序云开发(云数据库篇)

微信小程序云开发[云数据库篇] 云数据库关系型数据库和 JSON 数据库对比数据类型数据库操作联表查询事务处理 云数据库 云开发提供了一个 JSON 数据库,顾名思义,数据库中的每条记录都是一个 JSON 格式的对象。 一个数据库可以有多个集合(相当…

微信小程序云开发 1 - 数据库

微信小程序云开发最重要的有两点: 1、云数据库; 2、云函数; 学会这两点基本就能够进行微信小程序的云开发; 首先,我们先看微信小程序云数据库的基本操作: 1)打开微 信开发者工具&#xff0…

微信小程序笔记 -- 数据库

6.15 学习微信小程序 -- 数据库 数据库1. 初始化2. 数据库操作2.1 数据类型2.2 增删查改2.2.1 增加/插入 数据(add方法)2.2.2 删除数据(remove方法)2.2.3 查看数据(get,where)2.2.4 更新数据&am…

nohup忽略SIGHUP信号

今天遇到一个问题:开启终端启动gunicorn进程后台运行,终端不关闭时,可以导入excel,关闭终端后,不能导入excel。原因是,xlrd模块需要向控制台输出内容,终端关闭后,控制台消失&#xf…

sighup问题

2019独角兽企业重金招聘Python工程师标准>>> SIGHUP会在以下3种情况下被发送给相应的进程: 1、终端关闭时,该信号被发送到session首进程以及作为job提交的进程(即用 & 符号提交的进程) 2、session首进程退出时&…