【Linux学习笔记】设备驱动模型详解——总线、设备、驱动和类

news2024/11/25 1:38:15

学习内容

设备驱动模型视频讲解

简介

设备驱动是计算机系统中的重要组成部分,它们允许操作系统与硬件交互。设备驱动模型是一种通用的抽象框架,用于描述操作系统如何管理硬件设备。这里我们将介绍设备驱动模型中的四个关键概念:总线、设备、驱动和类。

总线

在计算机系统中,总线是指多个设备之间传输数据的路径。总线通常由硬件实现,透明地向上层软件提供数据传输服务。在驱动程序中,总线是一个重要的概念,因为它是硬件设备和操作系统之间通信的中介。
在 Linux 系统中,每个总线都对应一个总线类型,比如 PCI 总线、USB 总线等。总线类型有关的信息存储在系统中的总线类型信息结构体中,可以通过/sys/bus目录下的文件和驱动程序中的函数访问。

设备

设备是硬件设备的抽象表示。每个设备都有一个设备名称和一组功能。设备名称是设备驱动程序通过与硬件交互获得的,而设备功能是设备驱动程序需要使用的,是由操作系统指定的。
在 Linux 系统中,每个设备都由一个设备树形结构来描述,设备树中的节点包括设备的名称、类型、物理地址等信息。设备驱动程序可以使用/sys/devices目录下的文件和函数来访问设备树。

驱动

驱动程序是操作系统中连接设备和应用程序的接口。驱动程序必须实现设备与总线之间的交互,并向上层应用程序提供统一的接口。驱动程序也需要实现各种各样的设备特定的功能和命令,以便应用程序可以直接与设备进行交互。
在 Linux 系统中,驱动程序是内核模块,可以通过lsmod命令查看已加载的驱动程序。驱动程序需要实现驱动程序接口,这些接口是标准的Linux系统接口,实现了一组通用的设备驱动程序函数。

类是一组相似设备的集合,它们可以由同一种驱动程序来管理。在 Linux 系统中,每个设备都属于一个类。类具有标准属性和方法,可以用来管理同类设备的驱动程序行为。
在 Linux 系统中,类通常对应着一个驱动程序模板,即每个类都有一组设备属性和方法。设备驱动程序可以通过/sys/class目录下的文件和函数来访问类。类提供了一种更高层次的硬件抽象,使驱动程序编写变得更加方便和模块化。

分类

在 Linux 中,设备驱动程序可以使用两种模型之一来表示设备:字符设备模型和块设备模型。这些驱动程序实现了与物理设备通信并处理所有的设备 I/O。

设备驱动模型旨在提供一个通用的设备驱动架构,使开发人员能够编写可重用的设备驱动程序。该模型将不同类型的设备驱动程序分为三类:字符设备驱动程序、块设备驱动程序和网络设备驱动程序。

以下是每个分类的详细信息:

字符设备驱动程序

字符设备驱动程序通过专用的字符设备文件(例如/dev/ttyS0)向用户空间公开一个设备,这些设备用于处理流式数据,例如串行端口、键盘和鼠标等。设备文件将相应的读/写系统调用转换为驱动程序中实现的读/写函数调用,从而实现设备 I/O。字符设备驱动程序通常采用基于中断的 I/O 模型,这意味着当 I/O 操作在设备上完成时,驱动程序会收到中断。

块设备驱动程序

块设备驱动程序通过块设备文件(例如/dev/sdb)向用户空间公开一个设备,这些设备用于处理块数据,例如硬盘上的文件系统。块设备驱动程序的 I/O 模型通常是基于队列的,这意味着当用户空间请求 I/O 操作时,驱动程序会将操作添加到队列中,并在设备就绪时依次扫描队列并完成操作。

网络设备驱动程序

网络设备驱动程序向用户空间公开网络接口,以便在网络上传输数据。这些驱动程序处理包的收发,以及其他与网络通信相关的操作,例如设置网络接口的 IP 地址等。

