【驱动开发】设备分类、设备号申请和注销,注册和移除字符设备,以及一个基本的内核驱动程序框架代码

一、Linux内核对设备的分类

Linux的文件种类

序号符号类型文件内容文件名原信息
1-普通文件
2d目录文件
3p管道文件×
4s本地socket文件×
5l链接文件软链接有;硬链接相当于别名
6c字符设备×
7b块设备×

设备类型 

Linux内核按驱动程序实现模型框架的不同,将设备分为三类:

  1. 字符设备:按字节流形式进行数据读写的设备,一般情况下按顺序访问,数据量不大,一般不设缓存;

  2. 块设备:按整块进行数据读写的设备,最小的块大小为512字节(一个扇区),块的大小必须是扇区的整数倍,Linux系统的块大小一般为4096字节,随机访问,设缓存以提高效率,应用程序一般不直接使用块设备,而是在块设备上套一个文件系统;

  3. 网络设备:针对网络数据收发的设备,比如网卡,蓝牙等。

总体框架图: 

虚拟文件系统VFS提供一套函数:open、close、read、write等,应用程序通过调用这些函数操作字符设备和块设备,只是在虚拟文件系统VFS下面,字符设备和块设备的实现方式不一样。

针对网络设备,提供了一组套接字相关的接口,有些函数可以和VFS中的函数共用,但大部分不能共用,这些函数通过网络协议栈操控下面的网络接口设备。

二、设备号

什么是设备号

在内核中,通过设备号来识别各个设备,就和我们的身份证一样,一个设备号只能对应一个设备,但一个设备可以有多个设备号,相当于正常情况下,别人不会通过身份证号来叫某人,而是通过名字,甚至昵称等来称呼。

内核用设备号来区分同类里不同的设备,设备号是一个无符号32位整数,数据类型为dev_t,设备号分为两部分:

  1. 主设备号:占高12位,用来表示驱动程序相同的一类设备

  2. 次设备号:占低20位,用来表示被操作的哪个具体设备  

应用程序打开一个设备文件时,通过设备号来查找定位内核中管理的设备。  

 Linux系统中,dev目录下的文件都为设备文件,用ls -l可以看到主设备号(10),次设备号(235)

用宏来组合和分离主设备号和次设备号 

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

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

相关文章

黑马Java面试教程_P2_MySQL

系列博客目录 文章目录 系列博客目录前言1. 优化1.1 MySQL中,如何定位慢查询?面试文稿 1.2 面试官接着问:那这个SQL语句执行很慢,如何分析 ( 如何优化)呢?面试文稿 1.3 了解过索引吗?(什么是索引)1.4 继续问 索引的底层数据结构…

Learning Multi-Scale Photo Exposure Correction

Abstract 用错误的曝光捕捉照片仍然是相机成像的主要错误来源。曝光问题可分为以下两类:(i)曝光过度,即相机曝光时间过长,导致图像区域明亮和褪色;(ii)曝光不足,即曝光时间过短,导致图像区域变暗。曝光不足和曝光过度都会大大降低…

湖南引力:低代码助力实现智慧养老管理系统

“低代码开发宛如一座神奇的桥梁,它以简洁高效的方式连接起创意与应用,降低了开发门槛,为企业和开发者带来前所未有的便捷与可能,开启了快速实现软件梦想的新征程。” ——王港,湖南引力科技有限公司 湖南引力科技有…

uniapp中wx.getFuzzyLocation报错如何解决

