【Linux驱动】认识驱动(驱动的概念、驱动分类)

         目录

1、什么是驱动?

2、应用程序调用驱动基本流程

3、file_operations 结构体

4、驱动的分类


1、什么是驱动?

驱动就是一段程序,能够获取外设或者传感器数据、控制外设。驱动获取到的数据会提交给应用程序。

在 Linux 中一切皆为文件,驱动加载成功以后会在“/dev”目录下生成一个相应的文件,应用程序通过对这个名为“ /dev/xxx ”的文件进行相应的操作即可实现对硬件的操作。比如 /dev/ttyS2 表示串口设备,应用程序可以调用 read 函数从设备中读取数据,可以调用write函数向设备写入数据。

表面上是应用程序在操作设备,实际上这个过程中有驱动的参与。

2、应用程序调用驱动基本流程

应用程序运行在用户空间,而驱动是被加载到内核的,运行在内核空间,正常情况下,应用程序无法直接访问内核,内核给用户层提供了API接口来访问内核。这些API接口我们称为“ 系统调用 ”。

应用程序调用驱动的基本流程如下。我们会发现应用程序调用 open 函数以后,先进入到内核,然后会调用内核中的 open 函数,这里的 open 函数才是真正操作硬件的执行人。因此,编写驱动实际就是在完善内核中的 open、close、read等函数

上层应用层的每一个系统调用函数,在内核都会有与之对应的函数。

应用层内核
open open
readread
closerelease

3、file_operations 结构体

问:上面说到,编写驱动其实就是在完善内核中的 open、close、read等函数,那么这些函数是自己设计还是有现成的呢?

答:

        前人已经设计出了一套完整的框架,这个框架已经包含了我们所需的大部分函数声明,所以无需我们自己设计,我们只要继续沿用前人的声明即可。

内核源码中有个 include/linux/fs.h 文件,这个文件定义了一个 file_operations 结构体,该结构体中就包含了今后要实现的函数声明。

4、驱动的分类

设备不同,实际操作的方式也会不同,因此根据设备的种类,驱动可以大致分为三类:

字符型设备驱动

        只能一个字节一个字节读写的设备,不能随机读取设备内存中的某一数据,读取数据需要按照先后顺序。常见的字符设备有鼠标、键盘、串口、控制台和LED设备。

块设备驱动

        可以从设备的任意位置读取一定长度数据的设备。块设备包括硬盘、磁盘、U盘和SD卡等存储类设备。

网络设备驱动

        负责读写来自网络的数据。常见的网络设备有网卡(有线、无线)。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/25423.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

物联网GPRS模块流量计算

物联网GPRS模块流量计算 MQTT(消息队列遥测传输) 是ISO 标准下一个基于TCP/IP的消息发布/订阅传输协议。 一、TCP消耗流量计算 以太网数据包结构: 以太网首部 IP首部 TCP首部 APPL首部 用户数据 以太网尾部 以太网首部为14个字节 IP首部为20个字节 TCP首部…

【CesiumJS入门】(1)创建Viewer及相关配置项

前言 在上一篇博客中,我们直接在vue组件完成初始渲染并创建 DOM 节点后通过 const map new Cesium.Viewer(cesiumContainer)构建了一个地球场景。 而本篇,我们将会专门把地球创建的方法写在一个js文件中,以便后续的调用。 同时&#xff0…

【JavaSE】Java基础语法(三十二):Stream流

文章目录 1. 体验Stream流2. Stream流的常见生成方式3. Stream流中间操作方法【应用】4. Stream流终结操作方法【应用】5. Stream流的收集操作 1. 体验Stream流 案例需求 按照下面的要求完成集合的创建和遍历 创建一个集合,存储多个字符串元素把集合中所有以"…

torch_scatter.scatter()的使用方法

学习目标: 在学习PyG时,遇到了 scatter 这个函数,经过学习加上自身的理解,记录如下以备复习 学习内容: src:表示输入的tensor,接下来被处理;index:表示tensor对应的索引…

机器学习 day14 ( 神经网络 )

神经网络的发展 最开始的动机:是通过构建软件来模拟大脑,但今天的神经网络几乎与大脑的学习方式无关 我们依据大脑中的神经网络,来构建人工神经网络模型。左图中:一个神经元可以看作一个处理单元,它有很多的输入/树突…

chatgpt赋能python:Python创建一个Animal类介绍

Python创建一个Animal类介绍 Python是一种高级编程语言,其简单易学、灵活性强、可读性高以及强大的库使得Python非常受欢迎。在Python中创建类非常容易且非常常见,我们可以使用Python创建各种类型的类。今天,我们将讨论如何使用Python创建一…