在 Linux 中,设备驱动程序使用模块添加到内核。设备驱动程序通常由硬件供应商或开发者编写,并由 Linux 社区维护和合并到内核中。Linux

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

GitLab+Drone CI持续集成自动部署web项目

一、环境介绍 1.gitlab服务器 172.16.11.1 搭建参考:Gitlab教程 2.Drone服务器 172.16.11.2 搭建参考: 基于gitlab搭建Drone CI 3.web服务器 172.16.11.3 已配置好nginx相关web服务,这里nginx配置的web目录为/www/test 还有生成ssh key密钥即可&am…

编程的未来

从 ChatGPT 诞生至今,在程序员的圈子里,我们一直有两种讨论: 最开始所恐慌的:编程没有未来,ChatGPT 是不是要取代程序员。编程的方式前所未有地发生了变化。 现如今,GitHub Copilot Chat 可以让开发者们直…

算法修炼之练气篇——练气十八层

博主:命运之光 专栏:算法修炼之练气篇 前言:每天练习五道题,炼气篇大概会练习200道题左右,题目有C语言网上的题,也有洛谷上面的题,题目简单适合新手入门。(代码都是命运之光自己写的…

支付系统设计三:渠道网关设计02-客户端报文解析

文章目录 前言一、后台配置管理1.1 渠道配置1.1.1 渠道基本信息新增1.1.2 渠道交易类型配置1.1.3 渠道商户信息配置1.1.4 账户配置1.1.5 交易类型机构配置 1.2 渠道通讯配置1.2.1 内部渠道通讯1.2.1 外部渠道通讯 1.3 资源配置1.4 证书管理1.5 路由配置 二、运行时逻辑处理1. 控…

Fluent的视角设置

1 背景 针对不同设计方案在同一工况下的差异点进行细节分析,其中一个很重要的要求就是需要在同一视角下比较不同设计方案的差异性。设置视角并进行快速重用是很重要的提高仿真效率的方法。 2 视角设置 视角设置有2类方法:手动拖拉和定量指定。 手动拖拉即…

一图看懂 tomli 模块:一个 TOML解析器、使用 mformat -toc 生成的目录,资料整理+笔记(大全)

本文由 大侠(AhcaoZhu)原创,转载请声明。 链接: https://blog.csdn.net/Ahcao2008 一图看懂 tomli 模块:一个 TOML解析器、使用 mformat -toc 生成的目录,资料整理笔记(大全) 🧊摘要🧊模块图&am…

前端开发中,定位bug的几种常用方法

目录 第一章 前言 第二章 解决bug的方法 2.1 百度 2.2 有道翻译 2.3 debugger 2.4 console.log 日志打印 2.5 请求体是否携带参数 2.6 注释页面渲染代码 2.7 其他 第三章 尾声 备注:该文章只是本人在工作/学习中常用的几种方法,如果有不对大家…

智慧园区移动应用发展面临瓶颈,如何解决?

智慧园区移动应用将在多元化服务、生态建设、智能化管理和跨界融合等方面发展,成为园区管理和服务的重要手段之一,为员工和企业提供更加智能化和便捷化的管理和服务。伴随着智慧城市的建设和智慧园区的崛起,智慧园区数字一体化建设成为园区发…

docker搭建nginx负载均衡

一点小背景 docker起了几个服务,没有配置端口映射,导致不能通过网络访问。当然,更简单的方式是加端口映射,笔者的情况更复杂一些,就想到了用nginx映射一下。 Nginx(发音同“engine X”)是异步框…

避免“文献综抄”,5种写作结构助你完成文献综述→

很多作者可能有过这样的体验:读了很多文献,但在写综述的时候总感觉不像是在写文献综述,更像在写文献总结 如果引用方面不注意,甚至会成为文献综抄。 那么,你可以参考下我们整理的以下资料哦~ 01 文献总结和文献综述的…

DCDC反馈电阻的阻值如何取值?

DCDC芯片的反馈电阻 下图为我们公司现在常用的两款DCDC芯片,TPS54335ADDA/TI和LMR14050SDDA/TI。 其中RFBT和RFBB都是反馈电阻,可以通过调节这两个电阻的比值来输出 预期电压。 FBT:feedback top&a…

保姆级丨XAMPP安装使用

0x00 前言 XAMPP 是一个完全免费,易于安装的 Apache 发行版,包含 MariaDB , PHP 和 Perl 。 XAMPP 开源软件包已经设置为非常容易安装和使用。 0x01 环境说明 Windows 11xampp-windows-x64-8.2.4-0-VS16-installer 0x02 准备工作 首先要访问…

数据库分区;pgAdmin操作pgsql分区;修改pgsql数据库名字

目录 分区 什么是分区 分区的优势 pgAdmin操作pgsql分区 创建父表 创建分区 数据入库分区 扩展(按天创建分区脚本) 修改数据库名字 链接 分区 什么是分区 指将一个大的表或索引分成多个小的、独立的部分,每个部分称为一个分区&#x…

带你了解家居智能的心脏:物联网关

本文将介绍家庭物联网关的相关内容,将明白物联网关在家庭这个场景当中的应用。现在市面上各种各样的智能家居的家电或者其他设备非常多,那么这就需要一个智能的设备去对所有的家电进行管控。这样一个设备就是家庭智能网关,家庭物联网关是家居…

Py之onnx:onnx/onnxruntime库的简介、安装、使用方法之详细攻略

Py之onnx:onnx/onnxruntime库的简介、安装、使用方法之详细攻略 目录 onnx/onnxruntime库的简介 onnx/onnxruntime库的安装 onnx/onnxruntime库的使用方法 1、基础用法 onnx/onnxruntime库的简介 Open Neural Network Exchange(ONNX)是一…

Python每日一练(20230513) 粉刷房子 I\II\III Paint House

目录 1. 粉刷房子 Paint House 2. 粉刷房子 II Paint House-ii 3. 粉刷房子 III Paint House-iii 🌟 每日一练刷题专栏 🌟 Golang每日一练 专栏 Python每日一练 专栏 C/C每日一练 专栏 Java每日一练 专栏 leetcode题号分别为: 256、2…

32 位 ARM® Cortex®-M0+ 单片机,PY32F002B 系列微控制器

PY32F002B 系列微控制器采用高性能的 32 位 ARM Cortex-M0内核,宽电压工作范围的 MCU。嵌入24Kbytes Flash 和 3Kbytes SRAM 存储器,最高工作频率 24MHz。包含多种不同封装类型多款产品。 芯片集成I2C、SPI、USART 等通讯外设,1 路 12bit ADC…

UNIAPP实战项目笔记70 购物车删除商品的前后端交互

UNIAPP实战项目笔记70 购物车删除商品的前后端交互 思路 需要用到vuex 传id值到后端,删除指定id购物车数据 案例截图 购物车商品编辑页面 代码 后端代码 index.js var express require(express); var router express.Router(); var connection require(../db/sql.js); va…

6.Go语言学习笔记-结合chatGPT辅助学习Go语言底层原理

1、Go版本 go1.14.15 2、汇编基础 推荐阅读:GO汇编语言简介 推荐阅读:A Quick Guide to Gos Assembler - The Go Programming Language 精简指令集 数据传输: MOV/LEA 跳转指令: CMP/TEST/JMP/JCC 栈指令: PUSH/POP 函数调用指令: CALL/RET 算术指令: ADD/SUB/MUL/DIV …

PFCdocumentation_FISH Rules and Usage

目录 FISH Scripting FISH Rules and Usage Lines Data Types Reserved Names for Functions and Variables Scope of Variables Functions: Structure, Evaluation, and Calling Scheme Arithmetic: Expressions and Type Conversions Redefining FISH Functions Ex…