linux驱动学习(七)之混杂设备
需要板子一起学习的可以这里购买(含资料):点击跳转
一、混杂设备
混杂设备也叫杂项设备,是对普通的字符设备(struct cdev)的一种封装,设计目的就是为了简化字符设备驱动设计的流程。具有以下特点:
1) 主设备号为10,次备号不同。
2) 大大简化cdev的设计流程。
3) 混杂设备与普通的字符设备在使用上并没有区别。
二、查看系统的混杂设备
[root@GEC6818 /proc]#cat devices ----> 查看设备
Character devices: --->字符设备1 mem5 /dev/tty5 /dev/console5 /dev/ptmx5 ttyprintk10 misc ----->数字为主设备号,字符串为设备名字:混杂设备13 input14 sound21 sg29 fb81 video4linux86 ch89 i2c108 ppp116 alsa128 ptm136 pts153 spi
Block devices: --->块设备259 blkext7 loop8 sd11 sr65 sd66 sd67 sd68 sd69 sd70 sd71 sd[root@GEC6818 /proc]#cat misc --->查看系统的混杂设备42 network_throughput43 memory_throughput44 network_latency45 cpu_dma_latency46 xt_qtaguid47 alarm48 log_system49 log_radio50 log_events51 log_main52 ashmem53 binder54 uhid236 device-mapper130 watchdog55 hdmi-cec56 nxp-scaler223 uinput57 keychord[root@GEC6818 /dev]#ls -lcrw-rw---- 1 root root 10, 50 Jan 1 1970 log_eventscrw-rw---- 1 root root 10, 51 Jan 1 1970 log_maincrw-rw---- 1 root root 10, 49 Jan 1 1970 log_radiocrw-rw---- 1 root root 10, 48 Jan 1 1970 log_systemcrw-rw---- 1 root root 10, 237 Jan 1 1970 loop-control
//主设备号为10则表示为混杂设备,依据次设备号来区分各个设备,各个设备并没有直接联系
三、混杂设备的驱动设计流程
1、普通字符设备驱动流程
驱动程序的设计框架:三个阶段
创建一个字符设备 --- struct cdev
创建一个文件操作集
申请设备号
字始化设备
设置加入到内核
------------------------------
创建一个class
创建一个device ----->得到该设备的文件 ---->该文件提供给应用层来访问
--------------------------
申请物理内存区 ---- request_mem_region
ioremap ----> 得到物理设备基址的虚拟的起始地址
得到相应物理地址的虚拟地址,并来访问硬件
2、混杂设备驱动设计流程(struct miscdevice)
1) 定义一个混杂设备
#include <linux/miscdevice.h>
static struct miscdevice led_misc = {.name = "gec6818_led_drv", //设备文件的名字.fops = &gec6818led_fops, //文件操作集.minor = MISC_DYNAMIC_MINOR, // 设置次设备号,MISC_DYNAMIC_MINOR --- 表示由系统动态分配一个次设备号
};
2) 定义一个文件操作集
static const struct file_operations gec6818led_fops = {.owner = THIS_MODULE,.unlocked_ioctl = gec6818_led_ioctl,.open = gec6818_led_open,.release = gec6818_led_release,
};
3) 注册混杂设备到内核中
int misc_register(struct miscdevice * misc)
参数说明:struct miscdevice * ----> 混杂设备对象返回值:成功:0失败:负数
4)从内核中注销混杂设备
int misc_deregister(struct miscdevice *misc)
觉得有帮助的话,打赏一下呗。。