【时空权衡】

目录 知识框架No.0 时空权衡一、基本思想 No.1 计数排序一、比较计数二、分布计数 No.2 散列法一、开散列(分离链)二、闭散列(开式寻址) 知识框架 No.0 时空权衡 一、基本思想 其实时空权衡:是指在算法的设计中&…

进程信号(Linux)

进程信号 信号入门身边的信号进程信号 产生信号终端按键产生信号调用系统函数向目标进程发信号killraiseabort 硬件异常产生信号由软件条件产生信号 阻塞信号信号其他相关常见概念在内核中的表示sigset_t信号集操作函数sigprocmasksigpending 捕捉信号内核如何实现信号的捕捉si…

分布式简要说明

1.分布式简要说明 《分布式系统原理与范型》定义: 分布式系统是若干独立计算机的集合,这些计算机对于用户来说就像单个相关系统。 分布式系统 (distributed system) 是建立在网络之上的软件系统。 随着互联网的发展,网站应用的规模不断扩…

SAP-QM-物料主数据-质量管理视图字段解析

过账到质检库存:要勾选,否则收货后库存不进入质检库存HU检验:收货到启用HU管理的库位时产生检验批,例如某个成品物料是收货到C002库位,该库位启用了HU管理,那么此处要勾选。但是如果勾选了,却收…

04.hadoop上课笔记之java编程和hbase

1.win查看服务 netstat -an #linux也有#R数学建模语言 SCALAR 2.java连接注意事项,代码要设置用户 System.setProperty("HADOOP_USER_NAME", "hadoop");3.伪分布式的好处(不用管分布式细节,直接连接一台机器…,适合用于学习) 4.官方文档 查看类(static |…

Python期末复习题库(下)——“Python”

小雅兰期末加油冲冲冲!!! 1. (单选题)下列关于文件打开模式的说法,错误的是( C )。 A. r代表以只读方式打开文件 B. w代表以只写方式打开文件 C. a代表以二进制形式打开文件 D. 模式中使用时,文件可读可写 2. (单选题)下列选项中,以追加…

webpack的使用

一、什么是webpack? webpack是一个前端构建工具,目前比较主流的构建工具,自定义的模块比较多。 二、应用场景 vue、react、angular 都可以通过webpack构建全部可供访问的页面数量不超过500个 三、安装 通过npm方式在项目根目录下执行命令…

htmlCSS-----CSS选择器(下)

目录 前言: 2.高级选择器 (1)子代选择器 (2)伪类选择器 (3)后代选择器 (4)兄弟选择器 相邻兄弟选择器 通用兄弟选择器 (5)并集选择器 &am…

【JavaSE】Java基础语法(二十六):Collection集合

文章目录 1. 数组和集合的区别2. 集合类体系结构3. Collection 集合概述和使用【应用】4. Collection集合的遍历【应用】5. 增强for循环【应用】 1. 数组和集合的区别 相同点 都是容器,可以存储多个数据不同点 数组的长度是不可变的,集合的长度是可变的 数组可以存基本数据类型…

基于Yarn搭建Flink

基于Yarn搭建Flink 1. 概述 1.1 Yarn 简介 Apache Hadoop YARN是一个资源提供程序,受到许多数据处理框架的欢迎。Flink服务被提交给 YARN 的 ResourceManager,后者再由 YARN NodeManager 管理的机器上生成容器。Flink 将其 JobManager 和 TaskManager…

python爬虫笔记

Python爬虫笔记 一. Urllib 1. 基础请求 指定url请求返回值解码返回结果的一些操作 import urllib.request as req # 定义一个url url http://www.baidu.com# 发送请求获得相应 res req.urlopen(url)# read返回字节形式的二进制数据,需要用指定编码来解码 content res.r…

vue的虚拟DOM

vue的虚拟DOM 什么是虚拟DOM 虚拟DOM提供了一个与平台无关的抽象层,将应用程序的界面表示抽象为一个虚拟的DOM树。这意味着开发人员可以使用相同的代码和逻辑来描述应用程序的用户界面,而不需要关心具体的平台实现细节。虚拟DOM允许开发人员使用一种统…

Linux命令

准备工作 安装centos7 在镜像网下载DVD.iso或者DVD.torrent(bit种子)。在VMware中配置相应的信息,并引入iso文件,以便后续安装。local中:选择语言和时区上海software中:选择安装软件的内容,可…

基于多动作深度强化学习的柔性车间调度研究(Python代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…