一、用wx.getLocation接口审核不通过 用uniapp开发小程序时难免需要获取当前地理位置。 代码如下: uni.getLocation({type: wgs84,success: function (res) {console.log(当前位置的经度: res.longitude);console.log(当前位置的纬度: r…

【探花交友】day03—MongoDB基础

目录 课程介绍 1、通用设置 1.1 需求分析 1.2 查询通用设置 1.2 陌生人问题 1.3 通知设置 1.4 黑名单管理 2、MongoDB简介 1.1、MongoDB简介 1.2、MongoDB的特点 1.3 数据类型 3、MongoDB入门 2.1、数据库以及表的操作 2.2、新增数据 2.3、更新数据 2.4、删除数…

编程考古-传奇的开始Delphi(下)含所有版本.iso

概览 Delphi 的最新版本,即 Delphi 12,勾勒出了自公司创立以来的一条进化之路。该平台不断通过提升开发者生产力、扩展其支持的平台范围以及引入前沿技术来实现自我完善。作为 Embarcadero 提供的主要快速应用开发(RAD)环境&…

Debian安装配置RocketMQ

安装配置 本次安装在/tools/rocket目录下 下载 wget https://dist.apache.org/repos/dist/release/rocketmq/5.3.1/rocketmq-all-5.3.1-bin-release.zip 解压缩 unzip rocketmq-all-5.3.1-bin-release.zip 如果出现以下报错 -bash: unzip: command not found可安装unzip工具后执…

MyBatis知识点笔记

目录 mybatis mapper-locations的作用? mybatis configuration log-impl 作用? resultType和resultMap的区别? 参数 useGeneratedKeys ,keyColumn,keyProperty作用和用法 取值方式#和$区别 动态标签有哪些 MyBat…

20241218-信息安全理论与技术复习题

20241218-信息安全理论与技术复习题 一、习题1 信息安全的基本属性是(D )。 A、机密性 B、可用性 C、完整性 D、上面 3 项都是 “会话侦听和劫持技术” 是属于(B)的技术。 A、 密码分析还原 B、 协议漏洞渗透 C、 应用漏洞分析与渗透 D、 D…

顶顶通呼叫中心中间件的三种呼叫方式(mod_cti基于FreeSWITCH)

顶顶通呼叫中心共有三种呼叫方式: 手拨呼叫点击呼叫自动外呼 联系我们 有意向了解呼叫中心中间件的用户,可以点击该链接添加工作人员:https://blog.csdn.net/H4_9Y/article/details/136148229 手拨呼叫 手拨呼叫属于常规的呼叫方式&…

C 语言中 strlen 函数的深入剖析

目录 一、strlen 函数的基本介绍 二、strlen 函数的工作原理 三、strlen 函数的使用注意事项 四、strlen 与其他字符串处理函数的结合使用 五、strlen 在实际编程中的应用场景 六、总结 在 C 语言的编程世界里,strlen函数是一个经常被使用但又容易被误解的重要…

Redis 实战篇 ——《黑马点评》(上)

《引言》 在进行了前面关于 Redis 基础篇及其客户端的学习之后,开始着手进行实战篇的学习。因内容很多,所以将会分为【 上 中 下 】三篇记录学习的内容与在学习的过程中解决问题的方法。Redis 实战篇的内容我写的很详细,为了能写的更好也付出…

文档解析丨高效准确的PDF解析工具,赋能企业非结构化数据治理

在数据为王的时代浪潮中,企业数据治理已成为组织优化运营、提高竞争力的关键。随着数字化进程的加速,企业所积累的数据量呈爆炸式增长,数据类型也愈发多样化,这些数据构成了现代企业数据资产的重要组成部分。 然而,传…

支持最新 mysql9的workbench8.0.39 中文汉化教程来了

之前在 B 站上发布了 mysql8 workbench 汉化教程,一年多来帮助很多初学者解决了不熟悉英文的烦恼。 汉化视频可以访问: 2024最新版mysql8.0.39中文版mysql workbench汉化 中文升级 旧版汉化报错解决_哔哩哔哩_bilibili MySql Workbench汉化_哔哩哔哩_…

02-18.python入门基础一基础算法

(一)排序算法 简述: 在 Python 中,有多种常用的排序算法,下面为你详细介绍几种常见的排序算法及其原理、实现代码、时间复杂度以及稳定性等特点,并对比它们适用的场景。 冒泡排序(Bubble Sor…

机器学习详解(11):分类任务的模型评估标准

模型评估是利用不同的评估指标来了解机器学习模型的性能,以及其优势和劣势的过程。评估对于确保机器学习模型的可靠性、泛化能力以及在新数据上的准确预测能力至关重要。 文章目录 1 介绍2 评估准则3 分类指标3.1 准确率 (Accuracy)3.2 精确率 (Precision)3.3 召回率…

【Mac】终端改色-让用户名和主机名有颜色

效果图 配置zsh 1.打开终端,进入.zshrc配置 cd ~ vim .zshrc2.添加如下配置并保存 # 启用命令行颜色显示 export CLICOLOR1 ## 加载颜色支持 autoload -U colors && colors # 配置 zsh 提示符 PROMPT"%{$fg_bold[red]%}%n%{$reset_color%}%{$fg_bol…

【Artificial Intelligence篇】智行未来:AI 在日常出行领域的崛起征程

目录 ​编辑 一、引言: 二、AI 在日常出行中的关键技术应用: 2.1自动驾驶技术: 2.2智能交通管理: 2.3出行辅助系统: 三、AI 在日常出行领域的发展现状: 四、AI 在日常出行领域的未来前景&#xff…

指针之矢:C 语言内存幽境的精准飞梭

一、内存和编码 指针理解的2个要点: 指针是内存中一个最小单元的编号,也就是地址平时口语中说的指针,通常指的是指针变量,是用来存放内存地址的变量 总结:指针就是地址,口语中说的指针通常指的是指针变量。…

springboot478基于vue全家桶的pc端仿淘宝系统(论文+源码)_kaic

摘 要 随着我国经济的高速发展与人们生活水平的日益提高,人们对生活质量的追求也多种多样。尤其在人们生活节奏不断加快的当下,人们更趋向于足不出户解决生活上的问题,网上购物系统展现了其蓬勃生命力和广阔的前景。与此同时,为解…