相关文章:
linux驱动学习(七)之混杂设备
需要板子一起学习的可以这里购买(含资料):点击跳转 一、混杂设备 混杂设备也叫杂项设备,是对普通的字符设备(struct cdev)的一种封装,设计目的就是为了简化字符设备驱动设计的流程。具有以下特点: 1) 主设备号为10&a…...
【数据结构与算法 | 堆篇】力扣215, 703
1. 力扣215 : 数组中的第k个最大元素 (1). 题 给定整数数组 nums 和整数 k,请返回数组中第 k 个最大的元素。 请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。 你必须设计并实现时间复杂度为 O(n) 的算法解…...
项目经理进入职场都会经历的三个阶段
对于项目经理而言,进入职场是一个不断学习和成长的过程。在这个过程中,项目经理通常会经历三个主要阶段,每个阶段都有其独特的特点和挑战。 一、基础建设与学习阶段 对于新入行的项目经理来说,最初的阶段主要是基础技能的积累和…...
消防设施工程乙级资质全解析:申请条件与流程“
消防设施工程乙级资质全解析:申请条件与流程 消防设施工程乙级资质,作为衡量企业从事特定规模消防设施设计能力的重要标尺,对于想要在消防工程领域拓展业务的企业而言至关重要。本文将全面解析申请消防设施工程乙级资质所需的条件、流程及相…...
【C语言】03.分支结构
本文用以介绍分支结构,主要的实现方式为if语句和switch语句。 一、if语句 1.1 if语句 if (表达式)语句表达式为真则执行语句,为假就不执行。在C语言中,0表示假,非0表示真.下图表示if的执行过程: 1.2 else语句 当…...
uniapp手机屏幕左滑返回上一页支持APP,H5
核心:touchstart"touchStart" touchend"touchEnd" 代码示例: <template><view class"payPasswordSetting" touchstart"touchStart" touchend"touchEnd"></view> </template&g…...
【Java毕业设计】基于JavaWeb的洗衣店管理系统
文章目录 摘要ABSTRACT目 录1 概述1.1 研究背景及意义1.2 国内外研究现状1.3 拟研究内容1.4 系统开发技术1.4.1 SpringBoot框架1.4.2 MySQL数据库1.4.3 MVC模式 2 系统需求分析2.1 可行性分析2.2 功能需求分析 3 系统设计3.1 功能模块设计3.2 系统流程设计3.3 数据库设计3.3.1 …...
使用sqlldr向oracle导入大量数据
(1)在Oracle主机安装oracle客户端 sqlldr,在命令行输入sqlldr,若有help指导即已经安装了; (2)创建一个xxx.ctl文件 这个文件是执行导入数据的语句,其中包含需要导入的数据&#x…...
Milvus LIKE操作符
在Milvus中,虽然LIKE操作符被用于模糊匹配字符串,但其支持的模式匹配能力有限。根据你收到的错误信息,Milvus目前只支持两种类型的LIKE模式匹配: 前缀匹配,例如LIKE ab%,这意味着任何以ab开头的字符串都会…...
iQOO neo 5精简内置组件
无他!系统自带了太多组件,都用不到,连打开都不曾打开过。 下午整理一篇精简组件的列表,各自按照各自的需要进行精简哦。别盲目跟风,要不然手机使用会出问题。 精简步骤 使用任意刷机工具,开启手机的开发权限,然后adb连接 删除组件列表如下: pm uninstall --user 0…...
为什么给网站安装SSL证书之后还是有被提示不安全?
分为两种情况一种是安装了付费证书之后还是显示无效,另一种是安装了免费SSL证书的。 付费SSL证书:直接找厂商帮助解决遇到的问题,一般都是有专业的客服来对接这些的。 免费SSL证书:出现这种情况的原因会有很多。因为免费SSL证书的…...
创建Frame单例,实现WPF页面跳转
需求: 有一个F0View主页面入口,三个子页面(First.xaml/Second.xaml/Third.xaml)用Frame默认加载第一个页面 First.xaml。实现三个页面之间顺序跳转,并且每个页面只初始化一次。 实现: 1,将三…...
正宇软件助力江西数字人大建设,高效解决群众“急难愁盼”问题
近日,赣州市南康区群众通过“江西数字人大”小程序成功解决道路塌陷等民生问题,引发社会广泛关注。这一成功案例不仅彰显了“数字人大”在解决群众“急难愁盼”问题中的重要作用,也凸显了江西地区近年来在数字化人大建设方面的显著成效。正宇…...
打造AIPC轻量化方案 360AI浏览器及360AI搜索全新发布
“搜索这20多年来没有发生变化,我们希望这次能来一场革命。”6月6日,360AI新品发布会暨开发者沟通会在京举办。会上,三六零(股票代码:601360.SH,以下简称360)集团发布全新360AI搜索及360AI浏览器…...
《effective c++》学习笔记
从今天开始看《effective c》这本书,把学到的东西当做笔记记下来,算是督促自己学习吧,也算是和大家一起分享一点东西,理解不当的地方,请谅解。(每天更新三个条款)。 一:让自己习惯C…...
11.盛水最多的容器
给定一个长度为 n 的整数数组 height 。有 n 条垂线,第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。 找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。 返回容器可以储存的最大水量。 说明:你不能倾斜容器。 示例 1&a…...
通过在idea上搭建虚拟hadoop环境使用MapReduce做词频去重
idea上的MapReduce 一般在开发中,若是等到环境搭配好了再进行测试或者统计数据,数据处理等操作,那会很耽误时间,所以一般都是2头跑,1波人去在客户机上搭建环境,1波人通过在idea上搭建虚拟hadoop环境&am…...
AI技术变革与企业服务创新
1、AI的技术变革 1)AI市场规模 2)AI大模型发展历程 3)AIGC发展背景 4)AIGC技术能力 AIGC的技术架构逻辑上分为基础层、技术层、能力层、应用层、终端层五大板块,其中核心技术层涵盖AI技术群和大模型的融合创新&#…...
探秘Facebook:社交媒体的未来之路
Facebook,作为全球最大的社交媒体平台之一,一直处于数字社交革命的前沿。然而,随着科技和社会的不断发展,Facebook正面临着新的挑战和机遇。本文将探索Facebook的未来之路,揭示社交媒体的新趋势和发展方向。 1. 深度社…...
rust的类型转换和一些智能指针用法(四)
基础类型 使用 as 关键字:用于基本数值类型之间的转换,例如将 i32 转换为 u32。 例子:let x: i32 10; let y: u64 x as u64; 使用标准库中的转换方法:如 from() 和 into() 方法,这些方法通常用于无风险的转换&#…...
网络六边形受到攻击
大家读完觉得有帮助记得关注和点赞!!! 抽象 现代智能交通系统 (ITS) 的一个关键要求是能够以安全、可靠和匿名的方式从互联车辆和移动设备收集地理参考数据。Nexagon 协议建立在 IETF 定位器/ID 分离协议 (…...
Redis相关知识总结(缓存雪崩,缓存穿透,缓存击穿,Redis实现分布式锁,如何保持数据库和缓存一致)
文章目录 1.什么是Redis?2.为什么要使用redis作为mysql的缓存?3.什么是缓存雪崩、缓存穿透、缓存击穿?3.1缓存雪崩3.1.1 大量缓存同时过期3.1.2 Redis宕机 3.2 缓存击穿3.3 缓存穿透3.4 总结 4. 数据库和缓存如何保持一致性5. Redis实现分布式…...
相机Camera日志实例分析之二:相机Camx【专业模式开启直方图拍照】单帧流程日志详解
【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了: 这一篇我们开始讲: 目录 一、场景操作步骤 二、日志基础关键字分级如下 三、场景日志如下: 一、场景操作步骤 操作步…...
基础测试工具使用经验
背景 vtune,perf, nsight system等基础测试工具,都是用过的,但是没有记录,都逐渐忘了。所以写这篇博客总结记录一下,只要以后发现新的用法,就记得来编辑补充一下 perf 比较基础的用法: 先改这…...
【JavaWeb】Docker项目部署
引言 之前学习了Linux操作系统的常见命令,在Linux上安装软件,以及如何在Linux上部署一个单体项目,大多数同学都会有相同的感受,那就是麻烦。 核心体现在三点: 命令太多了,记不住 软件安装包名字复杂&…...
Fabric V2.5 通用溯源系统——增加图片上传与下载功能
fabric-trace项目在发布一年后,部署量已突破1000次,为支持更多场景,现新增支持图片信息上链,本文对图片上传、下载功能代码进行梳理,包含智能合约、后端、前端部分。 一、智能合约修改 为了增加图片信息上链溯源,需要对底层数据结构进行修改,在此对智能合约中的农产品数…...
初探Service服务发现机制
1.Service简介 Service是将运行在一组Pod上的应用程序发布为网络服务的抽象方法。 主要功能:服务发现和负载均衡。 Service类型的包括ClusterIP类型、NodePort类型、LoadBalancer类型、ExternalName类型 2.Endpoints简介 Endpoints是一种Kubernetes资源…...
springboot整合VUE之在线教育管理系统简介
可以学习到的技能 学会常用技术栈的使用 独立开发项目 学会前端的开发流程 学会后端的开发流程 学会数据库的设计 学会前后端接口调用方式 学会多模块之间的关联 学会数据的处理 适用人群 在校学生,小白用户,想学习知识的 有点基础,想要通过项…...
libfmt: 现代C++的格式化工具库介绍与酷炫功能
libfmt: 现代C的格式化工具库介绍与酷炫功能 libfmt 是一个开源的C格式化库,提供了高效、安全的文本格式化功能,是C20中引入的std::format的基础实现。它比传统的printf和iostream更安全、更灵活、性能更好。 基本介绍 主要特点 类型安全:…...
AI语音助手的Python实现
引言 语音助手(如小爱同学、Siri)通过语音识别、自然语言处理(NLP)和语音合成技术,为用户提供直观、高效的交互体验。随着人工智能的普及,Python开发者可以利用开源库和AI模型,快速构建自定义语音助手。本文由浅入深,详细介绍如何使用Python开发AI语音助手,涵盖基础功…...
